數(shù)值分析實(shí)驗(yàn)報(bào)告_第1頁
數(shù)值分析實(shí)驗(yàn)報(bào)告_第2頁
數(shù)值分析實(shí)驗(yàn)報(bào)告_第3頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、數(shù)值分析實(shí)驗(yàn)報(bào)告數(shù)值分析實(shí)驗(yàn)報(bào)告計(jì)1310陳萬全學(xué)號(hào):132852實(shí)驗(yàn)實(shí)驗(yàn)內(nèi)谷:10000 2n 1.644834用兩種不同的順序計(jì)算n 1,分析其誤差的變化二. 實(shí)驗(yàn)?zāi)康模?. 通過上機(jī)編程,復(fù)習(xí)鞏固以前所學(xué)程序設(shè)計(jì)語言;2. 通過上機(jī)計(jì)算,了解舍入誤差所引起的數(shù)值不穩(wěn)定性。3. 通過上機(jī)計(jì)算,了解運(yùn)算次序?qū)τ?jì)算結(jié)果的影響,從而盡量避免大數(shù)吃小數(shù) 的現(xiàn)象。三. 算法描述取float類型數(shù)據(jù)從大到和從小到大的累加。然后輸入結(jié)果 四.源程序:/*實(shí)驗(yàn)一 *#in elude <iostream> using n amespace std;float shu nxi()float su

2、m=0;for(int i=1;i<10001;i+)sum=sum+1.0 /flo at(i*i);return sum;float daoxu()float sum=0;for(int i=10000;i>0;i-)sum=sum+1.0/float(i*i);return sum;int mai n()cout.precisi on (10);cout<<"第一個(gè)順序方法的值: "<<sh un xi()<<e ndl;cout<<"第二個(gè)倒序方法的值:"<<daoxu()&

3、lt;<e ndl;return 0;五、程序結(jié)果'C:UersAdnniri rtrtoPDe &lctop>Deb ugcv/q 實(shí)蜀一唐 w'第一T順應(yīng)方法的值=1丄44刃鬥23 第二個(gè)倒序方注的值;1,644834942Press anj/ key to continueH六實(shí)驗(yàn)體會(huì)這個(gè)程序還是比較簡單的,僅僅需要一個(gè)循環(huán)就可以完成,只要 細(xì)心就不會(huì)有錯(cuò)。從這個(gè)實(shí)驗(yàn)里我也看到了計(jì)算機(jī)畢竟不是萬能的, 由于機(jī)器字長的問題對(duì)于一些特殊的計(jì)算會(huì)出錯(cuò)一一即大數(shù)吃小數(shù) 這樣的計(jì)算,這樣會(huì)讓人們?cè)谌粘5纳a(chǎn)生活中產(chǎn)生一些意想不到的 問題。不過只要稍微對(duì)計(jì)算方法做

4、一下改動(dòng)就可以改正這種錯(cuò)誤一一 改變算術(shù)的順序。至于從哪個(gè)方向計(jì)算更好,那就要具體問題具體分 析了.對(duì)于程序上的解決了, cout輸出的小數(shù)保留的位數(shù)。實(shí)驗(yàn)二一實(shí)驗(yàn)內(nèi)容:1、拉格朗日插值按下列數(shù)據(jù)Xi-3.0-1.01.02.03.0yi1.01.52.02.01.0作二次插值,并求X!=-2, X2=0 , X3=2.75時(shí)的函數(shù)近似值2牛頓插值按下列數(shù)據(jù)Xi0.300.420.500.580.660.72yi1.044031.084621.118031.156031.198171.23223作五次插值,并求x1 =0.46, x2 =0.55, x3=0.60時(shí)的函數(shù)近似值二. 實(shí)驗(yàn)?zāi)康模?/p>

5、1. 掌握牛頓插值法。2. 掌握拉格朗日插值法。三. 算法描述開始時(shí)判斷輸入的點(diǎn)是否在區(qū)間內(nèi),不在則退出 在則繼續(xù)根據(jù)值選擇節(jié)點(diǎn)帶入公式計(jì)算 四源程序:朗格朗日二次插值#i nclude <iostream>using n amespace std;double in ser(double x)double sum1,sum2,sum3,sum;double xi5=-3.0,-1.0,1.0,2.0,3.0;double yi5=1.0,1.5,2.0,2.0,1.0;int i;int a,b,c;for (i=0;i<5;i+)if (x>xii&&

6、;x<xii+1|x<xi0|x>xi4)a=i;b=(i+1)%5;c=(i+2)%5; break;sum仁 yia*(x-xib)*(x-xic)/(xia-xib)*(xia-xic); sum2=yib*(x-xia)*(x-xic)/(xib-xia)*(xib-xic); sum3=yic*(x-xib)*(x-xia)/(xic-xib)*(xic-xia); sum=sum1+sum2+sum3;return sum;int main()cout«"朗格朗日二次插值-2.0 的值:"<<inser(-2.0)

7、1;endl; cout«"朗格朗日二次插值 0.0 的值:"<<inser(0.0)«endl; cout«"朗格朗日二次插值 2.75 的值:"<<inser(2.75)«endl;return 0;牛頓插值#i nclude <iostream>using n amespace std;#defi ne N 6double fiN;int chazhi();double ni udu n( double x)double xiN=0.3,0.42,0.5,0.58,0.66

8、,0.72;double yiN=1.04403,1.08462,1.11803,1.5603,1.19817,1.23223;double sum=0,sumxN;chazhi();sumx0=1;for (i nt j=1;j<N;j+) sumxj=(x-xij-1)*sumxj-1;for (int i=0;i<N;i+)sum=fii*sumxi+sum;return sum;int chazhi()double xiN=0.3,0.42,0.5,0.58,0.66,0.72;double yiN=1.04403,1.08462,1.11803,1.5603,1.1981

9、7,1.23223; int i,j;:fi0=yi0;int flag=1;for(j=N-1;j>0;j-)for (i=0;i<j;i+)yii=double(yii+1-yii)/double(xiflag+i-xii);:fiflag=yiO; flag+;return 0; int main()cout«"牛頓插值插入 0.46,可得值:"<<niudun(0.46)«endl; cout«"牛頓插值插入 0.55,可得值:"<<niudun(0.55)«endl;

10、cout«"牛頓插值插入 0.60,可得值:"<<niudun(0.60)«endl; return 0;五、程序結(jié)果拉格朗日插值TC:U&e rsAd rninist r-ator De 5 ktopDebu g cwq 實(shí)強(qiáng)一,exe'nHd-RHMHHJ-MI自別Hd-mAn- frL-liVTK.V- 日v_ 日an直取E的值: 烈別的值;to cent; inue1.251.833331.287S牛頓插值T-“ C:User5Ad mi n i strator X sktopDeb ugXcwq 實(shí)卷一.e)re&#

11、39;00ISV 入入入ke- J - Jarts可可可onc 瓦5,0fa 4 t0,96&654447311-55777五實(shí)驗(yàn)體會(huì)這個(gè)實(shí)驗(yàn)的目的主要是掌握如何在計(jì)算機(jī)上運(yùn)用拉格朗日插值法和 牛頓插值法來解決問題。對(duì)于拉格朗日插值,已經(jīng)給出了五個(gè)節(jié)點(diǎn) 的函數(shù)值,可以在一定的范圍內(nèi)使用拉格朗日插值法,所以對(duì)于-5到1上的X我利用前三個(gè)節(jié)點(diǎn),而對(duì)于1到5上X我利用后三個(gè)節(jié) 點(diǎn),這樣算出來值的誤差會(huì)比較小。在牛頓插值上,題中已經(jīng)給出 了六個(gè)節(jié)點(diǎn)的函數(shù)值,利用這六個(gè)節(jié)點(diǎn)可以算出五階差商,然后很 容易就能夠得出結(jié)果。其中四階差商為負(fù)數(shù),但是差別不大,五階 差商又變回了正數(shù),所以可以用到五階差商

12、,這樣結(jié)果也會(huì)更準(zhǔn) 確。實(shí)驗(yàn)三一. 實(shí)驗(yàn)內(nèi)容分別用復(fù)化梯形公式和復(fù)化辛卜生公式計(jì)算f(x)=s in( x)/x的積分,并與準(zhǔn)確值比較判斷精度。二. 實(shí)驗(yàn)?zāi)康?掌握復(fù)化梯形公式。2掌握復(fù)化辛卜生公式。三. 算法描述1. 復(fù)化梯形公式代數(shù)形式求解定積分,為每個(gè)區(qū)間內(nèi)的梯形公式的累加,所以除 端點(diǎn)外的點(diǎn)都累加兩次2. 復(fù)化新普生公式與梯形公式形式上差別不大,但是由于使用的是三個(gè)點(diǎn)一個(gè) 區(qū)間所以只可以求解Sn4所以流程類似。四. 源程序復(fù)化梯形公式*/* #i nclude <iostream> using n amespace std;#in elude <math.h>#

