2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  計算機學院計算機科學與技術專業(yè)</p><p>  《程序設計綜合課程設計》報告</p><p> ?。?010/2011學年 第一學期)</p><p>  學生姓名: </p><p>  學生班級: </p><p>  學生學號: </p>&

2、lt;p>  指導教師: </p><p>  2011 年 1 月 9 日</p><p><b>  數(shù)</b></p><p><b>  值</b></p><p><b>  分</b></p><p><

3、;b>  析</b></p><p><b>  2</b></p><p><b>  目錄</b></p><p>  第一章 課程設計的目的和要求1</p><p>  1.1課程設計的目的1</p><p>  1.2 課程設計的基本要求1&l

4、t;/p><p>  1.3 系統(tǒng)編寫目的1</p><p>  第二章 課程設計任務內容2</p><p>  2.1 課程設計的內容的基本闡述2</p><p>  2.2 課程設計所要實現(xiàn)的基本功能3</p><p>  第三章 課程設計說明3</p><p>  3.1 模塊描述

5、3</p><p>  3.2 程序性能4</p><p>  3.3 算法及輸入輸出項5</p><p>  3.4 流程邏輯6</p><p>  3.5 接口及數(shù)據(jù)文件的存儲6</p><p>  3.6 程序運行的限制條件7</p><p>  第四章 軟件使用說明7<

6、/p><p>  第五章 程序設計的心得與體會13</p><p>  附錄一 參考文獻14</p><p>  附錄二 程序清單15</p><p>  第一章 課程設計的目的和要求</p><p>  課程設計的主要目的是培養(yǎng)學生綜合運用C語言及C++程序設計課程所學到的知識,編寫C程序解決實際問題的能力,以及嚴

7、謹?shù)墓ぷ鲬B(tài)度和良好的程序設計習慣。</p><p>  通過課程設計的訓練,學生應該能夠了解程序設計的基本開發(fā)過程,掌握編寫、調試和測試C語言程序的基本技巧,充分理解結構化程序設計的基本方法。</p><p>  C語言程序設計的主要任務時要求學生遵循軟件開發(fā)過程的基本規(guī)范,運用結構化程序設計的方法,按照課程設計的題目要求,分析、設計、編寫、調試和測試C語言程序及編寫設計報告。</p

8、><p>  1.1課程設計的目的</p><p>  1、鞏固和加深學生對C語言課程的基本知識的理解和掌握; </p><p>  2、掌握C語言編程和程序調試的基本技能;</p><p>  3、掌握利用C語言進行軟件設計的方法;</p><p>  4、提高程序設計以及說明文檔的能力;</p><

9、p>  5、提高運用C語言解決實際問題的能力。</p><p>  1.2 課程設計的基本要求</p><p>  1、根據(jù)所確定的課程設計題目,分析該程序的需求;</p><p>  2、對系統(tǒng)功能模塊進行分析,寫出詳細的設計說明文檔;</p><p>  3、要求做一個選擇性界面,進行選擇性執(zhí)行子程序;</p><

10、;p>  4、編寫程序代碼,代碼量要求在400行左右,調試所寫程序并保證</p><p><b>  其能夠正確運行;</b></p><p>  5、設計完成的軟件盡量便于操作和使用;</p><p>  6、報告要獨立完成;</p><p>  1.3 系統(tǒng)編寫目的 </p><p> 

11、 此課程設計為數(shù)值分析的算法編程,通過編寫十種數(shù)值分析的算法,更好的了解各種算法的計算方法,熟悉并加以掌握。通過這個程序讓運行此程序的人可以對這十種數(shù)值分析的基本方法有一定了解,并會運用這些程序算法來解決部分問題。</p><p>  第二章 課程設計任務內容</p><p>  2.1 課程設計的內容的基本闡述</p><p>  此次課程設計的題目為數(shù)值分析2,

12、就是做一個關于數(shù)值分析算法的程序選擇十個算法:1.阿當姆斯預測-校正公式2.埃特金插值3.復化辛卜生公式4.高斯-賽德爾迭代法5.列主元高斯消去法.6.龍貝格算法7.龍格-庫塔算法8.四階阿當姆斯預測-校正公式9.追趕法解三對角方程組10.最小二乘法,并把這十個算法程序在同一個主程序中選擇性實現(xiàn)。</p><p>  2.2 課程設計所要實現(xiàn)的基本功能</p><p>  1、各個算法要有

13、相對獨立能單獨運行的程序;</p><p>  2、制作一個選擇性界面,顯示出所有選項,需要考慮選擇結果錯誤的情況;</p><p>  3、在主程序執(zhí)行時可以選擇性退出,否則繼續(xù)執(zhí)行,并且在程序中選擇執(zhí)行程序;</p><p>  第三章 課程設計說明</p><p><b>  3.1 模塊描述</b></p&

