




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上數值分析實 驗 報 告 一 姓名: 周 舉 學號: PB 實驗一一、實驗名稱方程求根 二、實驗目的與要求:通過對二分法和牛頓法作編程練習和上機運算,進一步體會它們在方程求根中的不同特點;比較二者的計算速度和計算精度。三、實驗內容:通過對二分法和牛頓迭代法作編程練習和上機運算,進一步體會它們在方程求根中的不同特點 。(一)二分法 算法:給定區間a,b,并設f(a)與f(b)符號相反,取為根的容許誤差,為值的容許誤差。(1)令c=(a+b)/2(2)如果(c-a)< 或<,則輸出c,結束;否則執行(3)(3)如果f(a)f(c)<0,則令;否則,則令,重
2、復(1),(2),(3)。 (二)牛頓迭代法:給定初值,為根的容許誤差,為的容許誤差,N為迭代次數的容許值。(1)如果<或迭代次數大于N,則算法結束;否則執行(2)。(2)計算(3)若 < 或 < ,則輸出 ,程序結束;否則執行(4)。(4)令 = ,轉向(1)。四、實驗題目與程序設計1、二分法3.1.1、用二分法求方程a. f(x)= 在區間0,/2上的根,c. f(x)= 在區間1,3上的根。源程序:3.1.1.a#include<stdio.h>#include<math.h>void main()float a,b;double c,y,z;p
3、rintf("plese input two number a and b:n");scanf("%f%f",&a,&b);c=(a+b)/2;y=1/c-tan(c);printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%fn",a,b,b-a,c,y);while(fabs(b-a)>0.00001| fabs(y)>0.00001) z=1/a-tan(a);if(z*y<0)b=c;else a=c; c=(a+b)/2; y=1/c-tan(c); printf("
4、;a=%f,b=%f,b-a=%f,c=%f,f(c)=%fn",a,b,b-a,c,y);輸入0 1. (/21.)得到下表:由上表可以看出剛開始時f(c)取值幅度很大,但是經過一段歷程之后,幅度變得平緩甚至基本接近與零,我們認為,x=0.8603是方程的根,結果與實際想要得到的值相當接近。3.1.1 c#include<stdio.h>#include<math.h>void main()float a,b;double c,y,z;printf("plese input two number a and b:n");scanf(&qu
5、ot;%f%f",&a,&b);c=(a+b)/2;y=pow(2,-c)+exp(c)+2*cos(c)-6;printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%fn",a,b,b-a,c,y);while(fabs(b-a)>0.00001 | fabs(y)>0.00001) z=pow(2,-a)+exp(a)+2*cos(a)-6;if(z*y<0)b=c;else a=c; c=(a+b)/2;y=pow(2,-c)+exp(c)+2*cos(c)-6; printf("a=%f,b=%f
6、,b-a=%f,c=%f,f(c)=%fn",a,b,b-a,c,y);輸入1 3 ,得到如下表:我們認為,x=1.8294是方程的根。3.1.4、用二分法求方程在5.5,6.5上的根,將-36改為-36.001,并重復試驗。源程序如下:#include<math.h>#include<stdio.h>void main()float a,b,c,y,z,w;int n=0;printf("plese input two number a and b:n");scanf("%f%f",&a,&b);c=(
7、a+b)/2;y=pow(c,8)-36*pow(c,7)+546*pow(c,6)-4536*pow(c,5)+22449*pow(c,4)-67284*pow(c,3)+*c*c-*c+40320; printf(" a b b-a c f(a) f(c) f(b)n");printf("%f,%f,%f,%f,%f,%f,%fn",a,b,b-a,c,z,y,w);while(y>0.00001 | c-a>0.00001 ) z=pow(a,8)-36*pow(a,7)+546*pow(a,6)-4536*pow(a,5)+22449
8、*pow(a,4)-67284*pow(a,3)+*a*a-*a+40320; w=pow(b,8)-36*pow(b,7)+546*pow(b,6)-4536*pow(b,5)+22449*pow(b,4)-67284*pow(b,3)+*b*b-*b+40320;if(z*y<0)b=c;else a=c; c=(a+b)/2;y=pow(c,8)-36.001*pow(c,7)+546*pow(c,6)-4536*pow(c,5)+22449*pow(c,4)-67284*pow(c,3)+*c*c-*c+40320; printf("%f,%f,%f,%f,%f,%f,
9、%fn",a,b,b-a,c,z,y,w); n+;輸入5.5 6.5 得到下表:我們認為x=6.0000是方程的根。如果把第二項系數換成36.001,重復以上實驗,則得到下表:由于f(a)和f(b)總是同為負數,我們在(5.5,6.5)之間沒有找到需要的根,這就說明,當方程中某一個系數相差很小時,方程的根取值可能相差很大。2、牛頓迭代法3.2.5、用牛頓法求方程接近0.1的兩根。源程序如下:#include<stdio.h>#include<math.h>void main()int n=0,M; float x,y,s,t,u,v;printf("
10、;plese input x M t and s :n");scanf("%f%d%f%f",&x,&M,&t,&s);u=2*x*x*x*x+24*x*x*x+61*x*x-16*x+1;v=8*x*x*x+72*x*x+122*x-16;y=x-u/v;printf("N=%d,x=%f,y=%f,|y-x|=%f,f(x)=%fn",n,x,y,fabs(y-x),u);n+;while(n<=M && fabs(y-x)>t && fabs(u)>s )
11、x=y;u=2*x*x*x*x+24*x*x*x+61*x*x-16*x+1; v=8*x*x*x+72*x*x+122*x-16; y=x-u/v; printf("N=%d,x=%f,y=%f,|y-x|=%f,f(x)=%fn",n,x,y,fabs(y-x),u); n+;為了能夠找到x=0.1附近的兩個根,我們不妨取=0.0,=0.1和=0.2兩個值嘗試一下,分別得到如下的結果:(1)當=0.0時,我們認為x=0.1213是方程的根。(2)當=0.1時,我們認為x=0.1213是方程的根。(3)當=0.2時,我們認為x=0.1231是方程的根。故方程在x=0.1附
12、近的兩根為x=0.1213和x=0.1231。將這一過程表示在坐標圖中:由于方程的兩個根和x=0.1比較接近,可以看出,當初值取為0.1時,f(c)的函數最為平緩,這表示此時f(x)最先到達零點;其次,0.2比0.0更加接近于根x=0.1213和x=0.1231,所以初值為0.2的曲線比初值為0.0的曲線更加平緩。這就說明了,用牛頓法解方程式,應該盡量使初值接近零點,這樣能夠更節省時間,得到的根更準確。3.2.14、用牛頓法求解下面兩個非線性方程的根 a. , b. 3.2.14、a取,則 ,根據牛頓法的思想,其源程序如下:#include<stdio.h>#include<
13、math.h>void main()float x,y,u,v,s,t;int n=0,M;printf("plese input two number x、y ,and M:n");scanf("%f%f%d",&x,&y,&M); printf("%f,%f,%dn",x,y,M);s=4*y*y+4*y+52*x-19;t=169*x*x+3*y*y+111*x-10*y-10;printf("N=%d,x=%f,y=%f,f1=%f,f2=%fn",n,x,y,s,t);n+;
14、while(n<=M) u=-(6*y-10)*(4*y*y+4*y+52*x-19)-(8*y+4)*(169*x*x+3*y*y+111*x-10*y-10)/(52*(6*y-10)-(8*y+4)*(338*x+111); v=-(-(338*x+111)*(4*y*y+4*y+52*x-19)+52*(169*x*x+3*y*y+111*x-10*y-10)/(52*(6*y-10)-(8*y+4)*(338*x+111); x=x+u;y=y+v; s=4*y*y+4*y+52*x-19; t=169*x*x+3*y*y+111*x-10*y-10; printf("
15、;N=%d,x=%f,y=%f,f1=%f,f2=%fn",n,x,y,s,t); n+;輸入初值0 0 10,這里10是指計算次數,得到下表 從表中可以知道,方程的根是x=0.1342,y=1.3043,同時,從上表可以發現,在N>4之后,f1(X)和f2(X)基本上等于零,這個接近程度相當低,而且,方程很快能夠得到需要的根,這說明牛頓法的效率是相當高的。(b)和(a)的做法思想是一樣的,其源程序如下:#include<stdio.h>#include<math.h>void main()float x,y,u,v,s,t,r;int n=0,M;pr
16、intf("plese input two number x、y ,and M:n");scanf("%f%f%d",&x,&y,&M); printf("%f,%f,%dn",x,y,M);s=x+exp(-x)+y*y*y;t=x*x+2*x*y-y*y+tan(x);printf("N=%d,x=%f,y=%f,f1=%f,f2=%fn",n,x,y,s,t);n+;while(n<=M) r=(1-exp(-x)*(2*x-2*y)-3*y*y*(2*x+2*y+1/(1+x*
17、x); u=-(2*x-2*y)*s-3*y*y*t)/r; v=-(-2*x-2*y-1/(1+x*x)*s-(1-exp(-x)*t)/r; x=x+u;y=y+v; s=x+exp(-x)+y*y*y;t=x*x+2*x*y-y*y+tan(x); printf("N=%d,x=%f,y=%f,f1=%f,f2=%fn",n,x,y,s,t); n+;當輸入0 0 20時,我驚奇地發現不能得到想要的結果,而是出現了很多不知何物的字母,于是我猜測在運算過程當中可能出現了分母零,于是我加入了一個r表示上面程序中u和v共同的分母,即r=(1-exp(-x)*(2*x-2*y)-3*y*y*(2*x+2*y+1/(1+x*x),驗算初值為0和0時的情況,結果果然出現了r=0,于是我將初始值改為1和1,運算20次,得到下表:從中可以看出,方程的根為x= - 0.7112 ,y= - 1.0984 ,另外,從中可以看出,此次需要進行更多運算,才能是方程值趨于零,與前一個方程組(a)相比,它的求解過程步驟要多一些。五、小結: 二分法和牛頓法都是解方程的兩個比較好的方法,二分
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 甘肅省隴南市文縣三校聯考2024~2025學年 高三下冊三月聯考數學試卷附解析
- 新外研版英語7年級上冊全冊教學課件
- 黑色金屬冶煉市場趨勢分析-洞察闡釋
- 2024年昭通市消防救援支隊招錄政府專職消防員真題
- 2024年和田地區大學生鄉村醫生專項計劃招聘真題
- 成都天府新區顧連禾泰康復醫院招聘筆試真題2024
- 2024年廣西英華國際職業學院輔導員考試真題
- 歷史地理角色設計師基礎知識點歸納
- 2025年二級建造師理論試題
- 參數化貝葉斯推斷在生物學和醫學中的應用-洞察闡釋
- 2025年通信工程與技術考試試卷及答案
- 2024-2025學年下學期初中道德與法治七年級期末復習試卷(含答案)
- 2025年中國1,2-環氧丁烷行業市場規模調研及投資前景研究分析報告
- 2025年江蘇南通市通州區八年級生物二模試卷
- 【變電站高壓斷路器和隔離開關的選擇計算過程案例】2100字
- 2025年行政職業能力測驗試卷及答案
- 道觀廟宇托管協議書
- 2025年中國天然云母市場調查研究報告
- 2024北京朝陽區六年級畢業考英語試題及答案
- 關愛眼健康遠離近視眼科普呵護眼睛讓視界更精彩課件
- 【課件】跨學科實踐:探索廚房中的物態變化問題(教學課件)初中物理人教版(2024)八年級上冊
評論
0/150
提交評論