13、defi ne A 0#defi ne B 1#defi ne N 8double Yi(double xk)double s;if(xk=0)return 0.0;elses=double(si n(xk)/double(xk);return s;double fx()double sumx=0;double ki;for (int k=0;k<N;k+)ki=(double(B-A)/double(N)*k+A; sumx+=Yi(ki);return sumx;int mai n ()if (A>B)cout«"輸入的A小于B,錯(cuò)誤"<&l

14、t;endl;return 1;double sumx=fx(),sumy,sum;sumy=sumx-Yi(A)+Yi(B);sum=(double(B-A)/double(N)*(sumx+sumy)*0.5;cout<<"sinx/x 在"<<A<<"至到"<<B<<"區(qū)間的"<<N<<"段分值 為:"vvsumvve ndl;return 0;/ */*#i nclude <iostream>using n am

15、espace std;#in elude <math.h>#defi ne A 0#defi ne B 1#defi ne N 100double Yi(double xk)double s;if(xk=0)return 0.0;elses=double(si n(xk)/double(xk); return s;double fx()double sumx=0;double ki;for (int k=0;k<N;k+) ki=(double(B-A)/double(N)*k+A+(double(B-A)/double(2*N); sumx+=Yi(ki);return s

16、umx;double fy()double sumy=0;double ki;for (int k=0;k<N;k+) ki=(double(B-A)/double(N)*k+A; sumy+=Yi(ki);return sumy;int mai n ()if (A>B)coutvv"輸入的A小于B,錯(cuò)誤"<<endl; return 1;double sumx=fx(),sumy=fy(),sum;double h=abs(A-B); sum=(Yi(A)+4*sumx+2*sumy+Yi(B)*h/double(6*N);cout<<

17、"sinx/x 在"<<A<<"到"<<B<<"區(qū)間的"<<N<<"段分值 為:"vvsumvve ndl;return 0;*/ 匚 AUsersX Ad it i n i strator l?e&lctopDeb ugXo'jq.exe1gin")(在曬1區(qū)間的&段芳值為込目陽191Piess jny k&p to eontinug復(fù)化辛卜生公式'C:User3Adnnini5t rator

18、De 5 ttopDebu gcv/q 實(shí)粒一.exe'£*心3在©至牡區(qū)間的1盹段分值為 沖畀也41&Pi'ess 訣ny k總屮 to continue-六實(shí)驗(yàn)體會(huì) 要求函數(shù)sin(x)/x的積分,程序是通過兩種不同的復(fù)化求積,通過計(jì)算機(jī) 計(jì)算,檢驗(yàn),更加理解了復(fù)化梯形公式和復(fù)化辛卜生公式。如果要想求 其它區(qū)間的積分可以直接輸入。復(fù)化梯形和復(fù)化辛卜生公式都是將區(qū)間分解成為若干等份,然后依次求積,編程應(yīng)注意算法的嚴(yán)密性。實(shí)驗(yàn)四一. 實(shí)驗(yàn)內(nèi)容用改進(jìn)歐拉方法解初值問題y' =x+y; y(0)=1。0<x<1,取步長h=0.1計(jì)算,

19、并與 準(zhǔn)確值y=-x-1-2ex 相比較。(p141習(xí)題第二題2)二. 實(shí)驗(yàn)?zāi)康? 了解掌握歐拉方法。三. 算法描述按照歐拉格式進(jìn)行帶入迭代計(jì)算流程圖如下四. 源程序用改進(jìn)歐拉方法解初值問題y'=x+y; y(0)=1。0<x<1,取步長h=0.1計(jì)算,/并與準(zhǔn)確值y=-x-1-2ex相比較。(p141習(xí)題第二題2)#i nclude <iostream>#i nclude <ioma nip>#in clude <math.h>using n amespace std;#defi ne A 0#defi ne B 1double h;d