14、gt;<p><b>  1.選擇性界面</b></p><p>  用switch語句進行選擇,共十個程序為:</p><p>  1.阿當姆斯預測-校正公式</p><p><b>  2.埃特金插值</b></p><p><b>  3.復化辛卜生公式</b&g

15、t;</p><p>  4.高斯-賽德爾迭代法</p><p>  5.列主元高斯消去法</p><p><b>  6.龍貝格算法</b></p><p><b>  7.龍格-庫塔算法</b></p><p>  8.四階阿當姆斯預測-校正公式</p>&

16、lt;p>  9.追趕法解三對角方程組</p><p><b>  10.最小二乘法</b></p><p>  這便是選擇模塊,用switch語句實現(xiàn)的。</p><p><b>  2.執(zhí)行子程序模塊</b></p><p>  #include "文件名.cpp"[1

17、]</p><p>  在函數(shù)頭中包含文件名,引用的CPP文件,以實現(xiàn)在主程序中調用子程序的目的。</p><p><b>  3.2 程序性能</b></p><p>  對于主程序來說,它綜合了10種算法,并且可以正常的調用文件并正確運行。有可視化選擇性界面,選擇執(zhí)行也可以選擇退出。,執(zhí)行完一個子程序會有相應的提示問是否要退出,比較人性化。

18、</p><p>  對于阿當姆斯預測-校正公式,,其步長為0.25,其精確度達到了0.000001,此程序計算出了20個數(shù)值。</p><p>  艾特金插值的算法可以自動插入插值點以及函數(shù)值4組,可以是任意4組值,最后的精度可以達到0.000001,復化辛卜生公式的算法結果的精確度也是0.000001。</p><p>  追趕法求解三對角方程組的算法比較便捷,

19、可以直接輸入矩陣的對角元素,這樣的算法具有普遍性,可以解決一類問題,精確度達到0.01。</p><p>  龍格--庫塔的算法計算出20個數(shù)值,步長為0.05,精度0.00001,誤差較小。</p><p>  3.3 算法及輸入輸出項</p><p>  埃特金算法既是用兩個k-1次插值做線性插值得到k次插值公式,實質還是拉格朗日插值。因此,誤差可用拉格朗日余項

20、定理來求得!e=f(n+1)(ξ)/(n+1)!*(x-x0)*(x-x1)*(x-x2)...(x-xn).</p><p>  復合辛卜生公式是采用“拋物線法”計算定積分所導出一個近似計算公式。 其計算誤差不超過這里M是被積函數(shù)f(x)的4階導數(shù)絕對值的上界。如果f(x)是三次多項式函數(shù),則誤差為0。此時辛卜生公式成為精確計算公式。</p><p>  高斯消去法求解n階線性方程組的基

21、本思想是在逐步消元的過程中把方程組的系數(shù)矩陣華為上三角矩陣,從而將原方程組約化為容易求解的等價三角方程組。</p><p>  龍貝格算法利用外推法,提高了計算精度,加快了收斂速度。</p><p>  對每一個從2做到,一直做到小于給定的精度是停止計算。其中(復化梯度求積公式),。</p><p>  最小二乘法:a=(NΣxy-ΣxΣy)/(NΣx^2-(Σx)

22、^2) ;b=y(平均)-ax(平均)</p><p>  當執(zhí)行主程序時,輸入序列號進行算法的選擇,輸入的是數(shù)字,要求正確輸入。輸入正確的數(shù)字選擇算法開始運行子程序的時部分子程序需要輸入數(shù)值,按照要求輸入即可;輸出項就是運行后直接輸出結果至屏幕。</p><p><b>  3.4 流程邏輯</b></p><p><b>  圖

23、3.4-1 </b></p><p>  這是主程序的流程圖。 </p><p>  3.5 接口及數(shù)據(jù)文件的存儲</p><p>  #include "1.Adams亞當母斯.cpp"</p><p>  #include "2.埃特金插

24、值.cpp"</p><p>  #include "3.復化辛卜生公式.cpp"</p><p>  #include "4.高斯-賽德爾迭代法.cpp"</p><p>  #include "5.列主元高斯消去法.cpp"</p><p>  #include &qu

25、ot;6.龍貝格算法.cpp"</p><p>  #include "7.龍格-庫塔算法.cpp"</p><p>  #include "8.四階阿當姆斯預測-校正公式.cpp"</p><p>  #include "9.追趕法解三對角方程組.cpp"</p><p>

