數(shù)值分析課程設計--初值問題、邊值問題_第1頁
已閱讀1頁,還剩38頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p>  課 程 設 計 報 告</p><p>  課程名稱 </p><p>  課題名稱 </p><p>  專 業(yè) </p><p>  班 級 <

2、/p><p>  學 號 </p><p>  姓 名 </p><p>  指導教師 </p><p>  2009年 12 月 15 日</p&

3、gt;<p>  課 程 設 計 任 務 書</p><p>  課程名稱 數(shù)值分析 </p><p>  課 題 初值問題、邊值問題 </p><p>  專業(yè)班級 </p><p>  學生姓名 </p><p

4、>  學 號 </p><p>  指導老師 </p><p>  審 批 </p><p>  任務書下達日期 2011 年 12 月 5 日</p><p>  任務

5、完成日期 2011 年 12 月 15日</p><p><b>  目 錄</b></p><p>  一、設計內(nèi)容與要求..............................................................................4</p><p>  二、問題提出的背景........

6、.......................................................................6</p><p>  三、問題的提出.......................................................................................6</p><p>  四、算法的理論

7、依據(jù)及推導...................................................................7</p><p><b>  五、程序模塊</b></p><p>  1、函數(shù)模塊......................................................................

8、.......13</p><p>  2、模塊流程圖.........................................................................14</p><p>  六、實驗結(jié)果與調(diào)試..........................................................................

9、....24</p><p>  七、心得體會..........................................................................................27八、附件.........................................................................................

10、.........28</p><p>  一、設計內(nèi)容與設計要求</p><p><b>  1.設計內(nèi)容:</b></p><p>  對課程《計算方法》中的常見算法進行綜合設計或應用(具體課題題目見后面的供選題目)。</p><p><b>  2.設計要求:</b></p>&

11、lt;p>  課程設計報告正文內(nèi)容</p><p>  問題的描述及算法設計;</p><p>  算法的流程圖(要求畫出模塊圖);</p><p>  算法的理論依據(jù)及其推導;</p><p>  相關(guān)的數(shù)值結(jié)果(通過程序調(diào)試),;</p><p>  數(shù)值計算結(jié)果的分析;</p><p&g

12、t;  附件(所有程序的原代碼,要求對程序?qū)懗霰匾淖⑨專?lt;/p><p><b>  書寫格式</b></p><p>  a.要求用A4紙打印成冊</p><p>  b.正文格式:一級標題用3號黑體,二級標題用四號宋體加粗,正文用小四號宋體;行距為22。</p><p>  c.正文的內(nèi)容:正文總字數(shù)要求在300

13、0字左右(不含程序原代碼)。</p><p>  d.封面格式如下頁。</p><p><b>  考核方式</b></p><p>  指導老師負責驗收程序的運行結(jié)果,并結(jié)合學生的工作態(tài)度、實際動手能力、創(chuàng)新精神和設計報告等進行綜合考評,并按優(yōu)秀、良好、中等、及格和不及格五個等級給出每位同學的課程設計成績。具體考核標準包含以下幾個部分:<

14、;/p><p>  a.平時出勤 (占10%)</p><p>  b.系統(tǒng)需求分析、功能設計、數(shù)據(jù)結(jié)構(gòu)設計及程序總體結(jié)構(gòu)合理與否(占10%)</p><p>  c.程序能否完整、準確地運行,個人能否獨立、熟練地調(diào)試程序(占40%)</p><p>  d.設計報告(占30%)</p><p>  注意:不得抄襲他人的報

15、告(或給他人抄襲),一旦發(fā)現(xiàn),成績?yōu)榱惴帧?lt;/p><p>  e.獨立完成情況(占10%)。</p><p><b>  課程驗收要求</b></p><p>  a.判定算法設計的合理性,運行相關(guān)程序,獲得正確的數(shù)值結(jié)果。</p><p><b>  b.回答有關(guān)問題。</b></p>

16、;<p>  c.提交課程設計報告。</p><p>  d.提交軟盤(源程序、設計報告文檔)。</p><p>  e.依內(nèi)容的創(chuàng)新程度,完善程序情況及對程序講解情況打分。</p><p><b>  2、進度安排</b></p><p><b>  班級:</b></p>