20、ouble implicit (int i,double yi)double yp;yp=yi+h*(double (i*h+A)+yi);return yp; double expli (int i,double yi,double yp) double yc;yc=yi+h*(double(i+1)*h+A)+yp); return yc;int mai n ()int n;cout«"請(qǐng)輸入步長 h。如:0.1"«endl;cin> >h;n=i nt(double(B-A)/double(h);double *y=new double

21、 n+1,*yl=new double n+1;cout«"請(qǐng)輸入 y(0)為:"<<endl;cin> >y0;yl0=y0;double ypp,ycc;int i;for (i=0;i< n;i+)ypp=implicit(i,yli);ycc=expli(i,yli,ypp); yli+1=(ypp+ycc)/double(2);計(jì)算改進(jìn)歐拉值for (i=0;i<=n ;i+)yi=-(i*h+A)+1-2*exp(i*h+A);/ 計(jì)算真實(shí)值cout<<yl n-1<<""

22、<<yl n<<e ndl;cout«"改進(jìn)歐拉公式準(zhǔn)確值誤差"<<endl;for (i=0;i<=n ;i+)cout.precisi on( 7); cout<<yli<<""<<yi<<""<<yli-yi<<e ndl;delete y;delete yl;return 0;yg = -3 .31034 yS = -3.64281= -3-99972= -4-38365= -4.79744U<x)