26、;  #include "10.最小二乘法.cpp"[1]</p><p>  這一塊是把主程序和各個子程序連接在一塊的函數(shù),可以看作接口。</p><p>  部分數(shù)據(jù)直接錄在子程序中,部分數(shù)據(jù)需要人工錄入來解決一系列的問題,比較人性化,實用性強。</p><p>  3.6 程序運行的限制條件</p><p>  此程

27、序的編譯及運行環(huán)境是Microsoft Visual C++ 6.0,系統(tǒng)基本要求是windows2000及以上版本;</p><p>  第四章 軟件使用說明</p><p>  此軟件使用便捷,但是要注意使用方法。運行主程序后要按照要求輸入選擇性數(shù)字,這些數(shù)字不能是字符,不能是數(shù)字串,只能是一個數(shù)字,并且這個數(shù)是1到10這10個數(shù)中的,輸入后摁回車可以執(zhí)行子程序。有些子程序的執(zhí)行需要輸

28、入數(shù)值(有些不需要),只要按照要求輸入即可。再選擇完第一次以后會有一個相應模塊運行來實現(xiàn)是否退出程序,并且每一次運行后都會詢問。下面通過截圖進一步說明此軟件;首先運行主程序會出現(xiàn)一個界面,界面如下圖:</p><p><b>  圖4-1</b></p><p>  在運行主程序時十個子程序的運行結果分別如下圖:</p><p>  1.阿當姆

29、斯預測-校正公式</p><p><b>  圖4-2</b></p><p><b>  2.埃特金插值</b></p><p><b>  圖4-3</b></p><p><b>  3.復化辛卜生公式</b></p><p>

30、;<b>  圖4-4</b></p><p>  4.高斯-賽德爾迭代法</p><p><b>  圖4-5</b></p><p>  5.列主元高斯消去法</p><p><b>  圖4-6</b></p><p><b>  6.龍

31、貝格算法</b></p><p><b>  圖4-7</b></p><p><b>  7.龍格-庫塔算法</b></p><p><b>  圖4-8</b></p><p>  8.四階阿當姆斯預測-校正公式</p><p><

32、b>  圖4-9</b></p><p>  9.追趕法解三對角方程組</p><p><b>  圖4-10</b></p><p><b>  10.最小二乘法</b></p><p><b>  圖4-11 </b></p><p&g

33、t;  運行完程序接著還有一個詢問是否要退出程序,y是退出,n是繼續(xù)選擇執(zhí)行子程序,觀看其它數(shù)值分析的算法具體截圖如下:</p><p><b>  圖4-12</b></p><p><b>  圖4-13</b></p><p>  第五章 程序設計的心得與體會</p><p>  課程設計是培

34、養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程.隨著科學技術發(fā)展的日新日異,程序軟件已經(jīng)成為當今計算機應用中空前活躍的領域, 在生活領域中的應用可以說得是無處不在。因此作為二十一世紀的大學來說掌握簡單的軟件的開發(fā)技術是十分重要的。</p><p>  回顧起此次數(shù)值分析的課程設計,至今我仍感慨頗多,的確,從選題到定稿,從理論到實踐,在整整三

35、個星期的日子里,可以說得是苦多于甜,但是可以學到很多很多的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設

36、計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,通過這次課程設計之后,一定把以前所學過的知識重新溫故。</p><p>  我得到了很多同學的幫助。我想沒有他們我可能都要放棄了,因為我本人對數(shù)值分析的算法本來就不是很熟悉,學的東西也不能很好的靈活應用,理論聯(lián)系不了實際。以前的匯編語言沒學好,一開始的程序這塊兒就要令我抓狂了。</p><p>  通過這段時

37、間的學習,我認為要學好C++程序這門課程,不僅要認真閱讀課本知識,更重要的是要通過上機實踐才能增強和鞏固我的知識。特別是作為大學生,更要注重實踐這一環(huán)節(jié),只有這樣我們才能成為合格的計算機人材。</p><p>  整個過程不斷的調試,在調用子程序的時候遇到了部分問題,最后幸好都解決了。通過這次課程設計也穩(wěn)固了一些已經(jīng)學習的數(shù)值分析的算法,同時了解了一些以前沒有接觸的數(shù)值分析的算法。總之,這次的課程設計受益匪淺。&

38、lt;/p><p><b>  附錄一 參考文獻</b></p><p>  【1】常用算法程序集(C++描述)(第四版),作者徐士良;</p><p>  【2】C++程序設計,作者譚浩強教授。</p><p><b>  附錄二 程序清單</b></p><p><b&

39、gt;  主程序:</b></p><p>  #include <iostream> //主程序大部分參考[2]</p><p>  using namespace std;</p><p>  #include "1.Adams亞當母斯.cpp"</p><p>  #include &quo