17、;<p>  主講教師:輔導教師: </p><p><b>  上機時間安排:</b></p><p>  第 12 周 星期一 8時:30分——11時:30分</p><p>  星期三 8時:30分——11時:30分</p><p>  星期五 8時:30分——11時:30分</p&g

18、t;<p>  第 13 周 星期三 8時:30分——11時:30分</p><p>  星期五 8時:30分——11時:30分</p><p><b>  二、問題提出的背景</b></p><p>  人類社會進入20世紀以來,在科學技術(shù)和生產(chǎn)力飛速發(fā)展的同時</p><p>  世界各國的人

19、口也以空前的規(guī)模增長。我們知道人口是反應國情、國力基本情況的重要指標,例如評價一個國家或一個地區(qū)的發(fā)展?jié)摿r離不開現(xiàn)在與今后各類人口數(shù)量比例指數(shù)和年齡分布。故人口的預測是制定和順利實現(xiàn)社會經(jīng)濟各項戰(zhàn)略設想的基礎和出發(fā)點,制定正確人口政策的科學依據(jù)。</p><p><b>  三、問題的提出</b></p><p>  常用的用于人口預測的模型是阻滯增長模型,即Log

20、istic模型。</p><p>  該模型的微分方程為:</p><p> ?。ㄆ渲校簽楣逃性鲩L率(即人口平均增長率),表示平均人口死亡率,表示在自然資源和環(huán)境條件允許的條件下所能容納的最大人口數(shù)量,稱為人口容量。)</p><p>  利用分離變量法可以求解得:</p><p>  對該微分方程,分別用顯示歐拉法,隱式歐拉法,改進歐拉法,

21、梯形公式,經(jīng)典龍格—庫塔法,理查德森外推法近似求解,得出估算人口;</p><p>  有限差分法求解方程:</p><p>  四、算法的理論基礎及其推導</p><p><b>  1、顯示歐拉公式:</b></p><p>  推導:把區(qū)間[a,b]分成n等分,記分點為</p><p>&l

22、t;b>  那么由上式有:</b></p><p>  用向前差商法近似代替導數(shù)得:</p><p><b>  即: </b></p><p>  若用近似值代替,可得顯示歐拉公式。</p><p><b>  2、隱式歐拉公式:</b></p><p&g

23、t;  推導:把區(qū)間[a,b]分成n等分,記分點為</p><p>  用向后差商法近似代替導數(shù)得:</p><p><b>  即: </b></p><p><b>  亦即:</b></p><p>  若用近似值代替,可得顯示歐拉公式。</p><p><b&

24、gt;  3、梯形公式:</b></p><p>  推導:把區(qū)間[a,b]分成n等分,記分點為</p><p>  分別由顯示歐拉公式和隱式歐拉公式,求其平均值可得。</p><p><b>  改進歐拉方法:</b></p><p>  推導:把區(qū)間[a,b]分成n等分,記分點為</p>&

25、lt;p>  由顯示歐拉公式和梯形公式,可得改進歐拉公式。</p><p>  經(jīng)典龍格—庫塔公式:</p><p>  推導:由微分中值定理知</p><p><b>  從而得到:</b></p><p>  若簡單地取左端點處的斜率:</p><p>  作為平均斜率的近似值,則得&l

26、t;/p><p>  若用點處的斜率近似值與右端點處的斜率近似值</p><p>  的算術(shù)平均值作為斜率的近似值,則得</p><p>  由上式可知,利用兩個點上斜率近似值與的加權(quán)平均值作為平均斜率的近似值,利用歐拉公式預估,可構(gòu)造形如:</p><p>  的計算公式(稱為二階龍格—庫塔法),為確定系數(shù)與,將在處泰勒展開,并注意到,就有&l

27、t;/p><p><b>  另一方面:</b></p><p><b>  由上兩式知:</b></p><p>  利用類似的推導法即可求得四階龍格—庫塔法.</p><p>  理查德森外推法公式(歐拉步長自適應法):</p><p>  推導:從結(jié)點出發(fā),先以h為步長,經(jīng)