23、 = -5.2424 <x> -5.727S yg = -6.2510fi y<x> = -6.S192 y<x) = -7.43656y = -3,31y = '3.64205 SJ = -3 .99847 y 三-4.3819y = -4.794S? y =-石.24086 號(hào)-5.72315 jj = -6.24558 y = 一6812« y = -7H2816 key to continue六.實(shí)驗(yàn)體會(huì)課本上給出了明確的過程了,所以我就按照那個(gè)寫了這個(gè)程序。我 認(rèn)為實(shí)驗(yàn)?zāi)康闹饕€是通過編程更好地理解改進(jìn)歐拉的方法,課本 上給出了它的兩種

24、形式,第一種是用于做題的,而第二個(gè)就是這個(gè) 程序上的。熟悉了這兩種方法就能夠很好地掌握改進(jìn)歐拉方法了。實(shí)驗(yàn)五一 實(shí)驗(yàn)內(nèi)容分別用下列方法求f(x)=x3-3x-1=0 在x0=2附近的根。根的準(zhǔn)確值為 x*=1.87938524,要求準(zhǔn)確到四位有效數(shù)字,并對(duì)比各種算法的計(jì)算量。 二分法;(2)簡單迭代法;(3)牛頓迭代法 二實(shí)驗(yàn)?zāi)康? 了解二分法 2熟悉簡單迭代法 3掌握牛頓迭代法 三算法描述這三個(gè)都是迭代算法,以上一部的值帶入下一步求出近似解。 四源程序#i nclude <iostream>#in clude <math.h>using n amespace std;

25、 #defi ne A 1#defi ne B 3double ErFe nF a() double b=B,a=A,ab=(b+a)/double(2);double yb=b*b*b-double(3)*b-double(1), ya=a*a*a-double(3)*a-double(1), yab;if(yb*ya>=0)cout«"輸入A B 區(qū)間有錯(cuò)"<<endl;while (b-a)>0.0005)ab=double(b+a)/double (2); yab=ab*ab*ab-double(3)*ab-double(1);if

26、(yab>0) b=ab;if (yab<0) a=ab;if (yab=0) break;cout.precisi on( 7);coutvv"由二分法計(jì)算可得 x="vvabvv"為:"vvab-1.87938524<ve ndl;return ab;double DieDaiFa()double xk,x=3;xk=2;int N;while (fabs(xk-x)>0.0005|N>20)x=xk; xk=pow(double(3)*x+double(1),1.0/3);cout.precisi on( 7);cou