40、t;2.埃特金插值.cpp"</p><p>  #include "3.復化辛卜生公式.cpp"</p><p>  #include "4.高斯-賽德爾迭代法.cpp"</p><p>  #include "5.列主元高斯消去法.cpp"</p><p>  #inc

41、lude "6.龍貝格算法.cpp"</p><p>  #include "7.龍格-庫塔算法.cpp"</p><p>  #include "8.四階阿當姆斯預測-校正公式.cpp"</p><p>  #include "9.追趕法解三對角方程組.cpp"</p>

42、<p>  #include "10.最小二乘法.cpp"</p><p>  int main()</p><p><b>  { </b></p><p><b>  int i;</b></p><p><b>  char p;</b>&l

43、t;/p><p>  cout<<endl;</p><p>  cout<<" 數(shù)值分析2"<<endl;</p><p>  cout<<"********************************************

44、*****************************"<<endl;</p><p>  cout<<"*************************************************************************"<<endl;</p><p>  cout<<&quo

45、t;下面有十種數(shù)值分析的算法可供研究,請進行選擇,然后觀看相應算法程序的運行!"<<endl;</p><p>  cout<<endl;</p><p>  cout<<" 1.阿當姆斯預測-校正公式"<<endl;</p><p>

46、  cout<<endl;</p><p>  cout<<" 2.埃特金插值"<<endl;</p><p>  cout<<endl;</p><p>  cout<<"

47、 3.復化辛卜生公式"<<endl;</p><p>  cout<<endl;</p><p>  cout<<" 4.高斯-賽德爾迭代法"<<endl;</p><p>  cout<<endl;</p>

48、<p>  cout<<" 5.列主元高斯消去法"<<endl;</p><p>  cout<<endl;</p><p>  cout<<" 6.龍貝格算法"<<en

49、dl;</p><p>  cout<<endl;</p><p>  cout<<" 7.龍格-庫塔算法"<<endl;</p><p>  cout<<endl;</p><p>  cout<<"

50、; 8.四階阿當姆斯預測-校正公式"<<endl;</p><p>  cout<<endl;</p><p>  cout<<" 9.追趕法"<<endl;</p><p>  c

