數(shù)值計算基礎實驗指導+部分實驗源代碼+復習指導+三套試題及其答案_第1頁
數(shù)值計算基礎實驗指導+部分實驗源代碼+復習指導+三套試題及其答案_第2頁
數(shù)值計算基礎實驗指導+部分實驗源代碼+復習指導+三套試題及其答案_第3頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)值計算基礎實驗指導書2010年目錄3實驗12 實驗三6 實驗四常8實驗五迭代法實驗一直接法解線性方程組的 二 插 值 方法 數(shù)值積分 微分方程的數(shù)值解 解線性方程組與非線性方程實驗一直接法解線性方程組一、實驗目的掌握全選主元消去法與高斯-塞德爾法解線性方程組。二、實驗內(nèi)容分別寫出Guass列選主元消去法與追趕法的算法, 編寫程序上機調(diào)試出結(jié)果,要求所編 程序適用于任何一解線性方程組問題, 即能解決這一類問題,而不是某一個問題。實驗中以 下列數(shù)據(jù)驗證程序的正確性。52.35.13.7X15.9.61.5x3.8321.74.5.51、用Guass列選主元消去法求解方程組2、用追趕法求解方程組2

2、 0 0 0010x101200x0201200X300010x02400012X50三、實驗儀器設備與材料主流微型計算機四、實驗原理1、Guass列選主元消去法對于AX= BA B是上三角矩陣。即:n1a12aa 1 n1b 121aa b1n1aa 22a2nb201a2naan2bnn00a nn),其中A1 )、消元過程:將 (A|B)進行變換為21nb2bn到n-1選取第k列中絕對值最大元素a、列選主元axb、換行aikk in作為主元。akja/k 1, ,nbkbic、歸一化d、消兀akj /akkbkbk1, ,nbi/akkaijaikakjai k 1, ,n;j kaik

3、b kbi,ik 1,n2 )、回代過程:由(Al B)解出x,Xnn11,x。b n / a nnnXnbka©%1Xk,k1,2,12、追趕法線性方程組為:a1X2a?C2b2b3 a3C3CnanbnXn做LU分解為:,R分解公式:2,3,n)i bi , i bi(i 2,3,n)(i 1,2, ,n 1)i則LUx fLy fAx fUx y回代公式:fiyi1fi(i 2,3,n)y LiiYi 1i(i n 1,n2,1)Xn ynxi yi iXi 1五、實驗步驟1、理解并掌握全選主元消去法與高斯-塞德爾迭代法公式;2、畫出全選主元消去法與高斯 -塞德爾迭代法的流程圖

4、3、使用C語言編寫出相應的程序并調(diào)試驗證通過六、實驗報告要求1、統(tǒng)一使用武漢科技大學實驗報告本書寫,實驗報告的內(nèi)容要求有:實驗目的、 實驗內(nèi)容、程序流程圖、源程序、運行結(jié)果及實驗小結(jié)六個部分。2、源程序需打印后粘貼在實驗報告冊內(nèi);3、運行結(jié)果以屏幕截圖形式保存并打印后粘貼在實驗報告冊內(nèi)。七、實驗注意事項注意如何定義數(shù)據(jù)結(jié)構(gòu)以保存矩陣和解以降低算法的復雜性。八、思考題若使用全主元消去法,在編程中應如何記錄保存對于未知數(shù)的調(diào)換。實驗二插值方法一、實驗目的掌握拉格郎日插值法與牛頓插值法構(gòu)造插值多項式。二、實驗內(nèi)容分別寫出拉格郎日插值法與牛頓插值法的算法,編寫程序上機調(diào)試出結(jié)果,要求所編程序適用于任何

5、一組插值節(jié)點, 即能解決這一類問題,而不是某一個問題。實驗中以下列數(shù)據(jù) 驗證程序的正確性。已知下列函數(shù)表Xiy求時的函數(shù)值。三、實驗儀器設備與材料主流微型計算機四、實驗原理已知n個插值節(jié)點的函數(shù)值,則可由拉格郎日插值公式與牛頓插值公式構(gòu)造出插值多項式,從而由該插值多項式求出所要求點的函數(shù)值。拉格郎日插值公式與牛頓插值公式如下:1、Lagrange 插值公式nLn(X)lo(x)yoli(x)yi|n(x)ynyJO)k 0嗾-(x X。)(X Xi).1 (XXk 1)(Xxn )(X jX)nXXkXo)(XkXi)(xkXk )(Xk Xk )1 1(Xk xn)j XkXjn0j2、Ne