27、tvv"由簡單迭代法計(jì)算可得x="<<xk<<" 為:"<<xk-1.87938524vve ndl;其誤差其誤差return xk;double NewDu nfa()double xk=2,x=3;int N;while (fabs(xk-x)>0.0005|N>20)x=xk;xk=x-(x*x*x-double(3)*x-double(1)/(double(3)*x*x-double(3); cout.precisi on( 7);coutvv"由牛頓法計(jì)算可得x="<&l

28、t;xk<<" 其誤差為:"vvxk-1.87938524vve ndl;return xk;int main()double x1,x2,x3;x1= ErFe nF a();x2=DieDaiFa();x3=NewDu nfa();return 0;五實(shí)驗(yàn)結(jié)果匚:MJ5rsAdnnini ytrtorDc sktopADeb ugcv/q 實(shí)驗(yàn)exer由二分法計(jì)算可得"1用巧3眄其誤差為二字-裁遼5巳-00丘由牛頓法計(jì)算可得x=l.879386其i昊差為=4-836&?le- 083Press any Jkey to con t £

29、;nu.eH六.實(shí)驗(yàn)體會(huì)二分法實(shí)現(xiàn)比較簡單,很容易寫出算法來,簡單迭代法按公式進(jìn)行迭代,但好 幾次沒弄清楚變量,由實(shí)驗(yàn)結(jié)果也可看出牛頓法的迭代次數(shù)少、精確度高。實(shí)驗(yàn)六一實(shí)驗(yàn)內(nèi)容:分別用高斯列主元消去法和直接三角分解法( LU分解)求方程 組的解系數(shù)矩陣:10 7 8 7常向量:107 5 6 588 6 10 967 5 9 107精確解為:(-60, 102, -27, 16)二實(shí)驗(yàn)?zāi)康模?. 了解高斯列主元消去法的算法步驟。2. 掌握直接三角分解法。 三算法描述列主元消去每次選擇一個(gè)最大列元素然后交換到第一行進(jìn)行消元計(jì)算然后 隊(duì)進(jìn)行消元后的結(jié)果回帶得到方程的解。四源程序:/高斯法#defi

30、ne t(i,j) (i)-1)*n+(j)-1#in clude <stdio.h>#in clude <stdlib.h>int main (void)int n,i,j,k; /n方程個(gè)數(shù)i, j, k控制循環(huán)變量double *matrix;/方程系數(shù)矩陣double *c;方程常向量double *sol;方程解向量double t臨時(shí)變量/輸入nprintf("請(qǐng)輸入方程個(gè)數(shù):n");sea nf("%d",&n);/申請(qǐng)內(nèi)存matrix = (double*)malloc(sizeof(double) * n

31、 * n);c = (double*)malloc(sizeof(double) * n);sol = (double*)malloc(sizeof(double) * n);輸入數(shù)據(jù)for(i = 1; i <= n; i+)printf("請(qǐng)輸入第%d行系數(shù):n",i);for(j = 1; j <=n; j+)sca nf("%lf",&matrixt(i,j);printf("請(qǐng)輸入常向量:n",i);for(i = 1; i <= n; i+)sea nf("%lf", &

32、;ct(1,i);求梯形矩陣for(k = 1; k <= n; k+)akk項(xiàng)等于1t = matrixt(k,k);for(j = k; j <= n; j+)matrixt(k,j) = matrixt(k,j) / t;ct(1,k) = ct(1,k) / t;aik項(xiàng)等于0for(i = 1 + k; i <= n; i+)t = -matrixt(i,k);for(j = k; j <=n; j+)matrixt(i,j) = matrixt(i,j) + t * matrixt(k,j);ct(1,i) = ct(1,i) + t * ct(1,k);/回帶求解 x1,x2.xnfor(i = n ; i >=1 ; i-)solt(1,i) = ct(1,i);for(j = i + 1; j <=n; j+)solt(1,i) = solt(1,i)- matrixt(i,j)*solt(1,j);/打印梯形矩陣printf("梯形矩陣為n");for(i = 1; i <= n; i+)for(j = 1; j <=n; j+)printf(&quo

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論