51、out<<endl;</p><p>  cout<<" 10.最小二乘法"<<endl;</p><p>  cout<<endl;</p><p>  cout<<endl;</p><p>  for(i

52、=0;;i++)</p><p><b>  {</b></p><p>  cout<<"*************************************************************************"<<endl;</p><p>  cout<<&

53、quot;*************************************************************************"<<endl;</p><p>  cout<<"下面請進行選擇,選擇算法前面的數(shù)字從而觀察一個數(shù)值分析算法的運行"<<endl;</p><p><b> 

54、 int t;</b></p><p><b>  cin>>t;</b></p><p><b>  switch(t)</b></p><p>  {case 1:cout<<"您選擇的是阿當姆斯預測-校正公式"<<endl;main1();break

55、;//Adams亞當母斯</p><p>  case 2:cout<<"您選擇的是埃特金插值"<<endl;main2();break;//埃特金插值</p><p>  case 3:cout<<"您選擇的是復化辛卜生公式"<<endl;main3();break;//復化辛卜生公式&l

56、t;/p><p>  case 4:cout<<"您選擇的是高斯-賽德爾迭代法"<<endl;main4();break;//高斯-賽德爾迭代法</p><p>  case 5:cout<<"您選擇的是列主元高斯消去法"<<endl;main5();break;//列主元高斯消去法</p>

57、<p>  case 6:cout<<"您選擇的是龍貝格算法"<<endl;main6();break;//龍貝格算法</p><p>  case 7:cout<<"您選擇的是龍格-庫塔算法"<<endl;main7();break;//龍格-庫塔算法</p><p>  case

58、 8:cout<<"您選擇的是四階阿當姆斯預測-校正公式"<<endl;main8();break;//四階阿當姆斯預測-校正公式</p><p>  case 9:cout<<"您選擇的是追趕法"<<endl;main9();break;//追趕法解三對角方程組</p><p>  case 1

59、0:cout<<"您選擇的是最小二乘法"<<endl;main10();break;//最小二乘法</p><p><b>  }</b></p><p>  cout<<endl;</p><p>  cout<<"接下來是否退出程序?退出請選擇y,不退出繼續(xù)執(zhí)

60、行請選擇n"<<endl;</p><p><b>  cin>>p;</b></p><p>  if (p=='y')</p><p><b>  break;</b></p><p>  else continue;</p>&l

61、t;p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  1.阿當姆斯預測-校正公式源代碼:[1]</p><p>  # include<iostream></p

62、><p>  # include<cmath></p><p>  float f(float x,float y)</p><p><b>  {</b></p><p>  return (y-2*x/y);</p><p><b>  }</b></p&g

63、t;<p>  float function(float xm,float ym,float l)</p><p><b>  {</b></p><p>  float xn,yn;</p><p>  float K1,K2,K3,K4;</p><p><b>  xn=xm+l;</

64、b></p><p>  K1=f(xm,ym);K2=f(xm+l/2,ym+K1*l/2 );;</p><p>  K3=f(xm+l/2,ym+K2*l/2);K4=f(xn,ym+l*K3);</p><p>  yn=ym+l*(K1+2*K2+2*K3+K4)/6;</p><p>  cout<<"

65、("<<xn<<","<<yn<<")"<<endl;</p><p>  return yn;</p><p><b>  }</b></p><p>  void main1()</p><p><b&

66、gt;  {</b></p><p><b>  int N,n;</b></p><p>  float a,b,c,d;</p><p>  float x1,x2,x3,x4,y1,y2,y3,y4,yp,x0,y0,h;</p><p>  cout<<"請輸入X0,Y0,及H,

67、N,其中,N為大于等于4的整數(shù)."<<endl;</p><p>  cin>>x0>>y0>>h>>N;</p><p>  x1=x0+h;x2=x0+2*h;x3=x0+3*h;</p><p>  y1=function(x0,x0,h);</p><p>  y2

68、=function(x1,y1,h);</p><p>  y3=function(x2,y2,h);</p><p><b>  n=4;</b></p><p>  while(n<=N)</p><p><b>  {</b></p><p><b> 

69、 x4=x3+h;</b></p><p>  a=f(x3,y3);b=f(x2,y2);</p><p>  c=f(x1,y1);d=f(x0,y0);</p><p>  yp=y3+h*(55*a-59*b+37*c-9*d)/24;</p><p>  y4=y3+h*(9*f(x4,yp)+19*a-5*b+c)/2

70、4;</p><p>  cout<<"("<<x4<<","<<y4<<")"<<endl;</p><p><b>  n++;</b></p><p><b>  x3=x4;</b>&

71、lt;/p><p><b>  y3=y4;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  2.埃特金插值源代碼:</p><p>  #include<iostream></p

72、><p>  #include<cmath></p><p>  #include<iomanip></p><p>  using namespace std; </p><p>  void main2()</p><p><b>  {</b>

73、;</p><p>  int n=3;//n次插值有n+1個插值節(jié)點</p><p>  double x[4];//x[]存放插值節(jié)點</p><p>  double y[4];//y[]存放插值節(jié)點函數(shù)值,每次線性插值結果取代老值</p><p>  double h;

74、 //h是要插值的點</p><p><b>  int i;</b></p><p>  cout<<"請依次輸入各個插值節(jié)點及其函數(shù)值(xi,yi):"<<endl;</p><p>  for(i=0;i<=n;i++)</p><p>  {cin>>

75、;x[i]; cin>>y[i];}</p><p>  cout<<"請輸入要插值的點h:";</p><p><b>  cin>>h;</b></p><p><b>  int k=1;</b></p><p>  while(k!=n

76、+1)</p><p>  { //埃特金插值,由線性插值循環(huán)n次到n次插值</p><p>  for(i=k;i<=n;i++)</p><p><b>  {</b></p><p>  y[i]=y[i]*(h-x[k-1])/(x[i]-x[k-1])+y[k-1]*(h-x[i])/(x[k-1]-

77、x[i]);</p><p><b>  }</b></p><p><b>  k=k+1;</b></p><p><b>  }</b></p><p>  cout<<"埃特金插值函數(shù)在"<<h<<"處的

78、值,即f(h)的近似值為: ";</p><p>  cout<<y[n]<<endl;</p><p><b>  }</b></p><p>  3.復化辛卜生公式源代碼:</p><p>  #include<iostream></p><p>

79、  #include<cmath></p><p>  void main3()</p><p><b>  {</b></p><p>  int i,n=2;</p><p><b>  float s;</b></p><p>  float f(float

80、);</p><p>  float Simpson(float (*)(float),float,float,int );</p><p>  for( i=0;i<=2;i++ )</p><p><b>  {</b></p><p>  s=Simpson(f,0,1,n);</p><

81、p>  cout<<"s("<<n<<")="<<s<<endl;</p><p><b>  n*=2;</b></p><p><b>  }</b></p><p><b>  }</b>&