28、一步計算出的近似值,如果使用的是p階的方法,則:</p><p>  ...............(1)</p><p>  在一般情況下,式中系數(shù)c既依賴于h,又依賴于,但當h較小時,可近似地看作常數(shù)。</p><p>  然后將步長折半,即以為步長,仍從出發(fā),經(jīng)兩步計算求得的另一個近似值,其中每一步的截斷誤差約為,故:.............(2)</

29、p><p>  以乘以(1),并與(2)相減,得:</p><p><b>  即:</b></p><p>  .....................(3)</p><p><b>  若?。?lt;/b></p><p>  ..........................

30、................(4)</p><p>  作為的近似值,則其精度顯然比與都要高,這種修正的思想實際上與龍貝格數(shù)值積分法思想是一致的。</p><p>  若將(4)式改寫為:</p><p><b>  則由立即可得:</b></p><p>  由此可見,若以作為的近似值,則其誤差可用前后兩次計算結(jié)果

31、之差來表示,即可用:</p><p>  來判斷所選取色步長是否適當。具體的做法是:</p><p>  若(由精度要求確定),則反復將步長折半進行計算,直至,并取最后一次步長所得值作為;</p><p>  若,則反復將步長加倍進行計算,直至,并取上一次步長所得值作為.</p><p>  有限差分法:將區(qū)間[a,b]N等分,記分點為<

32、;/p><p><b>  在內(nèi)結(jié)點 處有</b></p><p><b>  由上兩式知:</b></p><p><b>  故:</b></p><p>  當h較小時,略去式中余項,則得確定近似值的線性方程組:</p><p>  將它稍加整理后寫成

33、矩陣形式,即:</p><p><b>  其中:</b></p><p>  方程組的,,系數(shù)矩陣為對角占優(yōu)的三對角線矩陣,可用追趕法解之。</p><p><b>  五、程序模塊</b></p><p><b>  函數(shù)模塊</b></p><p>

34、;  void GJEulerMethord(double N,int a,int b,double y0,double xm,double b2,double l)</p><p><b>  //改進歐拉公式</b></p><p>  void ExplicitEulerMethord(double N,int a,int b,double y0,double

35、xm,double b2,double l)</p><p><b>  //顯示歐拉公式</b></p><p>  void ImplicitEulerMethord(double N,int a,int b,double y0,double xm,double b2,double l)</p><p><b>  //隱式歐拉公

36、式</b></p><p>  void TxingMethord(double N,int a,int b,double y0,double xm,double b2,double l)</p><p><b>  //梯形公式</b></p><p>  void R_KMethord(double N,int a,int b,

37、double y0,double xm,double b2,double l)</p><p>  //經(jīng)典龍格—庫塔公式</p><p>  void JSuMethord(double N,int a,int b,double y0,double xm,double b2,double l)</p><p>  //理查德森外推公式</p><

38、;p>  void FiniteDifferenceMethod(double f[],double a1[],double b1[],double c[],int max)</p><p><b>  //有限差分法</b></p><p><b>  模塊流程圖</b></p><p> ?。?)改進歐拉公式:&

39、lt;/p><p><b> ?。?)顯示歐拉法:</b></p><p><b> ?。?)隱式歐拉法:</b></p><p><b>  (4)梯形公式:</b></p><p><b> ?。?)龍格庫塔法:</b></p><p&

40、gt; ?。?)理查德森外推法:</p><p><b>  有限差分法</b></p><p><b>  六、實驗結(jié)果與調(diào)試</b></p><p>  選擇1,改進歐拉法實現(xiàn);</p><p>  選擇2,顯示歐拉法實現(xiàn);</p><p>  選擇3,隱式歐拉法實現(xiàn);&

41、lt;/p><p>  選擇4,梯形公式實現(xiàn);</p><p>  選擇5,經(jīng)典龍格—庫塔法實現(xiàn);</p><p>  選擇6,理查德森外推法實現(xiàn);</p><p>  選擇7,有限差分法解方程組;</p><p><b>  七、心得體會</b></p><p>  兩周的課

