數(shù)值計(jì)算方法實(shí)驗(yàn)指導(dǎo)(Matlab版)_第1頁(yè)
數(shù)值計(jì)算方法實(shí)驗(yàn)指導(dǎo)(Matlab版)_第2頁(yè)
數(shù)值計(jì)算方法實(shí)驗(yàn)指導(dǎo)(Matlab版)_第3頁(yè)
數(shù)值計(jì)算方法實(shí)驗(yàn)指導(dǎo)(Matlab版)_第4頁(yè)
數(shù)值計(jì)算方法實(shí)驗(yàn)指導(dǎo)(Matlab版)_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)值計(jì)算方法實(shí)驗(yàn)指導(dǎo)(Matlab版)肇慶學(xué)院 數(shù)學(xué)與統(tǒng)計(jì)學(xué)學(xué)院計(jì)算方法課程組數(shù)值計(jì)算方法實(shí)驗(yàn)1報(bào)告班級(jí):20xx級(jí)XXXXx班學(xué)號(hào):20xx2409xxxx姓名:XXX成績(jī):1. 實(shí)驗(yàn)名稱 實(shí)驗(yàn)1 算法設(shè)計(jì)原則驗(yàn)證(之相近數(shù)相減、大數(shù)吃小數(shù)和簡(jiǎn)化計(jì)算步驟)2. 實(shí)驗(yàn)題目 (1) 取,計(jì)算和,驗(yàn)證兩個(gè)相近的數(shù)相減會(huì)造成有效數(shù)字的損失 (2) 按不同順序求一個(gè)較大的數(shù)(123)與1000個(gè)較小的數(shù)()的和,驗(yàn)證大數(shù)吃小數(shù)的現(xiàn)象 (3) 分別用直接法和秦九韶算法計(jì)算多項(xiàng)式在x=1.00037處的值驗(yàn)證簡(jiǎn)化計(jì)算步驟能減少運(yùn)算時(shí)間對(duì)于第(3)題中的多項(xiàng)式P(x),直接逐項(xiàng)計(jì)算需要次乘法和n次加法,使用

2、秦九韶算法則只需要n次乘法和n次加法3. 實(shí)驗(yàn)?zāi)康?驗(yàn)證數(shù)值算法需遵循的若干規(guī)則4. 基礎(chǔ)理論 設(shè)計(jì)數(shù)值算法時(shí),應(yīng)避免兩個(gè)相近的數(shù)相減、防止大數(shù)吃小數(shù)、簡(jiǎn)化計(jì)算步驟減少運(yùn)算次數(shù)以減少運(yùn)算時(shí)間并降低舍入誤差的積累兩相近的數(shù)相減會(huì)損失有效數(shù)字的個(gè)數(shù),用一個(gè)大數(shù)依次加小數(shù),小數(shù)會(huì)被大數(shù)吃掉,乘法運(yùn)算次數(shù)太多會(huì)增加運(yùn)算時(shí)間5. 實(shí)驗(yàn)環(huán)境 操作系統(tǒng):Windows xp; 程序設(shè)計(jì)語(yǔ)言:Matlab 6. 實(shí)驗(yàn)過(guò)程 (1) 直接計(jì)算并比較; (2) 法1:大數(shù)逐個(gè)加1000個(gè)小數(shù),法2:先把1000個(gè)小數(shù)相加再與大數(shù)加;(3) 將由高次項(xiàng)到低次項(xiàng)的系數(shù)保存到數(shù)組An中,其中n為多項(xiàng)式次數(shù)7. 結(jié)果與分析

3、 (1) 計(jì)算的= , 分析: (2) 123逐次加1000個(gè)的和是 ,先將1000個(gè)相加,再用這個(gè)和與123相加得 分析: (3) 計(jì)算 次的多項(xiàng)式:直接計(jì)算的結(jié)果是 ,用時(shí) ;用秦九韶算法計(jì)算的結(jié)果是 ,用時(shí) 分析:8. 附錄:程序清單 (1) 兩個(gè)相近的數(shù)相減%*%* 程 序 名:ex1_1.m *%* 程序功能:驗(yàn)證兩個(gè)相近的數(shù)相減會(huì)損失有效數(shù)字個(gè)數(shù) *%*% x = ;% y = ;z=1e16; x,y=(2) 大數(shù)吃小數(shù)%*%* 程 序 名:ex1_2.m *%* 程序功能:驗(yàn)證大數(shù)吃小數(shù)的現(xiàn)象. *%*clc; % 清屏clear all; % 釋放所有內(nèi)存變量format l