82、lt;/p><p>  float Simpson(float (*f)(float),float a,float b,int n)</p><p><b>  {</b></p><p><b>  int k;</b></p><p>  float s,s1,s2=0.0;</p>

83、<p>  float h=(b-a)/n;</p><p>  s1=f(a+h/2);</p><p>  for(k=1;k<=n-1;k++)</p><p><b>  {</b></p><p>  s1+=f(a+k*h+h/2);</p><p>  s2+=f(a

84、+k*h);</p><p><b>  }</b></p><p>  s=h/6*(f(a)+4*s1+2*s2+f(b));</p><p><b>  return s;</b></p><p><b>  }</b></p><p>  flo

85、at f(float x)</p><p><b>  {</b></p><p>  return 1/(1+x*x);</p><p>  /*if(x==0)</p><p><b>  return 1;</b></p><p><b>  else<

86、;/b></p><p>  return sin(x)/x;*/</p><p><b>  }</b></p><p>  4.高斯-賽德爾迭代法源代碼:</p><p>  #include<iostream></p><p>  #include<cmath>

87、</p><p>  using namespace std;</p><p>  void main4()</p><p><b>  {</b></p><p>  int N=100;</p><p><b>  int i;</b></p><p&

88、gt;  double *x;</p><p>  double c[12]={8.0,-3.0,2.0,20.0,</p><p>  4.0,11.0,-1.0,33.0,</p><p>  6.0,3.0,12.0,36.0};//here must be modifed</p><p>  double *GauseSeidel(

89、double *,int);</p><p>  x=GauseSeidel(c,3);</p><p>  for( i=0;i<=2;i++ )</p><p>  cout<<"x["<<i<<"]="<<x[i]<<endl;</p>&l

90、t;p><b>  }</b></p><p>  double *GauseSeidel(double *a,int n)</p><p><b>  {</b></p><p>  int N=100;</p><p>  int i,j,nu=0;</p><p&

91、gt;  double *x,dx;</p><p>  x =newdouble[n*sizeof(double)];</p><p>  for( i=0;i<=n-1;i++ )</p><p><b>  x[i]=0.0;</b></p><p><b>  do</b></

92、p><p><b>  {</b></p><p>  for( i=0;i<=n-1;i++ )</p><p><b>  {</b></p><p><b>  dx=0.0;</b></p><p>  for( j=0;j<=n-1;

93、j++ )</p><p>  dx+=*(a+i*(n+1)+j)*x[j];</p><p>  dx=(*(a+i*(n+1)+n)-dx)/(*(a+i*(n+1)+i));</p><p><b>  x[i]+=dx;</b></p><p><b>  }</b>&

94、lt;/p><p>  if( nu>N )</p><p><b>  {</b></p><p>  cout<<"迭代發(fā)散\n";</p><p><b>  return 0;</b></p><p><b>  }<

95、/b></p><p><b>  nu++;</b></p><p><b>  }</b></p><p>  while(fabs(dx)>1e-6);</p><p><b>  return x;</b></p><p><b

96、>  }</b></p><p>  5.列主元高斯消去法源代碼:</p><p>  #include<iostream></p><p>  #include<cmath></p><p>  using namespace std;</p><p>  void main

97、5()</p><p><b>  {</b></p><p><b>  int i;</b></p><p><b>  float *x;</b></p><p>  float c[3][4] ={0.101,2.304,3.555,1.183,</p>

98、<p>  -1.347,3.712,4.623,2.137,</p><p>  -2.835,1.072,5.643,3.035};</p><p>  float *ColPivot(float *,int);</p><p>  x=ColPivot(c[0],3);</p><p>  for( i=0;i<=2;i

99、++ )</p><p>  cout<<"x("<<i<<")="<<x[i]<<endl;</p><p><b>  }</b></p><p>  float *ColPivot( float *c,int n )</p>

100、<p><b>  {</b></p><p>  int i,j,t,k;</p><p>  float *x,p;</p><p>  x=new float[n*sizeof(float)];</p><p>  for( i=0;i<=n-2;i++)</p><p>&

101、lt;b>  {</b></p><p><b>  k=i;</b></p><p>  for(j=i+1;j<=n-1;j++)</p><p>  if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))</p><p><b>  k

102、=j;</b></p><p><b>  if(k!=i)</b></p><p>  for( j=i;j<=n;j++ )</p><p><b>  {</b></p><p>  p=*(c+i*(n+1)+j);</p><p>  *(c+i*

103、(n+1)+j)=*(c+k*(n+1)+j);</p><p>  *(c+k*(n+1)+j)=p;</p><p><b>  }</b></p><p>  for( j=i+1;j<=n-1;j++ )</p><p><b>  {</b></p><p>

104、  p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));</p><p>  for( t=i;t<=n;t++ )</p><p>  *(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));</p><p><b>  }</b></p><p><b>  }<