6、wt on插值公式kNn(x)f(Xo) fXo,Xi(XXo)fXo,X1 ,X2(XXo)(X X1)fXo,Xi , Xn(XXo)(X X1) (XXn 1)五、實驗步驟1、理解并掌握拉格郎日插值法與牛頓插值法的公式;2、畫出拉格郎日插值法與牛頓插值法算法的流程圖;3、使用C語言編寫出相應的程序并調(diào)試驗證通過。六、實驗報告要求1、統(tǒng)一使用武漢科技大學實驗報告本書寫,實驗報告的內(nèi)容要求有:實驗目的、實驗內(nèi)容、程序流程圖、源程序、運行結(jié)果及實驗小結(jié)六個部分。2、源程序需打印后粘貼在實驗報告冊內(nèi);3、運行結(jié)果以屏幕截圖形式保存并打印后粘貼在實驗報告冊內(nèi)。七、實驗注意事項Newton 插值法在

7、編程時應注意定義何種數(shù)據(jù)結(jié)構(gòu)以保存差商。八、思考題比較 Lagrange 插值法與 Newton 插值法的異同。實驗三數(shù)值積分、實驗目的掌握復化梯形法與龍貝格法計算定積分。二、實驗內(nèi)容分別寫出變步長梯形法與 Romberge法計算定積分的算法,編寫程序上機調(diào)試出結(jié)果, 要求所編程序適用于任何類型的定積分,即能解決這一類問題,而不是某一個問題。實驗中以下列數(shù)據(jù)驗證程序的正確性。isin x求 dx, 0.00001。 0 x三、實驗儀器設備與材料主流微型計算機四、實驗原理通過變步長梯形法與龍貝格法,我們只要知道已知n個求積節(jié)點的函數(shù)值,則可由相應的公式求出該函數(shù)的積分值,從而不需要求該函數(shù)的原函

8、數(shù)。變步長梯形法與龍貝格法公式如下:1、變步長梯形法T2n用T2nTnf(Xi i)n 1f(x) f(b)i 1f(xi 1/2 )0來控制精度2、龍貝格法n2 Tnhnf(xi1/2)2i 016S1515nRn64163CT用R2n Rn|來控制精度五、實驗步驟1、理解并掌握變步長梯形法與龍貝格法的公式;2、畫出變步長梯形法與龍貝格法的流程圖3、使用C語言編寫出相應的程序并調(diào)試驗證通過六、實驗報告要求1、統(tǒng)一使用武漢科技大學實驗報告本書寫,實驗報告的內(nèi)容要求有:實驗目的、實驗內(nèi)容、程序流程圖、源程序、運行結(jié)果及實驗小結(jié)六個部分。2、源程序需打印后粘貼在實驗報告冊內(nèi);3、運行結(jié)果以屏幕截圖

9、形式保存并打印后粘貼在實驗報告冊內(nèi)。七、實驗注意事項1 sin x在dx積分中,被積函數(shù)在x=0點函數(shù)值為1,對該點在程序設計中應注意對其0x的定義。八、思考題使用復化梯形法與復化Simps on法來計算該問題有何缺點?實驗四常微分方程的數(shù)值解、實驗目的掌握改進歐拉法與四階龍格-庫塔求解一階常微分方程的初值問題。二、實驗內(nèi)容分別寫出改進歐拉法與四階龍格-庫塔求解的算法,編寫程序上機調(diào)試出結(jié)果,要求所編程序適用于任何一階常微分方程的數(shù)值解問題,即能解決這一類問題,而不是某一個問題。實驗中以下列數(shù)據(jù)驗證程序的正確性。2步長h=5。(0 x 5)y xy求y(0)2三、實驗儀器設備與材料主流微型計算

10、機四、實驗原理常微分方程的數(shù)值解主要采用“步進式”,即求解過程順著節(jié)點排列次序一步一步向前推進,在單步法中改進歐拉法和四階龍格-庫塔法公式如下:1、改進歐拉法hf(Xn,yn)yn 1ynyn1yn2、四階龍格hyn處x齊-庫塔法f(x,y n 1 )k1yn _6(k1 f(Xn,yn)2k3k4)k2K4f(Xnh,yn紡)hk2五、實驗步驟1、理解并掌握改進歐拉法與四階龍格 -庫塔法的公式;2、畫出改進歐拉法與四階龍格 -庫塔法的流程圖3、使用C語言編寫出相應的程序并調(diào)試驗證通過六、實驗報告要求1、統(tǒng)一使用武漢科技大學實驗報告本書寫,實驗報告的內(nèi)容要求有:實驗目的、實驗內(nèi)容、程序流程圖、