4、ong; % 按雙精度顯示浮點(diǎn)數(shù)z=123; % 大數(shù)t=3e-15; % 小數(shù)x=z; % 大數(shù)依次加小數(shù) % 重復(fù)1000次給x中加上t y=0; % 先累加小數(shù) % 重復(fù)1000次給y中加上t y=z + y; % 再加到大數(shù)x,y=(3) 秦九韶算法%*%* 程 序 名:ex1_3.m *%* 程序功能:驗(yàn)證秦九韶算法可節(jié)省運(yùn)行時(shí)間. *%*clc; % 清屏clear all; % 釋放所有內(nèi)存變量format long; % 按雙精度顯示浮點(diǎn)數(shù)A=8,4,-1,-3,6,5,3,2,1,3,2,-1,4,3,1,-2,4,6,8,9,50,-80,12,35,7,-6,42,5,6

5、,23,74,65,55,80,78,77,98,56;A(10001)=0; % 擴(kuò)展到10001項(xiàng),后面的都是分量0 % A為多項(xiàng)式系數(shù),從高次項(xiàng)到低次項(xiàng)x=1.00037; n=9000; % n為多項(xiàng)式次數(shù)% 直接計(jì)算begintime=clock; % 開始執(zhí)行的時(shí)間 % 求x的i次冪 % 累加多項(xiàng)式的i次項(xiàng)endtime=clock; % 結(jié)束執(zhí)行的時(shí)間time1=etime(endtime,begintime); % 運(yùn)行時(shí)間disp('直接計(jì)算');disp('p(',num2str(x),')=',num2str(p);disp

6、(' 運(yùn)行時(shí)間: ',num2str(time1),'秒');% 秦九韶算法計(jì)算begintime=clock; % 開始執(zhí)行的時(shí)間 % 累加秦九韶算法中的一項(xiàng)endtime=clock; % 結(jié)束執(zhí)行的時(shí)間time2=etime(endtime,begintime); % 運(yùn)行時(shí)間disp(' ');disp('秦九韶算法計(jì)算');disp('p(',num2str(x),')=',num2str(p);disp(' 運(yùn)行時(shí)間: ',num2str(time2),'秒

7、9;);數(shù)值計(jì)算方法實(shí)驗(yàn)1報(bào)告班級(jí):20xx級(jí)XXXXx班學(xué)號(hào):20xx2409xxxx姓名:XXX成績(jī):1. 實(shí)驗(yàn)名稱 實(shí)驗(yàn)1 算法設(shè)計(jì)原則驗(yàn)證(之?dāng)?shù)值穩(wěn)定性)2. 實(shí)驗(yàn)題目 計(jì)算定積分,分別用教材例1-7推導(dǎo)出的算法A和B,其中: 算法A: 算法B:驗(yàn)證算法不穩(wěn)定時(shí)誤差會(huì)擴(kuò)大3. 實(shí)驗(yàn)?zāi)康?驗(yàn)證數(shù)值算法需遵循的若干規(guī)則4. 基礎(chǔ)理論 設(shè)計(jì)數(shù)值算法時(shí),應(yīng)采用數(shù)值穩(wěn)定性好的算法數(shù)值穩(wěn)定的算法,誤差不會(huì)放大,甚至?xí)s??;而數(shù)值不穩(wěn)定的算法會(huì)放大誤差5. 實(shí)驗(yàn)環(huán)境 操作系統(tǒng):Windows xp; 程序設(shè)計(jì)語(yǔ)言:Matlab 6. 實(shí)驗(yàn)過(guò)程分別用數(shù)組IA 和IB 保存兩種算法計(jì)算的結(jié)果7. 結(jié)果與

8、分析 運(yùn)行結(jié)果:(或拷屏)n算法A算法B精確值012345678910分析:8. 附錄:程序清單%*%* 程 序 名:ex1_4.m *%* 程序功能:驗(yàn)證數(shù)值穩(wěn)定性算法可控制誤差. *%*clc; % 清屏clear all; % 釋放所有內(nèi)存變量format long; % 按雙精度顯示浮點(diǎn)數(shù)I=0.63212055882856, 0.36787944117144, 0.26424111765712, 0.20727664702865, .0.17089341188538, 0.14553294057308, 0.12680235656154, 0.11238350406938, .0.1