105、;/b></p><p>  for( i=n-1;i>=0;i--)</p><p><b>  {</b></p><p>  for( j=n-1;j>=i+1;j--)</p><p>  (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));</p>&

106、lt;p>  x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));</p><p><b>  }</b></p><p><b>  return x;</b></p><p><b>  }</b></p><p>  6.龍貝格算法源代

107、碼:</p><p>  #include<iostream></p><p>  #include<cmath></p><p>  using namespace std;</p><p>  float ff(float x)</p><p><b>  {</b>&

108、lt;/p><p>  return 1/(1+x*x);</p><p><b>  }</b></p><p>  float Romberg(float a,float b,float (*f)(float),float epsilon)</p><p><b>  {</b></p>

109、<p>  int n=1,k;</p><p>  float h=b-a,x,temp;</p><p>  float T1,T2,S1,S2,C1,C2,R1,R2;</p><p>  T1=(b-a)/2*((*f)(a)+(*f)(b));</p><p><b>  while(1)</b>

110、</p><p><b>  {</b></p><p><b>  temp=0;</b></p><p>  for(k=0;k<=n-1;k++)</p><p><b>  {</b></p><p>  x=a+k*h+h/2;</

111、p><p>  temp+=(*f)(x);</p><p><b>  }</b></p><p>  T2=(T1+temp*h)/2;</p><p>  if(fabs(T2-T1)<epsilon)</p><p>  return T2;</p><p>  

112、S2=T2+(T2-T1)/3.0;</p><p><b>  if(n==1)</b></p><p><b>  {</b></p><p><b>  T1=T2;</b></p><p><b>  S1=S2;</b></p>&

113、lt;p><b>  h/=2;</b></p><p><b>  n*=2;</b></p><p><b>  continue;</b></p><p><b>  }</b></p><p>  C2=S2+(S2-S1)/15;</

114、p><p><b>  if(n==2)</b></p><p><b>  {</b></p><p><b>  C1=C2;</b></p><p><b>  T1=T2;</b></p><p><b>  S1=S

115、2;</b></p><p><b>  h/=2;</b></p><p><b>  n*=2;</b></p><p><b>  continue;</b></p><p><b>  }</b></p><p>

116、;  R2=C2+(C2-C1)/63;</p><p><b>  if(n==4)</b></p><p><b>  {</b></p><p><b>  R1=R2;</b></p><p><b>  C1=C2;</b></p>

117、<p><b>  T1=T2;</b></p><p><b>  S1=S2;</b></p><p><b>  h/=2;</b></p><p><b>  n*=2;</b></p><p><b>  continue;

118、</b></p><p><b>  }</b></p><p>  if(fabs(R2-R1)<epsilon)</p><p>  return R2;</p><p><b>  R1=R2;</b></p><p><b>  C1=C2

119、;</b></p><p><b>  T1=T2;</b></p><p><b>  S1=S2;</b></p><p><b>  h/=2;</b></p><p><b>  n*=2;</b></p><p&g

120、t;<b>  }</b></p><p><b>  }</b></p><p>  void main6()</p><p><b>  {</b></p><p>  float epsilon=5e-6;</p><p>  cout<&l

121、t;"R="<<Romberg(0,1,ff,epsilon)<<endl;</p><p><b>  return ;</b></p><p><b>  }</b></p><p>  7.龍格-庫塔算法源代碼:</p><p>  #include

122、<iostream></p><p>  using namespace std;</p><p>  void main7()</p><p><b>  {</b></p><p>  void Runge_Kutta(float (*f)(float,float),float a,float b,flo

123、at y0,int N);</p><p>  float f(float,float);</p><p>  float a=0,b=1,y0=1;</p><p>  Runge_Kutta(f,a,b,y0,20);</p><p><b>  }</b></p><p>  void Ru

124、nge_Kutta(float (*f)(float x,float y),float a,float b,float y0,int N)</p><p><b>  {</b></p><p>  float x=a,y=y0,K1,K2,K3,K4;</p><p>  float h=(b-a)/N;</p><p&g

125、t;<b>  int i;</b></p><p>  cout<<"x[0]="<<x<<'\t'<<"y[0]="<<y<<endl;</p><p>  for(i=1;i<=N;i++)</p><p>

126、;<b>  {</b></p><p>  K1=f(x,y);</p><p>  K2=f(x+h/2,y+h*K1/2);</p><p>  K3=f(x+h/2,y+h*K2/2);</p><p>  K4=f(x+h,y+h*K3);</p><p>  y=y+h*(K1+2*K

127、2+2*K3+K4)/6;</p><p><b>  x=a+i*h;</b></p><p>  cout<<"x["<<i<<"]="<<x<<" y["<<i<<"]="<<y&l

128、t;<endl;</p><p><b>  }</b></p><p><b>  }</b></p><p>  float fa(float x,float y)</p><p><b>  {</b></p><p>  return x+

129、y;</p><p><b>  }</b></p><p>  8.四階阿當姆斯預測-校正公式源代碼:</p><p>  #include<iostream></p><p>  using namespace std;</p><p>  float f2(float x,flo