11、源程序、運行結(jié)果及實驗小結(jié)六個部分。2、源程序需打印后粘貼在實驗報告冊內(nèi);3、運行結(jié)果以屏幕截圖形式保存并打印后粘貼在實驗報告冊內(nèi)。七、實驗注意事項y2Xy2(0 X 5)的精確解為y 2/(1 x),通過調(diào)整步長,觀察結(jié)果的y(o)2精度的變化八、思考題如何對四階龍格-庫塔法進行改進,以保證結(jié)果的精度。建立高斯-塞德爾迭代格式為:(k 1)Xii1(dii 1(k1)(k)ajXj )/aH,i 1,2, ,nj i3)取初值迭代求解至所要求的精度為止。2、牛頓法實驗五迭代法解線性方程組與非線性方程 一、實驗目的掌握高斯-塞德爾迭代法求解線性方程組與牛頓迭代法求方程根。二、實驗內(nèi)容分別寫出高

12、斯-塞德爾迭代法與牛頓迭代法的算法,編寫程序上機調(diào)試出結(jié)果,要求所編程序適用于任何一個方程的求根,即能解決這一類問題, 而不是某一個問題。 實驗中以下列數(shù)據(jù)驗證程序的正確性。1、高斯-塞德爾迭代法求解線性方程組721X124915372X225x12113132013X42、用牛頓迭代法求方程X )直接分離xi,即n Xi (dibijXj)/aii,i 1,2, ,nj 1X 10的近似根,0.00001,牛頓法的初始值為1。三、實驗儀器設備與材料主流微型計算機四、實驗原理二分法通過將含根區(qū)間逐步二分, 從而將根的區(qū)間縮小到容許誤差范圍。牛頓通過迭代的方法逐步趨進于精確解,該兩種方法的公式如

13、下:1、高斯-塞德爾迭代法1)判斷線性方程組是否主對角占優(yōu)nj 1 ai 1,2, ,nj ix x-fxkrk 1 kkf (x)五、實驗步驟1、理解并掌握二分法與牛頓法的公式;2、畫出二分法與牛頓法的流程圖3、使用C語言編寫出相應的程序并調(diào)試驗證通過六、實驗報告要求1、統(tǒng)一使用武漢科技大學實驗報告本書寫,實驗報告的內(nèi)容要求有:實驗目的、 實驗內(nèi)容、程序流程圖、源程序、運行結(jié)果及實驗小結(jié)六個部分。2、源程序需打印后粘貼在實驗報告冊內(nèi);3、運行結(jié)果以屏幕截圖形式保存并打印后粘貼在實驗報告冊內(nèi)。七、實驗注意事項對于二分法應注意二分后如何判斷根的區(qū)間,對于牛頓法注意如何確定迭代過程的結(jié)束八、思考題

14、若使用牛頓法是發(fā)散的,如何對牛頓法進行改進以保證其收斂性。前三個實驗的程序代碼(C/C+ )和運行結(jié)果截圖#includeviostreaGauss全選主元解方程組的源程序及運行結(jié)果m>#i nclude<stdlib.h> #i nclude<math.h>usingn amespacestd;class Matrixpublic:Matrix();Matrix();voidSetMatrix(co nsti ntn,con stdoubleesp1);/構(gòu)造線性方程組相應的矩陣,n為方程的未知數(shù)數(shù)目,esp1為要求的精度voidMax(co nsti ntr)

15、;全選主元voidChangeRC(constintr);/ 根據(jù)主元變換矩陣的行或列 voidEliminate(constintr);/ 處理消元工作 voidResult()const;/ 計算方程的解 voidCalculate();intGetRank()const;/ 返回矩陣的行數(shù) doubleGetX(consti)const;確定方程組的第 i個解(1<=i<=N)private:/指針a和b分別用于存儲方程組的未知數(shù)系數(shù)和方程"="右邊的常數(shù),esp存 / 儲精度double*a,*b,esp;/指針flag用于記錄方程組解的順序int*fl