9、0093196744492, 0.09161229300662, 0.08387707010843; % 保留14位小數(shù)的精確值, 是Matlab中的續(xù)行符% 算法AIA(1) = 0.6321; % Matlab下標(biāo)從1開始,所以要用IA(n+1)表示原問(wèn)題中的I(n)% 算法Bdisp('n 算法A 算法B 精確值');for n=1:11 fprintf('%2d %14.6f %14.6f %14.6fn',n-1,IA(n),IB(n),I(n);end % n顯示為2位整數(shù), 其它顯示為14位其中小數(shù)點(diǎn)后顯示6位的小數(shù)數(shù)值計(jì)算方法實(shí)驗(yàn)1報(bào)告班級(jí):20

10、xx級(jí)XXXXx班學(xué)號(hào):20xx2409xxxx姓名:XXX成績(jī):1. 實(shí)驗(yàn)名稱 實(shí)驗(yàn)1 算法設(shè)計(jì)原則(除數(shù)絕對(duì)值不能太?。?. 實(shí)驗(yàn)題目將線性方程組增廣矩陣?yán)贸醯刃凶儞Q可化為由此可解得分別解增廣矩陣為和的方程組,驗(yàn)證除數(shù)絕對(duì)值遠(yuǎn)小于被除數(shù)絕對(duì)值的除法會(huì)導(dǎo)致結(jié)果失真3. 實(shí)驗(yàn)?zāi)康?驗(yàn)證數(shù)值算法需遵循的若干規(guī)則4. 基礎(chǔ)理論 設(shè)計(jì)數(shù)值算法時(shí),應(yīng)避免除數(shù)絕對(duì)值遠(yuǎn)小于被除數(shù)絕對(duì)值的除法,否則絕對(duì)誤差會(huì)被放大,使結(jié)果失真5. 實(shí)驗(yàn)環(huán)境 操作系統(tǒng):Windows xp; 程序設(shè)計(jì)語(yǔ)言:Matlab 6. 實(shí)驗(yàn)過(guò)程用二維數(shù)組A和B存放方程組的增廣矩陣,利用題目所給初等行變換求解方程組7. 結(jié)果與分析 第

