二分法牛頓迭代法普通迭代法_第1頁
二分法牛頓迭代法普通迭代法_第2頁
二分法牛頓迭代法普通迭代法_第3頁
二分法牛頓迭代法普通迭代法_第4頁
二分法牛頓迭代法普通迭代法_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、The School of Compuier and Comunicalion Enyiwlng數(shù)值球根試驗報告數(shù)值計算方法專業(yè)班級軟件08-1姓名 熊文成學號 08083117時間 2010年10月24日星期天實驗目的熟悉二分法以及牛頓迭代法求方程近似根的數(shù)值方法, 掌握各種迭代 方法,自己擴張研究迭代法的效率與收斂性和初始值的關(guān)系。實驗內(nèi)容1.已知f(X)=x' +4X2 -10 =0在1,2】上有一個實根xf(1) =_5, f(2)=14,用二分法和牛頓迭代法求該實根,要求精度滿足條件:丄燈0。222.條件允許的話,擴展研究各種迭代法的效率,以及迭代的效率和 收斂性與初始值的關(guān)

2、系,并通過比較采用兩點加速的方法與普通的方法的 效率體驗加速迭代的優(yōu)點。牛頓迭代法,以及對函數(shù)總而言之,本實驗中的用到的求根方法有二分法,1 丄迭代函數(shù)為護(X)(10-x3)2的迭代方法,21半(XW(10-X3)2采用兩點加速迭代的方法。主函數(shù)流程程序是按順序運行的,流程圖如下圖所示:四、 源程序#include <stdio.h>#include <conio.h>#include <math.h>/根據(jù)x的值計算函數(shù)值/函數(shù) f(x)=x*x*x+4*x*x-10double func(double x)double value; value=x*x

3、*x+4*x*x-10; return value;/根據(jù)參數(shù)x的值計算函數(shù)f(x)的導數(shù)值 double divFunc(double x)return 3*x*x+8*x;/二分法計算方程f(x)=0在1,2上的跟/ 二份迭代結(jié)束條件由參數(shù) precision 精度給出 void biSectionMethod(double precision) int k=0;double x1=1.0,x2=2.0;double midx;printf("nt k 有根區(qū)間 doprintf("nt%3d",k); printf("%.3f,%.3f"

4、,x1,x2);midx=(x1+x2)/2;printf("%f",midx);printf("%.6f",func(midx);if (func(midx)<0) x1=midx; else x2=midx; k+; if (k%3=0) getch(); while (x2-x1>=precision);/ 均分次數(shù)/ 區(qū)間1 .0, 2.0/ 二分之后的值k+1f(x(k+1) ");/ 每次輸出 4 個等用戶審查/ 區(qū)間的長度超過 5e-3 就一直迭代printf("nt二分法分區(qū)間的次數(shù):d所求的根是:lf&q

5、uot;,k-1,x2);/ 牛頓迭代法/根據(jù)初值值xO,在區(qū)間1.020上迭代求根 /迭代次數(shù)由參數(shù) precision 精度決定 void NewTonMethod(double x0,double precision) / 迭代次數(shù)f(x(k) |x(k+1)-x(k)|");int k=0; double x1,x2=x0; printf("nt kx(k)do printf("nt%2d",k); printf("%.6f",x2);printf("%.6f",func(x2);x1=x2;x2=x2-f

6、unc(x1)/divFunc(x1);%.6f",x2-x1); / 輸出兩次迭代的差值 %.6f",x1-x2);if (x2-x1>0) printf(" else printf(" k+;/ 每次輸出 4 個等用戶審查if (k%3=0) getch(); while (x2-x1>precision|x1-x2>precision); printf("nt牛頓迭代初值:lf次數(shù):d所求的根是:lf",x0,k-1,x2);/ 迭代函數(shù) g(x)=(sqrt(10-x*x*x)/2; double fun c

7、Two(double x)return (sqrt(10-x*x*x)/2;/ 普通迭代函數(shù)void ordinaMethod(double x0,double precision)/ 迭代次數(shù)int k=0;double x1,x2=x0;f(x(k) |x(k+1)-x(k)|");printf("nt k x(k)do printf("nt%2d",k); printf(" %.6f",x2); printf(" %.6f",func(x2);%.6f",x2-x1); / 輸出兩次迭代的差值%.6

8、f",x1-x2);/ 每次輸出 4 個等用戶審查x1=x2; x2=funcTwo(x1); if (x2-x1>0) printf(" else printf(" k+; if (k%3=0) getch(); while (x2-x1>precision|x1-x2>precision);printf("nt普通迭代初值:lf次數(shù):d所求的根是:lf",x0,k-1,x2);/ 使用兩個跌代值的組合加速跌代/ 對迭代函數(shù) f(x)=(sqrt(10-x*x*x)/2 的加速 void twoValue(double x0

9、,double precision)/ 迭代次數(shù)int k=0;double x1,x2=x0;f(x(k)|x(k+1)-x(k)|");printf("nt kx(k)doprintf("nt%2d",k);printf("%.6f",x2);printf("%.6f",func(x2);x1=x2;x2=(funcTwo(x1)+x1)/2;if (x2-x1>0)printf("%.6f",x2-x1);/輸出兩次迭代的差值else printf("%.6f",

10、x1-x2);/ 每次輸出 4 個等用戶審查k+; if (k%3=0) getch(); while (x2-x1>precision|x1-x2>precision);printf("nt 兩點加速迭代初值:%If,次數(shù):*根:lf",x0,k,x2);void main()double orgin=1.5;/ 初始值double precision=5e-6; / 精度 char sel=0;/ 操作符while(1)printf("nt 選擇 :");printf("nt1.二分法 nt2.迭代法 nt");sel

11、=getch();printf("nnt 注:程序停止處按任意鍵繼續(xù) ");if (sel='1')printf("nnt*二分法求解過程 *"biSectionMethod(precision);elseprintf("nt 輸入迭代的初值 :"); scanf("%lf",&orgin);/if (orgin>2.0|orgin<1.0)/ 測試函數(shù)/ 限制迭代初值范圍 ,根據(jù)情況決定/orgin=1.5;/如果輸入非法 ,則按 1.5計算printf("nnt*牛

12、頓迭代法求解過程 *"NewTonMethod(orgin,precision); printf("nt 任何鍵繼續(xù) :"); getch();* 普通迭代 g(x)=(sqrt(10-x*x*x)/2*");printf("nnt ordinaMethod(orgin,precision); printf("nt 任何鍵繼續(xù) :"); getch();* 兩 個 值 組 合 加 速 迭 代printf("nntx=(g(x)+x)/2*");twoValue(orgin,precision);print

13、f("nt 任何鍵繼續(xù) :"); getch();五、運行結(jié)果選擇求根方法2、3、1、選擇二分法下面給出二分法的結(jié)果:cTC *C: Do cuents and S e t ti AgsVAda iiii s tr at or而、數(shù)值v±:程序停止處按任意犍繼續(xù)WKHXMHWWWWMH i 井?主求解過程 MWHMHHMWHMWk有根區(qū)間k+1f<x<k+l>>0【1000.20001.5000002.37500011.000.1.5001.250000-1-7968752r±.250,1.500J1.3750000.162109

14、31-250,1.37511>312500-0.8483894i-313,i-3751.343750-0-3509835r±.344,±.37S1-359375-0.09£409&1-359,1.37511>3671880.0323567i.359,i,3671-363281-0.0321508±.363,1.3671.3652340.00007291-363,1.3651-364258-0.01604710i.364,1.3651-36474&-0.00798911tl-3bS,l-36S1,364990-0.0039591

15、2i-365,1.3651.365112-0.00194413i.365,1.3651-365173-0.000936141-365,1-3651.365204-0.00043215i-365,1.3651>365219-0.000180161.365,1.365 J1-365227-0.000054171-365,1-3651.3652310.90000?二分 任何:塞§間的次數(shù)""所求的根是応選擇迭代法查看結(jié)果:首先顯示的是牛頓迭代法的結(jié)果:土擊鬲:出牛dz母 dd薛hx<k>丁1石/廠肝心'| 土f Jde1.100003-3.82

16、90000.30904511.4080450-7219410.0419442i.3&ei3i0.0143950.000«7131.36S2300.0Q0006O.O0000Q牛頓迭代初值1B00Q0,次數(shù)£ 所求的根是,1365230任何鍵繼續(xù):1 1然后是普通迭代法函數(shù)是:®(x)弓1°-x3尸,結(jié)果如下:*普通迭代ST燈內(nèi) x*x«x> >/2*w«kx<:k>fCx<k>>ix<k*l>-xCk> iQ1.100000-3.8290000.37215811.47

17、21581_859535016741i21.304748-0.9693770,08978131-3945290.49079&0.04471041.349819-0.2525690.Q2319OS1.3730090_1289470.01179061.361219-0.Q&ei080.00605771.3672760.0338200.Q03Q9石S1.364181-0.0173210.00158691-3657670.000812101.364955-0.0045390.000416111.3653710.0023240.000213121-365158-0.3011900.000

18、10?131.3652670.0006090.Q0OQ56141.365211-0.0003120.000029151.3652400.0001600.000915161-365225-0.0000820.Q0OQ07171.3652330.0000420.000004血:通迭代初值= 1-100000,次數(shù)汽二所求的根是a-365229任何犍繼續(xù):1 J接著可以看到的是用兩點加速法對函數(shù) 護(X)=丄(10-%3)2的加速:2兩個值組合加速迭代XK屮X > +X >/21.1000001.2860791.3445031-3600721.3639651.3649211,3651551.3652121.365226-3.829000 -1.256827 -0.338797 -0.084955 -0.020873 -0.005102 -0,001246 -0.000304 -0.000074!x<k*l>-x<k&g

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論