16、ag;/ 以下的結(jié)構(gòu)體用于在全選主元中記錄最大主元的位置structcoordinateintrow,column;location;intN;/ 方程組未知數(shù)的數(shù)目;intmain()intn;doubleesp1;Matrixmatrix;docout<<" 請輸入方陣的階數(shù): "cin>>n;if(n<0)n=0;/ 如何控制非法字符的輸入?while(n=0 );docout<<" 請輸入計算精度: "cin>>esp1;if(esp1<0)esp1=0;/ 輸入不合法的精度就把精度置

17、0while(esp1=0);cout<<" 輸入線性方程組的增廣矩陣 :n"matrix.SetMatrix(n,esp1);/ 設置矩陣內(nèi)的 數(shù)據(jù)matrix.Calculate(); 計算方程組的解/ 輸出方程組的解cout<<"nn 方程組的解如下 :n"for(inti=1;i<=matrix.GetRank();+i)cout<<"X"<<i<<":"<<matrix.GetX(i)<<endl;return0;M

18、atrix:Matrix() / 將 Matrix 類的數(shù)據(jù)成員初始化a=NULL;b=NULL;flag=NULL;location.row=0;location.column=0; esp=0;N=0;Matrix:Matrix()/釋放指針a、b和flag指向的內(nèi)存空間deletea;deleteb;deleteflag;voidMatrix:SetMatrix(constintn,constdoubleesp1)N=n;esp=esp1;a=newdoubleN*N;b=newdoubleN;flag=newintN;/ 判斷是否成功分配存儲區(qū)if(a=NULL|b=NULL|flag

19、=NULL)cout<<" 分配存儲區(qū)失??! n"exit(EXIT_FAILURE);/ 讀取線性方程組的增廣矩陣for(inti=0;i<N;+i)for(intj=0;j<N;+j) cin>>*(a+i*N+j);cin>>*(b+i);flag 中/flag 中存儲的值對應相應的 x 值,當方程的解由于列變換交換后,/ 的值也相應交換,最后用于恢復解的順序 for(i=0;i<N;+i) *(flag+i)=i; voidMatrix:Max(constintr)doublemax=0;for(inti=r;i

20、<N;+i)for(intj=r;j<N;+j) if(max<fabs(*(a+i*N+j) max=fabs(*(a+i*N+j);/ 設定最大主元的行、列 location.row=i; location.column=j;/ 最大主元小于輸入的精度時,認為方程組無解,退出程序 if(max<=esp)cout<<" 方程組無解! n" exit(EXIT_FAILURE); voidMatrix:ChangeRC(constintr)doubletemp;/ 如果最大主元所在的行不在當前行,則進行行變換 if(location.r

21、ow!=r)for(inti=r;i<N;+i)temp=*(a+r*N+i);(a+r*N+i)=*(a+location.row*N+i);(a+location.row*N+i)=temp;temp=br;br=blocation.row;blocation.row=temp;/若最大主元所在的列不在當前的r列,則進行列變換if(location.column!=r)for(inti=r;i<N;+i)temp=*(a+i*N+r);*(a+i*N+r)=*(a+i*N+location.column); *(a+i*N+location.column)=temp;/交換fl

22、ag中的元素來標記方程解的位置變化inttemp1;temp1=*(flag+r);*(flag+r)=*(flag+location.column);*(flag+location.column)=temp1;voidMatrix:Eliminate(constintr)if(fabs(*(a+N*r+r)<=esp)cout<<" 方程組無解! n"exit(EXIT_FAILURE);for(inti=r+1;i<N;+i)for(intj=r+1;j<N;+j)(*(a+i*N+j)-=(*(a+i*N+r)*(*(a+r*N+j)/(

23、*(a+r*N+r);(*(b+i)-=(*(b+r)*(*(a+i*N+r)/(*(a+r*N+r);voidMatrix:Result()constif(fabs(*(a+N*(N-1)+N-1)<=esp)cout<<" 方程組無解! n"exit(EXIT_FAILURE);doubletemp;*(b+N-1)/=(*(a+N*(N-1)+N-1);/求出 XN-1/ 依次求出 Xi(i=N-2,N-31)for(inti=N-2;i>=0;-i)temp=0;for(intj=i+1;j<N;+j) temp+=(*(a+i*N+j

24、)*(*(b+j);*(b+i)=(*(b+i)-temp)/(*(a+i*N+i);/ 根據(jù) flag 中的數(shù)據(jù)用冒泡排序法恢復方程組解的次序for(i=0;i<N-1;+i)for(intj=0;j<N-i-1;+j)if(*(flag+j)>*(flag+j+1)inttemp1;/ 交換解的順序temp=*(b+j);*(b+j)=*(b+j+1);*(b+j+1)=temp;/ 交換用于標記的元素的順序temp1=*(flag+j);*(flag+j)=*(flag+j+1);*(flag+j+1)=temp1;voidMatrix:Calculate() / 根據(jù)

25、矩陣行數(shù)重復進行尋找最大主元、變換行或列、消元 for(inti=0;i<GetRank()-1;+i) Max(i);ChangeRC(i);Eliminate(i);Result();intMatrix:GetRank()const returnN;/ 返回矩陣的行數(shù)doubleMatrix:GetX(constinti)constreturn*(b+i-1);運行結(jié)果追趕法求解方程組的算法:1輸入方程組的維數(shù) n ,將主對角元素 b(i)(i=0:n-1) ,主對角元素左邊的元素 a(i)(i=0:n-2) ,主對角元素右邊的元素 c(i)(i=0:n-2) ,右端項的元素 f(i

26、)(i=0:n- 1)2 .對方程組的系數(shù)矩陣作Crout分解,(Q)=b(0),對于i=0:n-2,c(i):= B (i):=c(i)/b(i),b(i+1):= a (i+1):= b(i+1)-a(i)*Ri)3. 解方程組 Ly=fb(0):=y(0):=f(0) /a0):=f(0"b(0)對于 i=1 : n-1 , b(i):=y(i):=f(i)-a(i-1)*y(i-1)/b(i)4.解方程組 Ux=ya(n-1):=x(n-1):=b(n-1)對于 i=n-2:0,a(i)=x(i):=b(i)-c(i)*a(i+1);5輸出方程組的解 a(0:n-1) #in

27、clude<iostrea 用追趕法求解方程組的源程序及運行結(jié)果 m>#include<stdlib.h>usingnamespacestd;class MatrixThrpublic:MatrixThr();MatrixThr(); voidSetMatrixThr(constintn);/ 設置三對角矩陣的數(shù)據(jù) voidResult();/ 計算三對角矩陣的解doubleGetX(constinti)const;取得第 i個解,i從 1 開始intGetN() const;/ 返回未知數(shù)的數(shù)目private:intN;/N 為未知數(shù)的數(shù)目/b為矩陣主對角線的元素首地

28、址,a為主對角線左邊一斜條元素的首地址, c為主對角線右邊一斜條元素首地址,f為方程組的常數(shù)首地址 double*a,*b,*c,*f;intmain()MatrixThrmatrix;intn;docout<<" 輸入三對角方程組的變量的數(shù)目 N:"cin>>n;while(n<3);cout<<" 請依次輸入三對角方程組每行的數(shù)據(jù) (0元素除 外):n" matrix.SetMatrixThr( n);計算方程組的解matrix.Result();/ 輸出方程組的解 cout<<" 方程

29、的解如下 :n"for(inti=1;i<=matrix.GetN();+i) cout<<"X"<<i<<":"<<matrix.GetX(i)<<endl;return0;MatrixThr:MatrixThr() / 初始化相關數(shù)據(jù)N=0;a=NULL;b=NULL;c=NULL;f=NULL;MatrixThr:MatrixThr() / 釋放分配的內(nèi)存空間deletea;deleteb;deletec;deletef; voidMatrixThr:SetMatrixTh

30、r(constintn) / 根據(jù)輸入的未知數(shù)個數(shù)設置矩陣的數(shù)據(jù) N=n;a=newdoubleN;b=newdoubleN;c=newdoubleN;f=newdoubleN;/ 若內(nèi)存分配失敗,退出程序if(a=NULL|b=NULL|c=NULL|f=NULL)cout<<" 初始化分配存儲空間失??! n"exit(EXIT_FAILURE);/ 依次輸入三對角矩陣每行的元素cin>>*b>>*c>>*f;for(inti=1;i<N-1;+i) cin>>*(a+i-1)>>*(b+i)&

31、gt;>*(c+i)>>*(f+i);cin>>*(a+i-1)>>*(b+i)>>*(f+i);voidMatrixThr:Result()/對系數(shù)矩陣A作Crout分解for(inti=0;i<N-1;+i) /將U中的a存于指針b中,L中的B存于指針C中*(c+i)/=(*(b+i);*(b+i+1)-=(*(a+i)*(*(c+i);/ 解方程組 Ly=f ,求得的 y 值存于指針 b 中*b=(*f)/(*b);for(i=1;i<N;+i) *(b+i)=(*(f+i)-(*(a+i-1)*(*(b+i-1)/(*(

32、b+i);/解方程組Ux=y ,求得的x值存于指針a中*(a+N-1)=*(b+N-1);for(i=N-2;i>=0;-i)*(a+i)=*(b+i)-(*(c+i)*(*(a+i+1);intMatrixThr:GetN()constreturnN;doubleMatrixThr:GetX(constinti)constreturn*(a+i-1);運行結(jié)果#include<iostreaLagrange 插值法的源程序:m>#include<stdlib.h> usingnamespacestd;class Lagrangepublic:Lagrange()

33、;Lagrange();voidSetLagrange(constintn);/ 根據(jù)用戶的輸入設置 Lagrange 類中的插值 點數(shù)據(jù)boolExist(constdoublex,constinti);檢測是否輸入了與前i個插值結(jié)點橫坐標相同的點int GetN()const;/ 獲取插值結(jié)點的數(shù)目 voidCalculate(constdoublea);/計算橫坐標a對應的函數(shù)值doubleGetResult()const;/ 返回計算的函數(shù)值private:intN;/ 插值結(jié)點的數(shù)目double*x,*y,zx,zy;/x 、y分別用于存儲插值點的數(shù)據(jù),zx、zy表示所求的坐 標點;

34、intmain()intn=2;LagrangeL;doif(n<2)cout<<" 用于模擬曲線的插值點數(shù)目 N>2"<<endl; cout<<" 請輸入用于模擬曲線的插值點數(shù)目 N:"cin>>n;while(n<2);cout<<" 請輸入各插值點橫、縱坐標的數(shù)據(jù)n" L.SetLagrange(n);doublea;cout<<" 請輸入所求點的橫坐標 X:"cin>>a;L.Calculate(a);對

35、應的函數(shù)值為 :"<<L.GetResult()<<endl;cout<<" 橫坐標 "<<a<<" return0;Lagrange:Lagrange() / 初始化相關數(shù)據(jù)N=0;x=y=NULL;zx=zy=0;Lagrange:Lagrange() / 釋放分配給指針的內(nèi)存空間delete x;delete y; boolLagrange:Exist(constdoublea,constinti) / 遍歷以輸入的插值點,看是否重復插入橫坐標相同的插值點 for(intj=0;j<

36、i;+j)if(a=*(x+j)returntrue;returnfalse;voidLagrange:SetLagrange(constintn)N=n;x=newdoubleN;y=newdoubleN;/ 判斷是否成功為指針分配了內(nèi)存空間if(x=NULL|y=NULL)cout<<" 分配存儲空間失??! "<<endl; exit(EXIT_FAILURE);/ 輸入插值點for(inti=0;i<GetN();+i)cin>>*(x+i)>>*(y+i);/ 如果不是輸入第一個坐標值,則會對輸入的橫坐標進行合法

37、性檢測 while(i!=0&&Exist(*(x+i),i)=true)cout<<" 輸入了重復的橫坐標 請重新輸入第 "<<i+1<<" 個插入結(jié)點的數(shù)據(jù) n"cin>>*(x+i)>>*(y+i);voidLagrange:Calculate(constdoublea)zx=a;for(inti=0;i<GetN();+i) / 計算插值基函數(shù) doubletemp=1; for(intj=0;j<i;+j)temp*=(zx-*(x+j)/(*(x+i)-*

38、(x+j); for(+j;j<GetN();+j)temp*=(zx-*(x+j)/(*(x+i)-*(x+j); zy+=(*(y+i)*temp);intLagrange:GetN()constreturnN;/ 返回插值點的數(shù)目doubleLagrange:GetResult()constreturnzy;/ 返回求得的函數(shù)值Lagrange 插值法的運行結(jié)果#include<iostreaNewton 插值法的源程序:m>usingnamespacestd;class Matrixpublic:Matrix();Matrix();voidSetMatrix(cons

39、tintn);/ 根據(jù)用戶輸入的插值點的數(shù)據(jù)設置計算結(jié)果的 矩陣 intGetN()const;/ 返回插值點的數(shù)目 voidCalculate();/ 計算差商 doubleGetResult(doublex)const;/ 根據(jù)輸入的橫坐標求函數(shù)值, 返回運算 結(jié)果private:double*a,*f;/a和f分別用于存儲插值點的橫坐標和相應的函數(shù)值intN;/ 記錄插值點的數(shù)目;intmain()Matrixmatrix;intn;docout<<" 輸入插值點的數(shù)目 N:"cin>>n; while(n<2); cout<<

40、;" 輸入插值點的數(shù)據(jù): "<<endl; matrix.SetMatrix(n); matrix.Calculate();doublex;cout<<" 輸入所求的橫坐標: " cin>>x;cout<<" 所求的函數(shù)值為: "<<matrix.GetResult(x)<<endl; return1;Matrix:Matrix() / 初始化數(shù)據(jù)a=f=NULL;N=0;Matrix:Matrix()/釋放指針a、f指向的內(nèi)存空間delete a;delete

41、f;voidMatrix:SetMatrix(intn)N=n;/ 為插值點創(chuàng)建動態(tài)數(shù)組a=newdoubleN;f=newdoubleN;/ 輸入插值點的數(shù)據(jù)for(inti=0;i<GetN();+i) cin>>*(a+i)>>*(f+i);intMatrix:GetN()constreturnN;voidMatrix:Calculate()/ 將差商存儲在一個一維數(shù)組內(nèi)for(inti=0;i<GetN();+i)for(intj=GetN()-1;j>i;-j) *(f+j)=(*(f+j)-*(f+j-1)/(*(a+j)-*(a+j-i-

42、1); doubleMatrix:GetResult(doublex)const/ 利用差商和插值點的橫坐標及第一個插值點的縱坐標計算函數(shù)值double result=*f;指針f指向第一個插值點的縱坐標for(inti=1;i<GetN();+i)doubletemp=1;for(i ntj=O;j<i;+j)temp*=(x-*(a+j);計算(x-x0)*(x-x1)* *(x-x(i-1) result+=(*(f+i)*temp;/指針(f+i)指向第 i號差商Newton 插值法的運行結(jié)果 returnresul t;變步長梯形法求定積分的源程序:#include<

43、;iostream>#include<math.h>using namespacestd;doublefunction(constdoublex);/ 求被積函數(shù)的值并返回/accumulate() 為求定積分的函數(shù), a、 b 分別為積分的上下限 ,默認精度為 0.00001 doubleaccumulate(constdoublea,constdoubleb,constdoubleep);intmain()doublea,b,eps;/a,b 分別為定積分的上限和下限 ,h 為步長 ,eps 為要求的精度 a=0; b=1;eps=0.00001;cout<<

44、"(sinX/X) 在 0 到 1上的積分為 :"<<accumulate(a,b)<<endl;return。;doublefu ncti on(con stdoublex)if(x=0)return1;/x 為 0 時函數(shù)值為1 return(si n( x)/x);doubleaccumulate(c on stdoublea,c on stdoubleb,c on stdouble eps)intn=1;doubleh=b-a;/h 為步長doubleT仁 h*(fu nctio n(a)+fu nctio n( b)/2;doubleT2=

45、T1/2+h*fu nctio n(a+h/2)/2;/計算結(jié)果不滿足精度,則繼續(xù)while(fabs(T2-T1)>eps)n *=2; h/=2;/步長折半T仁 T2;/利用T1計算T2 doubletemp=0;for(i nt i=1;i<=n;+i)temp+=fu ncti on( a+(i-/2)*h); T2=T1/2+h*temp/2;returnT2;/返回步長h最合適時定積分的近似值1 sinx變步長梯形法求定積分的運行結(jié)果Romberg 算法求定積分的源程序:#include<iostream>#include<math.h> usi

46、ngnamespacestd;/ 求被積函數(shù)的值并返回doublefun(constdoublex);/Romberge() 為求定積分的函數(shù), a、b 分別為積分的上下限 ,默認精度為0.00001 doubleRomberg(constdoublea,constdoubleb,constdoubleep);/函數(shù)Tm()為T-數(shù)表的計算公式 doubleTm(constdoubleT1,constdoubleT2,constintm); intmain()doublea,b,eps;/a,b分別為定積分的上限和下限,h為步長,eps為要求的精度a=0; b=1;eps=0.00001;co

47、ut<<" 所求積分為 :"<<Romberg(a,b,eps)<<endl;return0;doublefun(constdoublex)if(x=0)return1;/x為 0 時函數(shù)值為 1return(sin(x)/x);/ 返回被積函數(shù)的值 doubleTm(constdouble T1,constdoubleT2,constintm)/根據(jù)T1、T2和m計算出下一個數(shù)并返回return(pow(4,m)*T1-T2)/(pow(4,m)-1);doubleRomberg(constdoublea,constdoubleb,co

48、nstdoubleeps)doubleT10;/ 用于存儲 T- 數(shù)表某一行的數(shù)據(jù)int l=1;T0=(b-a)*(fun(a)+fun(b)/2;doubleT1,T2;intflag;/flag 用于標記十分求得符合精度的值doflag=0;intn=pow(2,l-1);/n 表示區(qū)間等分數(shù) doubleh=(b-a)/n;/h 為步長 doubletemp=0;利用變個數(shù)據(jù)的差值for(int i=0;i<n;+i)temp+=fun(a+(i+/2)*h); T1=T0/2+h*temp/2;/ 步長梯形公式計算 T- 數(shù)表第( l+1 )行的第一個數(shù)據(jù)/將T-數(shù)表第1+1行

49、的前1-1個數(shù)據(jù)存入數(shù)組for(intm=1;m<l;+m)T2=Tm(T1,Tm-1,m); Tm-1=T1;T1=T2;T2=Tm(T1,Tl-1,l);計算T-數(shù)表第(1+1 )行的最后一個數(shù)據(jù)if(fabs(T2-Tl-1)>eps)比較T-數(shù)表第(1+1 )行和第i行的最后/將T-數(shù)表第1+1行的最后兩個個數(shù)據(jù)存入數(shù)組Tl-1=T1;Tl=T2;+l;flag=1;/ 表示沒有求得符合精度的值while(flag);returnT2;/ 返回符合精度的解Romberg算法求定積分運行結(jié)果第1章緒論數(shù)值計算基礎課程復習指導1、有效數(shù)字、絕對誤差、絕對誤差限、相對誤差、相對誤

50、差限的概念;2、有效數(shù)字與絕對誤差,有效數(shù)字與相對誤差的關系;3、如何判斷有效數(shù)字,如何估算絕對誤差限與相對誤差限。第2章解線性方程組的直接法1、直接法解線性方程組的思想,如何使用高斯消去法、列選主元消去法、全選主元消 去法;2、 直接三角分解法解線性方程組的思想,矩陣的LU分解的條件,如何對矩陣進行LU 分解。如何使用直接三角分解法、平方根法和追趕法法解線性方程組。第3章代數(shù)插值法與最小二乘法1、插值的基本概念,插值問題的存在且唯一性;2、如何使用待定系數(shù)法、拉格郎日插值法、牛頓插值法構(gòu)造插值多項式及確定余項;3、Ij(x),(X)的性質(zhì)及應用;4、差商的定義、性質(zhì)及應用;5、如何使用分段線

51、性插值及確定余項;5、如何使用待定系數(shù)法構(gòu)造埃爾米特插值多項式及確定余項;6、如何使用曲線擬合的最小二乘法進行線性擬合。(A)2 X10 -3(B)1X 1022、若Ak為矩陣A的k階主子矩陣,則矩陣A滿足()時,則存在唯一單位下三角陣第4章數(shù)值積分與數(shù)值微分1、機械求積與代數(shù)精度的概念,如何判定一個求積公式的代數(shù)精度;2、如何通過代數(shù)精度法與插值法構(gòu)造求積公式;3、牛頓-柯特斯公式的定義及構(gòu)造的方法,牛頓 -柯特斯系數(shù)的性質(zhì);如何使用梯形公 式、辛卜生公式、柯特斯公式計算定積分及確定余項;4、復化求積法;如何使用復化梯形公式、復化辛卜生公式、復化柯特斯公式計算定積 分及余項;5、變步長求積法的思想,如何使用變步長梯形求積法和龍貝格求積法計算定積分;6、高斯求積公式的定義及構(gòu)造方法;7、數(shù)值微分的數(shù)值方法,如何使用二點公式、三點公式計算微分。第5章常微分方程數(shù)值解1、常微分方程數(shù)值解法的基本思想,歐拉方法、后退歐拉方法、梯形方

溫馨提示

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

評論

0/150

提交評論