11、1種順序的方程組的解為x= ,y= ;第2種順序的方程組的解為x= ,y= 分析:8. 附錄:程序清單%*%* 程 序 名:ex1_5.m *%* 程序功能:驗(yàn)證除數(shù)的絕對(duì)值太小可能會(huì)放大誤差. *%*clc;A=1e-16, 1, 1; 2, 1, 2;B=2, 1, 2; 1e-16, 1, 1; % 增廣矩陣% 方程組A % m = - a_21/a_11 是第2行加第1行的倍數(shù) % 消去a_21 % m = - a_12/a_22 是第1行加第2行的倍數(shù) % 消去a_12, 系數(shù)矩陣成對(duì)角線 % 未知數(shù)x1的值 % 未知數(shù)x2的值disp('方程組A的解: x1=',n

12、um2str(A(1,3),', x2=',num2str(A(2,3);disp(' ');% 方程組B % m = - b_21/b_11 是第2行加第1行的倍數(shù) % 消去b_21 % m = - b_12/b_22 是第1行加第2行的倍數(shù) % 消去b_12, 系數(shù)矩陣成對(duì)角線 % 未知數(shù)x1的值 % 未知數(shù)x2的值disp('方程組B的解: x1=',num2str(B(1,3),', x2=',num2str(B(2,3);數(shù)值計(jì)算方法實(shí)驗(yàn)2報(bào)告班級(jí):20xx級(jí)XXXXx班學(xué)號(hào):20xx2409xxxx姓名:XXX成績(jī):1

13、. 實(shí)驗(yàn)名稱 實(shí)驗(yàn)2 非線性方程的迭代解法(之簡(jiǎn)單迭代法)2. 實(shí)驗(yàn)題目 用簡(jiǎn)單迭代法求方程在區(qū)間1,2內(nèi)的一個(gè)實(shí)根,取絕對(duì)誤差限為3. 實(shí)驗(yàn)?zāi)康?掌握非線性方程的簡(jiǎn)單迭代法4. 基礎(chǔ)理論 簡(jiǎn)單迭代法:將方程改寫成等價(jià)形式,從初值開始,使用迭代公式可以得到一個(gè)數(shù)列,若該數(shù)列收斂,則其極限即為原方程的解取數(shù)列中適當(dāng)?shù)捻?xiàng)可作為近似解5. 實(shí)驗(yàn)環(huán)境 操作系統(tǒng):Windows xp; 程序設(shè)計(jì)語(yǔ)言:Matlab6. 實(shí)驗(yàn)過(guò)程 7. 結(jié)果與分析 8. 附錄:程序清單數(shù)值計(jì)算方法實(shí)驗(yàn)2報(bào)告班級(jí):20xx級(jí)XXXXx班學(xué)號(hào):20xx2409xxxx姓名:XXX成績(jī):1. 實(shí)驗(yàn)名稱 實(shí)驗(yàn)2 非線性方程的迭代解

14、法(之Newton迭代法)2. 實(shí)驗(yàn)題目 用Newton迭代法求方程在區(qū)間1,2內(nèi)的一個(gè)實(shí)根,取絕對(duì)誤差限為3. 實(shí)驗(yàn)?zāi)康?掌握求解非線性方程的Newton迭代法4. 基礎(chǔ)理論Newton迭代法:解方程的Newton迭代公式為5. 實(shí)驗(yàn)環(huán)境 操作系統(tǒng):Windows xp; 程序設(shè)計(jì)語(yǔ)言:Matlab6. 實(shí)驗(yàn)過(guò)程 7. 結(jié)果與分析 8. 附錄:程序清單數(shù)值計(jì)算方法實(shí)驗(yàn)2報(bào)告班級(jí):20xx級(jí)XXXXx班學(xué)號(hào):20xx2409xxxx姓名:XXX成績(jī):1. 實(shí)驗(yàn)名稱 實(shí)驗(yàn)2 非線性方程的迭代解法(之對(duì)分區(qū)間法)2. 實(shí)驗(yàn)題目 用對(duì)分區(qū)間法求方程在區(qū)間1, 1.5內(nèi)的一個(gè)實(shí)根,取絕對(duì)誤差限為3.

15、實(shí)驗(yàn)?zāi)康?掌握求解非線性方程的對(duì)分區(qū)間法4. 基礎(chǔ)理論對(duì)分區(qū)間法:取a,b的中點(diǎn)p,若f(p) 0或b a < ,則p為方程的近似解;若f(a) f(p) < 0,則說(shuō)明根在區(qū)間取a,p中;否則,根在區(qū)間取p,b中將新的有根區(qū)間記為 a1,b1,對(duì)該區(qū)間不斷重復(fù)上述步驟,即可得到方程的近似根5. 實(shí)驗(yàn)環(huán)境 操作系統(tǒng):Windows xp; 程序設(shè)計(jì)語(yǔ)言:Matlab6. 實(shí)驗(yàn)過(guò)程用宏定義函數(shù)f(x);為了循環(huán)方便,得到的新的有根區(qū)間始終用a,b表示;由于新的有根區(qū)間可能仍以a為左端點(diǎn),這樣會(huì)反復(fù)使用函數(shù)值f(a),為減少運(yùn)算次數(shù),將這個(gè)函數(shù)值保存在一個(gè)變量fa中;同樣在判斷新的有根

16、區(qū)間時(shí)用到函數(shù)值f(p),若新的有根區(qū)間以p為左端點(diǎn),則下一次用到的f(a)實(shí)際上就是現(xiàn)在的f(p),為減少運(yùn)算次數(shù),將這個(gè)函數(shù)值保存在一個(gè)變量fp中算法的偽代碼描述:Input:區(qū)間端點(diǎn)a,b;精度要求(即誤差限);函數(shù)f(x);最大對(duì)分次數(shù)NOutput:近似解或失敗信息行號(hào)偽代碼注釋1n 1; 對(duì)分次數(shù)計(jì)數(shù)器2fa f(a); 左端點(diǎn)的函數(shù)值3while n N do 4 p (a+b)/ 2; 區(qū)間中點(diǎn)5 fp f(p); 中點(diǎn)的函數(shù)值6 if fp = 0 or (b-a)/2 < then 函數(shù)值為0或半?yún)^(qū)間長(zhǎng)不超7 return p; 輸出近似解并退出程序 8 endif