42、程設計很快就結(jié)束了,回顧這兩周的課程設計,真是布滿了艱辛與坎坷。由于聶老師是一個非常細致,嚴謹?shù)娜?,對我們的要求也很嚴格,這使得我備受壓力,深怕自己不能按時完成老師指定的任務,但是在老師細心的指導下,我逐步找到了問題的突破口,不再舉手無措。</p><p>  在實驗過程中,我都是嚴格按著老師的要求,先理清問題的解題思路,然后一步一步的翻譯成計算機語言程序,上機操作,不斷調(diào)試。最初,在調(diào)試的過程中出現(xiàn)了很多的錯誤

43、,例如:語法錯誤,算法錯誤,層出不窮。但是在老師的指導下,經(jīng)過幾天的實踐操作后,出現(xiàn)的錯誤逐漸減少了。特別是在寫到理查德森外推法和隱式歐拉法時,花費了我很多很多的時間,我一遍一遍的翻閱教科書,在圖書館查閱相關(guān)的資料,同時不斷的征求老師的意見,與周圍的同學不斷討論,不斷的修正。最終,問題解決了</p><p>  通過這次課程設計使我懂得了理論與實際相結(jié)合是很重要的,使自己的實際動手能力和獨立思考的能力能得到很大的

44、提高。雖說困難重重,但是只要你不斷的堅持,只要你有足夠的耐心,只要你努力,勝利就一定是屬于你的。</p><p><b>  八、附件(源代碼)</b></p><p>  #include<iostream></p><p>  #include<stdio.h></p><p>  #incl

45、ude<math.h></p><p>  using namespace std;</p><p>  #define esp 0.01</p><p>  double q(double x)</p><p><b>  {</b></p><p><b>  retur

46、n 1;</b></p><p><b>  }</b></p><p>  double r(double x)</p><p><b>  {</b></p><p><b>  return x;</b></p><p><b&g

47、t;  }</b></p><p>  double f(double x,double y,double b2,double l) </p><p><b>  {</b></p><p>  return ((b2*y)-(l*y*y));</p><p><b>  }</b>&l

48、t;/p><p><b>  void p()</b></p><p><b>  {</b></p><p>  printf("以下為近十年來的人口計算情況:\n\n");</p><p><b>  }</b></p><p>  

49、void GJEulerMethord(double N,int a,int b,double y0,double xm,double b2,double l)//檢查正確</p><p><b>  {</b></p><p><b>  int k;</b></p><p>  double h,x,t1,t2,y,y

50、1,m;</p><p>  h=(b-a)/N;</p><p><b>  x=a;</b></p><p><b>  y=y0;</b></p><p><b>  m=xm/y-1;</b></p><p>  for(k=0;k<N;k

51、++)</p><p><b>  {</b></p><p>  t1=y+h*f(x,y,b2,l);</p><p><b>  x=x+h;</b></p><p>  y1=xm/(1+m*exp(-(b2)*x));</p><p>  t2=y+h*f(x,t1

52、,b2,l);</p><p>  y=(t1+t2)/2;</p><p>  printf("年份:~%.0f",x);</p><p>  printf("");</p><p>  printf("估計人口(千萬):%f",y);</p><p> 

53、 printf("");</p><p>  printf("計算人口(千萬):%f\n",y1);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void ExplicitEulerMethord(do

54、uble N,int a,int b,double y0,double xm,double b2,double l)//檢查正確</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  double h,x,y,y1,m;</p><p>  h

55、=(b-a)/N;</p><p><b>  x=a;</b></p><p><b>  y=y0;</b></p><p><b>  m=xm/y-1;</b></p><p>  for(i=0;i<10;i++)</p><p><

56、;b>  {</b></p><p>  y=y+h*f(x,y,b2,l);</p><p><b>  x=x+h;</b></p><p>  y1=xm/(1+m*exp(-(b2)*x));</p><p>  printf("年份:~%.0f",x);</p>

57、<p>  printf("");</p><p>  printf("估計人口(千萬):%f",y);</p><p>  printf("");</p><p>  printf("計算人口(千萬):%f\n",y1);</p><p>&l

58、t;b>  }</b></p><p><b>  }</b></p><p>  void ImplicitEulerMethord(double N,int a,int b,double y0,double xm,double b2,double l)//檢查正確</p><p><b>  {</b>

59、;</p><p><b>  int k,i;</b></p><p>  double h,x,y[20],yy,yp,m,y1;</p><p>  h=(b-a)/N;</p><p><b>  y[0]=y0;</b></p><p><b>  x=a