130、at y)</p><p><b>  {</b></p><p>  return -x*y*y;</p><p><b>  }</b></p><p>  float * Runge_Kuttaa(float (*f)(float x,float y),float a,float b,floa

131、t y0,int N)</p><p><b>  {</b></p><p>  float x=a,y=y0,K1,K2,K3,K4,*yy;</p><p>  float h=(b-a)/N;</p><p><b>  int i;</b></p><p>  yy

132、=new float[(sizeof(float)*3)];</p><p>  for(i=1;i<=3;i++)</p><p><b>  {</b></p><p>  K1=f(x,y);</p><p>  K2=f(x+h/2,y+h*K1/2);</p><p>  K3=f

133、(x+h/2,y+h*K2/2);</p><p>  K4=f(x+h,y+h*K3);</p><p>  y=y+h*(K1+2*K2+2*K3+K4)/6;</p><p><b>  x=a+i*h;</b></p><p>  *(yy+i-1)=y;</p><p><b>

134、;  }</b></p><p>  return yy;</p><p><b>  }</b></p><p>  void Adams(float a,float b,int N,float (*f)(float x,float y),float y0)</p><p><b>  {<

135、/b></p><p><b>  int i;</b></p><p>  float y1,y2,y,yp,yc,*yy,h,x;</p><p>  cout<<"x[0]="<<a<<'\t'<<" y[0]="<&

136、lt;y0<<endl;</p><p>  yy=Runge_Kuttaa(f,a,b,y0,N);</p><p><b>  y1=yy[0];</b></p><p><b>  y2=yy[1];</b></p><p><b>  y=yy[2];</b>

137、;</p><p>  h=(b-a)/N;</p><p>  for(i=1;i<=3;i++)</p><p>  cout<<"x["<<i<<"]="<<a+i*h<<" y["<<i<<"]

138、="<<*(yy+i-1)<<endl;</p><p>  for(i=3;i<N;i++)</p><p><b>  {</b></p><p><b>  x=a+i*h;</b></p><p>  yp=y+h*(55*f(x,y)-59*f(x-

139、h,y2)+37*f(x-2*h,y1)-9*f(x-3*h,y0))/24.0;</p><p>  yc=y+h*(9*f(x+h,yp)+19*f(x,y)-5*f(x-h,y2)+f(x-2*h,y1))/24.0;</p><p>  cout<<"x["<<i+1<<"]="<<x+h<

140、;<" y["<<i+1<<"]="<<yc<<endl;</p><p><b>  y0=y1;</b></p><p><b>  y1=y2;</b></p><p><b>  y2=y;</b&g

141、t;</p><p><b>  y=yc;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void main8()</p><p><b>  {</b></p&

142、gt;<p>  float a=0,b=5.0,y0=2.0;</p><p><b>  int N=20;</b></p><p>  Adams(a,b,N,f2,y0);</p><p><b>  }</b></p><p>  9.追趕法解三對角方程組源代碼:</p

143、><p>  #include<iostream></p><p>  #include<iomanip></p><p>  #include<cmath></p><p>  using namespace std;</p><p>  int main9()</p>

144、<p><b>  {</b></p><p>  int n=4; //n為方程組系數(shù)矩陣的階數(shù)</p><p>  float b[5]; //b[]三對角系數(shù)矩陣的對角元素,b[0]不用</p><p>  float c[5]; //c[]為三對角系數(shù)矩陣的上對角元素,c[0]不用&

145、lt;/p><p>  float a[5]; //a[]為三對角系數(shù)矩陣的下對角元素,a[0]不用</p><p>  float f[6]; //f[]為方程組的常向量項 </p><p>  float L[6]; //克勞特分解A=LU,其中,L為下二對角矩陣.L[]存放其對角元素,L[0]不用</p><p>  

146、float U[5]; //U為單位上二對角矩陣.U[]存放其上對角元素,U[0]不用</p><p><b>  int i,j;</b></p><p><b>  //輸入c[]</b></p><p>  cout<<"請輸入三對角方程組系數(shù)矩陣的上對角元素: "<<

溫馨提示

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

評論

0/150

提交評論