17、9 n n + 1; 計(jì)數(shù)器加一10if fa ·fp > 0 then 若中點(diǎn)與左端點(diǎn)函數(shù)值同號(hào)11a p; 新區(qū)間取右半?yún)^(qū)間12fa fp;13else 否則14b p;新區(qū)間取左右半?yún)^(qū)間15endif16enddo17 return 錯(cuò)誤信息 輸出錯(cuò)誤信息并結(jié)束程序7. 結(jié)果與分析 8. 附錄:程序清單說(shuō)明: 源程序中帶有數(shù)字的空行,對(duì)應(yīng)著算法描述中的行號(hào)%*%* 程 序 名:Bisection.m *%* 程序功能:使用二分法求解非線性方程. *%*f=inline('x3-x-1'); % 定義函數(shù)f(x)a=input('有根區(qū)間左端點(diǎn): a

18、=');b=input('右端點(diǎn):b=');epsilon=input('誤差限:epsilona=');N=input('最大對(duì)分次數(shù): N='); 1 % 對(duì)分次數(shù)計(jì)數(shù)器n置1 2 % 左端點(diǎn)的函數(shù)值給變量fafprintf('n k p f(p) a(k) f(a(k)');fprintf(' b(k) b-an');% 顯示表頭fprintf('%2d%36.6f%12.6f%12.6f%12.6fn',0,a,fa,b,b-a); % 占2位其中0位小數(shù)顯示步數(shù)0, 共12位其中小

19、數(shù)6位顯示各值 3 % while n N 4 % 取區(qū)間中點(diǎn)p 5 % 求p點(diǎn)函數(shù)值給變量fp fprintf('%2d%12.6f%12.6f',n,p,fp);% 輸出迭代過(guò)程中的中點(diǎn)信息p和f(p) 6 % 如果f(p)=0或b-a的一半小于誤差限 fprintf('nn近似解為:%fn',p); % 則輸出近似根p (7)return; % 并結(jié)束程序 (7) 8 9 % 計(jì)數(shù)器加1 10 % 若f(a)與f(p)同號(hào) 11 % 則取右半?yún)^(qū)間為新的求根區(qū)間, 即a取作p 12 % 保存新區(qū)間左端點(diǎn)的函數(shù)值 13 % 否則 14 % 左半?yún)^(qū)間為新的求根區(qū)

20、間, 即b取作p 15 fprintf('%12.6f%12.6f%12.6f%12.6fn',a,fa,b,b-a);% 顯示新區(qū)間端點(diǎn)及左端函數(shù)值、區(qū)間長(zhǎng)度 16 fprintf('nn經(jīng)過(guò)%d次迭代后未達(dá)到精度要求.n',N);% 輸出錯(cuò)誤信息(行17)數(shù)值計(jì)算方法實(shí)驗(yàn)2報(bào)告班級(jí):20xx級(jí)XXXXx班學(xué)號(hào):20xx2409xxxx姓名:XXX成績(jī):1. 實(shí)驗(yàn)名稱 實(shí)驗(yàn)2 非線性方程的迭代解法(之Aitken-Steffensen加速法)2. 實(shí)驗(yàn)題目 用Aitken-Steffensen加速法求方程在區(qū)間1,2內(nèi)的一個(gè)實(shí)根,取絕對(duì)誤差限為3. 實(shí)驗(yàn)?zāi)康?

21、熟悉求解非線性方程的Aitken-Steffensen加速法4. 基礎(chǔ)理論 將方程改寫成等價(jià)形式,得到從初值開始的迭代公式后,基于迭代公式的Aitken-Steffensen加速法是通過(guò)“迭代-再迭代-加速”完成迭代的,具體過(guò)程為5. 實(shí)驗(yàn)環(huán)境 操作系統(tǒng):Windows xp; 程序設(shè)計(jì)語(yǔ)言:Matlab6. 實(shí)驗(yàn)過(guò)程 為了驗(yàn)證Aitken-Steffensen加速法可以把一些不收斂的迭代加速成迭代收斂,我們使用將方程組變形為,取迭代函數(shù),并利用宏定義出迭代函數(shù)由于不用保存迭代過(guò)程,所以用x0表示初值同時(shí)也存放前一步迭代的值,y和z是迭代過(guò)程中產(chǎn)生的yk和zk,x存放新迭代的結(jié)果算法的偽代碼描

22、述:Input:初值x0;精度要求(即誤差限);迭代函數(shù)(x);最大迭代次數(shù)NOutput:近似解或失敗信息行號(hào)偽代碼注釋1n 1; 迭代次數(shù)計(jì)數(shù)器2while n N do 3 y (x0); 迭代4 z (y); 再迭代5 x x0 (y-x0)2 / (z - 2 y + x0) 加速6if | x x0 | < then 如果達(dá)到精度要求 7return x; 則輸出近似值并退出程序 8 endif 9n n + 1;計(jì)數(shù)器加一10x0 x; 新近似值給x0做下次的初值11enddo12 return 錯(cuò)誤信息 輸出錯(cuò)誤信息并結(jié)束程序7. 結(jié)果與分析 8. 附錄:程序清單%*%*