60、;</b></p><p>  m=xm/y0-1;</p><p>  for(i=0;i<10;i++)</p><p><b>  {</b></p><p>  y[i+1]=y[i]+h*f(x,y[i],b2,l);</p><p><b>  k=0;&l

61、t;/b></p><p>  while(k++<100005)</p><p><b>  {</b></p><p>  yy=y[i]+h*f(x+h,y[i+1],b2,l)-y[i+1];</p><p>  yp=h*(b-2*l*y[i+1])-1;</p><p> 

62、 y1=xm/(1+m*exp(-(b2)*(x+h)));</p><p>  if(fabs(yp)<0.0000001)</p><p><b>  {</b></p><p>  printf("年份:~%.0f",x+h);</p><p>  printf(""

63、);</p><p>  printf("估計人口(千萬):%f",y[i+1]);</p><p>  printf("");</p><p>  printf("計算人口(千萬):%f\n",y1);</p><p><b>  break;</b><

64、;/p><p><b>  }</b></p><p>  yy=y[i+1]-yy/yp;</p><p>  if(fabs(yy-y[i+1])<esp)</p><p><b>  {</b></p><p>  printf("年份:~%.0f"

65、;,x+h);</p><p>  printf("");</p><p>  printf("估計人口(千萬):%f",y[i+1]);</p><p>  printf("");</p><p>  printf("計算人口(千萬):%f\n",y1);&

66、lt;/p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  y[i+1]=yy;</p><p><b>  }</b></p&g

67、t;<p><b>  x=x+h;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void TxingMethord(double N,int a,int b,double y0,double xm,double b2,do

68、uble l)//檢查正確</p><p><b>  {</b></p><p><b>  int k,i;</b></p><p>  double h,x,y[20],yy,yp,m,y1,g[20];</p><p>  h=(b-a)/N;</p><p><

69、;b>  y[0]=y0;</b></p><p><b>  x=a;</b></p><p>  m=xm/y0-1;</p><p>  for(i=0;i<10;i++)</p><p><b>  {</b></p><p>  y[i+1]

70、=y[i]+h*f(x,y[i],b2,l);</p><p><b>  k=0;</b></p><p>  while(k++<100)</p><p><b>  {</b></p><p>  yy=y[i]+h*f(x+h,y[i+1],b2,l)-y[i+1];</p>

71、;<p>  yp=h*(b-2*l*y[i+1])-1;</p><p>  y1=xm/(1+m*exp((-b2)*(x+h)));</p><p>  if(fabs(yp)<0.0000001)</p><p><b>  {</b></p><p>  g[i+1]=y[i]+h/2*(f

72、(x+h,y[i],b2,l)+f(x,y[i+1],b2,l));</p><p>  printf("年份:~%.0f",x+h);</p><p>  printf("");</p><p>  printf("估計人口(千萬):%f",g[i+1]);</p><p>  

73、printf("");</p><p>  printf("計算人口(千萬):%f\n",y1);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  yy=y[i+1]-yy/yp;</p&g

74、t;<p>  if(fabs(yy-y[i+1])<esp)</p><p><b>  {</b></p><p>  g[i+1]=y[i]+h/2*(f(x+h,y[i],b2,l)+f(x,y[i+1],b2,l));</p><p>  printf("年份:~%.0f",x+h);</

75、p><p>  printf("");</p><p>  printf("估計人口(千萬):%f",g[i+1]);</p><p>  printf("");</p><p>  printf("計算人口(千萬):%f\n",y1);</p>&

76、lt;p><b>  break;</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  y[i+1]=yy;</p><p><b>  }</b></p><p>

77、;<b>  x=x+h;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void R_KMethord(double N,int a,int b,double y0,double xm,double b2,double l)//檢查正確&

78、lt;/p><p><b>  {</b></p><p><b>  int k;</b></p><p>  double h,x,k1,k2,k3,k4,y,y1,m;</p><p>  h=(b-a)/N;</p><p><b>  x=a;</b&g

79、t;</p><p><b>  y=y0;</b></p><p><b>  m=xm/y-1;</b></p><p>  for(k=0;k<N;k++)</p><p><b>  {</b></p><p>  k1=f(x,y,b2,

80、l);</p><p>  k2=f(x+h/2,y+(h*k1)/2,b2,l);</p><p>  k3=f(x+h/2,y+(h*k2)/2,b2,l);</p><p>  k4=f(x+h,y+h*k3,b2,l);</p><p>  y=y+h*(k1+2*k2+2*k3+k4)/6;</p><p>

81、<b>  x=x+h;</b></p><p>  y1=xm/(1+m*exp(-(b2)*x));</p><p>  printf("年份:~%.0f",x);</p><p>  printf("");</p><p>  printf("估計人口(千萬):%

82、f",y);</p><p>  printf("");</p><p>  printf("計算人口(千萬):%f\n",y1);</p><p><b>  }</b></p><p><b>  }</b></p><p&

83、gt;  void JSuMethord(double N,int a,int b,double y0,double xm,double b2,double l)//算法待定</p><p><b>  {</b></p><p><b>  int i,c;</b></p><p>  double h,x,y[20],

84、p[20],y1,m;</p><p>  h=(b-a)/N;</p><p><b>  y[0]=y0;</b></p><p><b>  x=a;</b></p><p>  m=xm/y0-1;</p><p>  for(i=0;i<10;i++)<

85、/p><p><b>  {</b></p><p>  h=(b-a)/N;</p><p>  y[i+1]=y[i]+h*f(x,y[i],b2,l);</p><p>  p[i+1]=y[i]+h/2*f(x,y[i],b2,l);</p><p>  x=(i+1)*h;</p>

86、;<p>  y1=xm/(1+m*exp(-(b2)*x));</p><p>  printf("年份:~%.0f",x);</p><p>  printf("");</p><p>  if(fabs(y[i+1]-p[i+1])>=0.01)</p><p><b&

87、gt;  c=1;</b></p><p><b>  else</b></p><p><b>  c=-1;</b></p><p><b>  switch(c)</b></p><p><b>  {</b></p>&l

88、t;p>  case 1: while(fabs(y[i+1]-p[i+1])>=0.01)</p><p><b>  {</b></p><p><b>  h=h/2.0;</b></p><p>  y[i+1]=y[i]+h*f(x,y[i],b2,l);</p><p>  

89、p[i+1]=y[i]+h/2*f(x,y[i],b2,l);</p><p>  y[i]=y[i+1];</p><p>  if(fabs(y[i+1]-p[i+1])<0.01)</p><p><b>  {</b></p><p>  printf("估計人口(千萬):%f",y[i

90、+1]);</p><p>  printf("");</p><p>  printf("計算人口(千萬):%f\n",y1);</p><p><b>  break;</b></p><p><b>  }</b></p><p&g

91、t;<b>  };break;</b></p><p>  case -1: while(fabs(y[i+1]-p[i+1])<0.01)</p><p><b>  {</b></p><p><b>  h=h*2.0;</b></p><p>  y[i+1]=

92、y[i]+h*f(x,y[i],b2,l);</p><p>  p[i+1]=y[i]+h/2*f(x,y[i],b2,l);</p><p>  y[i]=y[i+1];</p><p>  if(fabs(y[i+1]-p[i+1])>=0.01)</p><p><b>  { </b></p>

93、;<p>  printf("估計人口(千萬):%f",y[i+1]);</p><p>  printf("");</p><p>  printf("計算人口(千萬):%f\n",y1);</p><p><b>  break;</b></p>&l

94、t;p><b>  }</b></p><p><b>  };break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

95、<p>  void FiniteDifferenceMethod(double f[],double a1[],double b1[],double c[],int max)//有限差分法</p><p><b>  {</b></p><p><b>  int i,k;</b></p><p>  doub

96、le n[10],y[10],x[10],y0,y1,h,x1,k1,k2;</p><p>  cout<<"請輸入y0"<<endl;</p><p><b>  cin>>y0;</b></p><p>  cout<<"請輸入y1"<<e

97、ndl;</p><p><b>  cin>>y1;</b></p><p>  cout<<"請輸入k1"<<endl;</p><p><b>  cin>>k1;</b></p><p>  cout<<&quo

98、t;請輸入k2"<<endl;</p><p><b>  cin>>k2;</b></p><p>  cout<<"請輸入k"<<endl;</p><p><b>  cin>>k;</b></p><p&g

99、t;  h=(k1-k2)/k;</p><p>  for(i=1;i<=max-1;i++)</p><p><b>  {</b></p><p>  //cout<<"請輸入c["<<i<<"]"<<endl;</p><p

100、>  //cin>>c[i];</p><p>  //cout<<endl;</p><p><b>  c[i]=1;</b></p><p><b>  }</b></p><p>  for(i=1;i<=max;i++)</p><p

101、><b>  {</b></p><p>  //cout<<"請輸入b1["<<i<<"]"<<endl;</p><p>  //cin>>b1[i];</p><p>  //cout<<endl;</p>

102、<p><b>  x1=h*i;</b></p><p>  b1[i]=-2-q(x1)*h*h;</p><p><b>  }</b></p><p>  for(i=2;i<=max;i++)</p><p><b>  {</b></p>

103、<p>  //cout<<"請輸入a1["<<i<<"]"<<endl;</p><p>  //cin>>a1[i];</p><p>  //cout<<endl;</p><p><b>  a1[i]=1;</b&g

104、t;</p><p><b>  }</b></p><p>  for(i=0;i<max;i++)</p><p><b>  {</b></p><p>  //cout<<"請輸入f["<<i<<"]"<

105、<endl;</p><p>  //cin>>f[i];</p><p>  //cout<<endl;</p><p><b>  x1=h*i;</b></p><p>  f[i]=r(x1)*h*h;</p><p><b>  }</b&g

106、t;</p><p>  f[0]=f[0]-y0;</p><p>  f[max-1]=f[max-1]-y1;</p><p>  n[1]=c[1]/b1[1];</p><p>  for(i=2;i<=max-1;i++)</p><p><b>  {</b></p>

107、;<p>  n[i]=c[i]/(b1[i]-a1[i]*n[i-1]);</p><p><b>  }</b></p><p>  y[1]=f[0]/b1[1];</p><p>  for(i=2;i<=max;i++)</p><p><b>  {</b></

108、p><p>  y[i]=(f[i-1]-a1[i]*y[i-1])/(b1[i]-a1[i]*n[i-1]);</p><p><b>  }</b></p><p>  x[max]=y[max];</p><p>  printf("利用追趕法求得結(jié)果如下:\n");</p><

109、p>  printf("");</p><p>  printf("x[%d]=%f\n",max-1,x[max]);</p><p>  for(i=max-1;i>=1;i--)</p><p><b>  {</b></p><p>  x[i]=y[i]-n

110、[i]*x[i+1];</p><p>  printf("");</p><p>  printf("x[%d]=%f\n",i-1,x[i]);</p><p><b>  }</b></p><p><b>  }</b></p><

111、;p>  void main()</p><p><b>  {</b></p><p>  int a=0,b=100,N=10,max,d;</p><p>  double l,b2;</p><p>  doublexm;</p><p>  double y0,f[9];<

112、/p><p>  double c[100],a1[100],b1[100];</p><p><b>  char e;</b></p><p>  printf("對logistic人口預測模型運用數(shù)值方法進行人口預測:\n\n\n");</p><p>  printf("****

113、****************\n");</p><p>  printf("*1:改進歐拉法 *\n");</p><p>  printf("*2:顯示歐拉法 *\n");</p><p>  printf("*3:隱式歐拉法 *\n");&l

114、t;/p><p>  printf("*4:梯形公式 *\n");</p><p>  printf("*5:經(jīng)典龍格-庫塔法 *\n");</p><p>  printf("*6:理查森外推法 *\n");</p><p>  printf(&q

115、uot;*7:線性有限差分法 *\n");</p><p>  printf("********************\n\n\n");</p><p><b>  do</b></p><p><b>  {</b></p><p>  printf(

116、"請選擇進行人口預測所使用的算法(1、2、3、4、5、6、7):\n");</p><p><b>  cin>>d;</b></p><p><b>  if(d==1)</b></p><p><b>  { p();</b></p><p&g

117、t;  printf("請輸入該國的平均人口出生率:\n");</p><p><b>  cin>>b2;</b></p><p>  printf("請輸入該國十年前的人口數(shù)量(千萬):\n");</p><p><b>  cin>>y0;</b><

118、;/p><p>  printf("請輸入該國的最大人口容載量(千萬):\n");</p><p><b>  cin>>xm;</b></p><p><b>  l=b2/xm;</b></p><p>  GJEulerMethord(N,a,b,y0,xm,b2,

119、l);</p><p><b>  }</b></p><p><b>  if(d==2)</b></p><p><b>  { p();</b></p><p>  printf("請輸入該國的平均人口出生率:\n");</p>&l

120、t;p><b>  cin>>b2;</b></p><p>  printf("請輸入該國十年前的人口數(shù)量(千萬):\n");</p><p><b>  cin>>y0;</b></p><p>  printf("請輸入該國的最大人口容載量(千萬):\n&q

121、uot;);</p><p><b>  cin>>xm;</b></p><p><b>  l=b2/xm;</b></p><p>  ExplicitEulerMethord(N,a,b,y0,xm,b2,l);</p><p><b>  }</b><

122、;/p><p><b>  if(d==3)</b></p><p><b>  { p();</b></p><p>  printf("請輸入該國的平均人口出生率:\n");</p><p><b>  cin>>b2;</b></p&

123、gt;<p>  printf("請輸入該國十年前的人口數(shù)量(千萬):\n");</p><p><b>  cin>>y0;</b></p><p>  printf("請輸入該國的最大人口容載量(千萬):\n");</p><p><b>  cin>>

124、xm;</b></p><p><b>  l=b2/xm;</b></p><p>  ImplicitEulerMethord(N,a,b,y0,xm,b2,l);</p><p><b>  }</b></p><p><b>  if(d==4)</b>&l

125、t;/p><p><b>  { p();</b></p><p>  printf("請輸入該國的平均人口出生率:\n");</p><p><b>  cin>>b2;</b></p><p>  printf("請輸入該國十年前的人口數(shù)量(千萬):\n&

126、quot;);</p><p><b>  cin>>y0;</b></p><p>  printf("請輸入該國的最大人口容載量(千萬):\n");</p><p><b>  cin>>xm;</b></p><p><b>  l=b2/

127、xm;</b></p><p>  TxingMethord(N,a,b,y0,xm,b2,l);</p><p><b>  }</b></p><p><b>  if(d==5)</b></p><p><b>  { p();</b></p>

128、<p>  printf("請輸入該國的平均人口出生率:\n");</p><p><b>  cin>>b2;</b></p><p>  printf("請輸入該國十年前的人口數(shù)量(千萬):\n");</p><p><b>  cin>>y0;<

129、/b></p><p>  printf("請輸入該國的最大人口容載量(千萬):\n");</p><p><b>  cin>>xm;</b></p><p><b>  l=b2/xm;</b></p><p>  R_KMethord(N,a,b,y0,x

130、m,b2,l);</p><p><b>  }</b></p><p><b>  if(d==6)</b></p><p><b>  { p();</b></p><p>  printf("請輸入該國的平均人口出生率:\n");</p>

131、<p><b>  cin>>b2;</b></p><p>  printf("請輸入該國十年前的人口數(shù)量(千萬):\n");</p><p><b>  cin>>y0;</b></p><p>  printf("請輸入該國的最大人口容載量(千萬):

132、\n");</p><p><b>  cin>>xm;</b></p><p><b>  l=b2/xm;</b></p><p>  JSuMethord(N,a,b,y0,xm,b2,l);</p><p><b>  }</b></p>

133、;<p><b>  if(d==7)</b></p><p><b>  {</b></p><p>  cout<<"請輸入結(jié)點個數(shù) max= ";</p><p><b>  cin>>max;</b></p><p

134、>  cout<<endl;</p><p>  FiniteDifferenceMethod(f,a1,b1,c,max);</p><p><b>  }</b></p><p>  printf("是否繼續(xù)選擇其他算法(Y/N):\n");</p><p><b> 

135、 cin>>e;</b></p><p>  printf("\n");</p><p>  }while(e=='y'||e=='Y');</p><p><b>  }</b></p><p>  數(shù)理系課程設計評分表</p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論