23、 程 序 名:Aitken_Steffensen.m *%* 程序功能:用Aitken-Steffensen加速法求方程. *%*clc;clear all;phi=inline('0.5 * sqrt( 10 - x3)'); % 迭代函數(shù)x0=input('初值: x0 = ');epsilon=input('誤差限: epsilon=');N=input('最大迭代次數(shù): N=');disp(' n 迭代中間值y(n-1) 再迭代結(jié)構(gòu)z(n-1) 加速后的近似值x(n)');fprintf('%2d%

24、54.6fn',0,x0); % 占2位整數(shù)顯示步數(shù)0, 為了對(duì)齊, 占54位小數(shù)6位顯示x0 1 % n是計(jì)數(shù)器 2 % while n<=N y= 3 ;% 迭代 z= 3 ;% 再迭代 x= 3 ;% 加速 % x0初值及前一步的近似值, y和z是中間變量, x是下一步的近似值 fprintf('%2d%18.6f%18.6f%18.6fn',n,y,z,x); % 顯示中間值和迭代近似值 6 % 如果與上一步近似解差的絕對(duì)值不超過(guò)誤差限 fprintf('nn 近似解 xx(%d)%fn',n,x); % 則輸出近似根 (7), 可簡(jiǎn)略為:

25、 fprintf('nn近似解 x=%f',x); return; % 并結(jié)束程序(7) 8 % 相當(dāng)于endif 9 % 計(jì)數(shù)器加1 10 % 新近似值x作為下一次迭代的初值 11 fprintf('n 迭代%d次還不滿足誤差要求.nn',N); %輸出錯(cuò)誤信息(12)數(shù)值計(jì)算方法實(shí)驗(yàn)2報(bào)告班級(jí):20xx級(jí)XXXXx班學(xué)號(hào):20xx2409xxxx姓名:XXX成績(jī):1. 實(shí)驗(yàn)名稱 實(shí)驗(yàn)2 非線性方程的迭代解法(之Newton下山法)2. 實(shí)驗(yàn)題目 用Newton下山法求方程在區(qū)間1,2內(nèi)的一個(gè)實(shí)根,取絕對(duì)誤差限為3. 實(shí)驗(yàn)?zāi)康?熟悉非線性方程的Newton下山

26、法4. 基礎(chǔ)理論Newton下山法:Newton下山法公式為,使,其中5. 實(shí)驗(yàn)環(huán)境 操作系統(tǒng):Windows xp; 程序設(shè)計(jì)語(yǔ)言:Matlab6. 實(shí)驗(yàn)過(guò)程定義函數(shù)f(x)和df(x),其中df(x)是f(x)的導(dǎo)函數(shù)每步迭代時(shí)先取下山因子為1,嘗試迭代,判斷嘗試結(jié)果是否滿足下山因子,若滿足則作為這步的迭代結(jié)果;否則將下山因子減半,然后再嘗試為防止當(dāng)前的xk是極小值點(diǎn),附近不會(huì)有滿足下述條件的其它點(diǎn),使嘗試陷入死循環(huán),同時(shí)計(jì)算機(jī)中能表示出的浮點(diǎn)數(shù)也有下界,因此我們?cè)O(shè)置了最大嘗試次數(shù)當(dāng)超過(guò)最大嘗試次數(shù)時(shí),不再進(jìn)行下山嘗試由于反復(fù)嘗試迭代且要判斷下山條件,所以f(x0)和f(x0)會(huì)反復(fù)使用,

27、為避免重復(fù)計(jì)算浪費(fèi)運(yùn)行時(shí)間,將這兩個(gè)值分別保存在變量fx0和dfx0而嘗試產(chǎn)生的節(jié)點(diǎn),判斷下山條件時(shí)要用到它的函數(shù)值,若嘗試成功,這個(gè)點(diǎn)會(huì)作為下一步的初值再使用,所以把該點(diǎn)的函數(shù)值也保存在變量fx中算法的偽代碼描述:Input:初值x0;精度要求(即誤差限);函數(shù)及其導(dǎo)函數(shù)f(x)和f(x);最大迭代次數(shù)N;K下山嘗試最大次數(shù)Output:近似解或失敗信息行號(hào)偽代碼注釋1n 1; 迭代次數(shù)計(jì)數(shù)器2F0 f(x0); 3while n N do 4F0 f(x0);5if F0= 0 then 若該點(diǎn)導(dǎo)數(shù)為06 return False; 則無(wú)法進(jìn)行迭代,結(jié)束程序 7endif 8lambda

28、1;下山因子從1試起9k 1;嘗試次數(shù)計(jì)數(shù)器10while k K do11x x0 lambda*F0 / F0Newton下山公式12 Fx f(x);13if |Fx| < |F0| then判斷下山條件14 break;退出嘗試循環(huán)15 endif16lambda lambda/2;下山因子減半17k k+1;嘗試次數(shù)計(jì)數(shù)器加118 endwhile19 if k > K then如果因超過(guò)嘗試次數(shù)退出循環(huán)20 return False;則提示錯(cuò)誤信息并結(jié)束程序21endif否則時(shí)嘗試成功退出上邊循環(huán)22if | x x0 | < then如果達(dá)到精度要求23retu

29、rn x;則輸出近似值并退出程序24 endif 25 x0 x;新近似值給x0做下次的初值26F0 Fx;所求函數(shù)值下次也用到27n n + 1;計(jì)數(shù)器加一28enddo29return 錯(cuò)誤信息 輸出錯(cuò)誤信息并結(jié)束程序7. 結(jié)果與分析 8. 附錄:程序清單%*%* 程 序 名:NewtonDownhill.m *%* 程序功能:用Newton下山法求解非線性方程. * %*clc;clear all;f=inline('x3-x-1'); % 函數(shù)f(x)df=inline('3*x2-1'); % 函數(shù)f(x)的導(dǎo)函數(shù)x0=input('初值: x

30、0 = ');epsilon=input('誤差限: epsilon=');N=input('最大迭代次數(shù): N=');K=input('最大下山嘗試次數(shù): K='); 1 % 迭代次數(shù)計(jì)數(shù)器 2 % 存x0點(diǎn)函數(shù)值fprintf('nn n x(n) f(x(n)n');% 顯示表頭fprintf('%2d%14.6f%14.6fn',0,x0,fx0);% 2位整數(shù)顯示0, 共14位小數(shù)6位顯示x0和fx0 3 % while n N disp('');% 換行顯示下山嘗試過(guò)程的表頭 d

31、isp(' 下山因子 嘗試x(n) 對(duì)應(yīng)f(x(n) 滿足下山條件');disp(''); 4 % 存x0點(diǎn)導(dǎo)數(shù)值, 每次下山嘗試不用重新計(jì)算if dfx0=0% 導(dǎo)數(shù)為0不能迭代disp(無(wú)法進(jìn)行Newton迭代);return; end lambda=1.0; % 下山因子從1開始嘗試k=1; % k下山嘗試次數(shù)計(jì)數(shù)器while k<=K % 下山最多嘗試K次 % 下山公式 fx=f(x);% 函數(shù)值 fprintf('%22.6f%14.6f%14.6f',lambda,x,fx);% 顯示嘗試結(jié)果if (abs(fx)<abs

32、(fx0)% 判斷是否滿足下山條件 fprintf(' 滿足n'); break; % 是, 則退出下山嘗試的循環(huán) else fprintf(' 不滿足n'); end lambda=lambda/2;% 不是, 則下山因子減半 k=k+1;% 計(jì)數(shù)器加1 end if k>K fprintf('n 下山條件無(wú)法滿足, 迭代失敗.nn'); return; endfprintf('%2d%14.6f%14.6fn',n,x,fx);% 2位整數(shù)顯示步數(shù)n, 共14位小數(shù)6位顯示下步迭代結(jié)果 22 % 達(dá)到精度要求否 fpri

33、ntf('nn 方程的近似解為: x%fnn',x);% (23) return;% 達(dá)到, 則顯示結(jié)果并結(jié)束程序(23) end% (24) % 用x0,fx0存放前一步的近似值和它的函數(shù)值, 進(jìn)行循環(huán)迭代 25 26 27 28 fprintf('n 迭代%d次還不滿足誤差要求.nn',N);數(shù)值計(jì)算方法實(shí)驗(yàn)2報(bào)告班級(jí):20xx級(jí)XXXXx班學(xué)號(hào):20xx2409xxxx姓名:XXX成績(jī):1. 實(shí)驗(yàn)名稱 實(shí)驗(yàn)2 非線性方程的迭代解法(之弦截法)2. 實(shí)驗(yàn)題目 用弦截法求方程在區(qū)間1,2內(nèi)的一個(gè)實(shí)根,取絕對(duì)誤差限為3. 實(shí)驗(yàn)?zāi)康?熟悉非線性方程的弦截法4. 基

34、礎(chǔ)理論將Newton迭代法中的導(dǎo)數(shù)用差商代替,得到弦截法(或叫正割法)公式5. 實(shí)驗(yàn)環(huán)境 操作系統(tǒng):Windows xp; 程序設(shè)計(jì)語(yǔ)言:Matlab6. 實(shí)驗(yàn)過(guò)程不保存迭代過(guò)程,所以始終以x0和x1分別存放xk-1和xk,而x存放新產(chǎn)生的迭代值xk+1,這樣,下一次迭代時(shí)需要把上一步的x1(即xk)賦值于x0(做新的xk-1)這些點(diǎn)的函數(shù)值會(huì)重復(fù)用到,在迭代公式中也要用到,上一步的x1作為下一步的x0也會(huì)再一次用它的函數(shù)值,為減少重新計(jì)算該點(diǎn)函數(shù)值的運(yùn)行時(shí)間,將x1點(diǎn)的函數(shù)值保存在變量fx1中算法的偽代碼描述:Input:初值x0,x1;精度要求(即誤差限);函數(shù)f(x);最大迭代次數(shù)NOu

35、tput:近似解或失敗信息行號(hào)偽代碼注釋1fx0 f(x0); 初值點(diǎn)的函數(shù)值2fx1 f(x1);3n 2; 迭代次數(shù)計(jì)數(shù)器(從2開始)4while n N do 5 x x1(x1-x0)*f(x1) / (f(x1 ) f(x0); 迭代6if | x x0 | < then 如果達(dá)到精度要求 7return x; 則輸出近似值并退出程序 8 endif 9x0 x1; (按順序)最新的2個(gè)近似值,分別做下次的初值x0,x110x1 x;11 fx0 fx1; 下次初值點(diǎn)的函數(shù)值12fx1 f(x1);13 n n+1;14enddo15return 錯(cuò)誤信息 輸出錯(cuò)誤信息并結(jié)束程

36、序7. 結(jié)果與分析 8. 附錄:程序清單%*%* 程 序 名:SecantMethod.m *%* 程序功能:用弦截法求解非線性方程. *%*clc;clear all;f=inline('2*x3-5*x-1'); % 函數(shù)f(x)x0=input('第一初值: x0 = ');x1=input('第二初值: x1 = ');epsilon=input('誤差限: epsilon=');N=input('最大迭代次數(shù): N=');fprintf('n n x(n)n'); % 顯示表頭fprint

37、f('%2d%14.6fn', 0, x0); % 占2位顯示步數(shù)0, 共14位其中小數(shù)6位顯示x0fprintf('%2d%14.6fn', 1, x1); % 占2位顯示步數(shù)1, 共14位其中小數(shù)6位顯示x1 1 % 存x0點(diǎn)函數(shù)值 2 % 存x1點(diǎn)函數(shù)值 3 % 迭代計(jì)數(shù)器 4 % while n N % 弦截法公式 fprintf('%2d%14.6fn', n, x); % 顯示迭代過(guò)程 6 % 達(dá)到精度要求否 fprintf('nn 方程的近似解為: x%fnn', x); return; % 達(dá)到, 則顯示結(jié)果并結(jié)束程序 8 9 % 原x1做x0為前兩步的近似值 10 % 現(xiàn)x做x1為一兩步的近似值 11 % x0點(diǎn)函數(shù)值 12 % 計(jì)算x1點(diǎn)函數(shù)值, 為下一次循環(huán) 13 % 計(jì)數(shù)器加1 14 fprintf('n 迭代%d次還不滿足誤差要求.nn',N); 數(shù)值計(jì)算方法實(shí)驗(yàn)3報(bào)告班級(jí):20xx級(jí)XXXXx班學(xué)號(hào):20xx2409xxxx姓名:XXX成績(jī):1. 實(shí)驗(yàn)名稱 實(shí)驗(yàn)3 解線性方程組的直接法(之Gauss消去法)2. 實(shí)驗(yàn)題目 用Gauss消去法求解線性方程組3. 實(shí)驗(yàn)?zāi)康?掌握解線性方程組的Gauss消去法4. 基

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論