版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 《數(shù)值計(jì)算方法》課程設(shè)計(jì)</p><p> 設(shè)計(jì)題目: 非線性方程(組)的解法 </p><p> 設(shè)計(jì)時(shí)間: 2010-6-11至2010-6-18 </p><p> 指導(dǎo)教師: </p><p> 題目 非線性方程(組)的數(shù)值解法</p>
2、<p> --求解非線性方程組的幾種方法</p><p><b> 問題的提出</b></p><p> 分析比較Newton法、Newton法的變形格式。然后分別用Newton 法、簡化Newton 法、選取不同的初值求解下面方程組,對于相同的精度要求,比較這兩種方法的運(yùn)行時(shí)間。</p><p><b> 背景分
3、析</b></p><p> 牛頓法是一種重要迭代法,他是逐步線性化方法的典型代表,牛頓法的特點(diǎn)是每一步都需要計(jì)算以及,其計(jì)算量比較大,為了減少計(jì)算量,提出簡化牛頓法。</p><p><b> 算法思想</b></p><p><b> 1、牛頓法</b></p><p> 設(shè)
4、有非線性方程組 </p><p><b> 其中 </b></p><p> 由偏導(dǎo)數(shù)作成的矩陣記為,稱為的雅克比矩陣</p><p> 設(shè)為的解,且設(shè)為的近似解?,F(xiàn)利用多元函數(shù)在點(diǎn)的泰勒公式有</p><p> 其中,在與的所連的線段內(nèi)。</p><p> 如果用上式中
5、的線性函數(shù)近似替代,并將線性方程組</p><p><b> …..(1)</b></p><p> 的解作為的第次近似解記為</p><p> 將(1)式寫成矩陣形式,即 </p><p> 為非奇異矩陣,則牛頓迭代公式:</p><p> ……………………………(2 )</
6、p><p> 求解非線性方程組牛頓方法為</p><p><b> 2、簡化牛頓法</b></p><p> 在牛頓法的基礎(chǔ)上,為了減少計(jì)算量,將均取為,得如下簡化牛頓公式:</p><p> …………………(3 )</p><p> 其中(2)(3)式均為線性收斂的。</p>
7、<p><b> 算法設(shè)計(jì)</b></p><p> 將一個(gè)非線性方程組寫成向量的形式有: </p><p><b> F(x) = 0 </b></p><p> 牛頓迭代法的公式就是: </p><p> x(k+1)=x(k)-F’(x(k))-1F(x(k)) <
8、/p><p> 其中F’(x(k))為Jacobi矩陣,我寫的這段程序就是根據(jù)這個(gè)公式來的。</p><p> 運(yùn)用MATLAB中的jacobian求出F的雅克比矩陣,用inv求逆</p><p> matrix=@(varargin)[varargin{:}]構(gòu)造迭代函數(shù)</p><p> 在比較牛頓法和簡化牛頓法運(yùn)行時(shí)間方面,我們主要
9、是通過比較迭代次數(shù)。</p><p><b> 程序清單</b></p><p><b> 牛頓法源程序:</b></p><p> function x=newton_solve(F,v,x0,e) </p><p> if (~ischar(F) || ~ischar(v)) %定義類型
10、</p><p> error('Parameter F and v should be char type!'); </p><p><b> end </b></p><p> if (~isnumeric(x0) || ~isnumeric(e)) </p><p> error('
11、Parameter x0 and e should be numeric type!'); </p><p><b> end </b></p><p> F=sym(F);v=sym(v);</p><p> dF=jacobian(F,v);</p><p> tF=inv(dF)*F</p&
12、gt;<p> for index=1:numel(v) </p><p> tF=subs(tF,v(index),['x(' num2str(index) ')']); %把x分量化,把x1變成x(1),把x2變成x(2)</p><p><b> end </b></p><p> m
13、atrix=@(varargin)[varargin{:}].'; </p><p><b> %構(gòu)造迭代函數(shù)</b></p><p> phi=['x-' char(tF)]; </p><p> eval(['phi=@(x)' phi ';']); </p>&l
14、t;p> err=inf; %無窮大</p><p> xold=phi(x0); </p><p><b> n=0; </b></p><p> while err>e </p><p> xnew=phi(xold); </p><p> %用本次結(jié)果與上次結(jié)果差的范
15、數(shù)來衡量誤差</p><p> err=norm(xnew-xold); </p><p> xold=xnew; </p><p><b> n=n+1; </b></p><p> %迭代次數(shù)大于10000是退出循環(huán)</p><p> if (n>10000) </p&g
16、t;<p><b> break; </b></p><p><b> end </b></p><p><b> n%迭代次數(shù)</b></p><p><b> end </b></p><p><b> x=xold;
17、</b></p><p> 簡化牛頓法的源程序:</p><p> function x=simnewton_solve (F,v,x0,e) </p><p> if (~ischar(F) || ~ischar(v)) %定義類型</p><p> error('Parameter F and v should
18、 be char type!'); </p><p><b> end </b></p><p> if (~isnumeric(x0) || ~isnumeric(e)) </p><p> error('Parameter x0 and e should be numeric type!'); </p&g
19、t;<p><b> end </b></p><p> F=sym(F);v=sym(v);</p><p> dF=jacobian(F,v);</p><p> tF=inv(dF)% dF的逆矩陣</p><p> tF11= -x0(2)/(-x0(2)+4*x0(1));</p&
20、gt;<p> tF12=1/(-x0(2)+4*x0(1));</p><p> tF21= 2*x0(1)/(-x0(2)+4*x0(1));</p><p> tF22=-1/2/(-x0(2)+4*x0(1));</p><p> tF=[tF11,tF12;tF21, tF22] % 把dF的逆矩陣用初始值x0代入,得到一常數(shù)矩陣,(
21、簡化牛頓法的思想)</p><p><b> tF=tF*F;</b></p><p> for index=1:numel(v) </p><p> tF=subs(tF,v(index),['x(' num2str(index) ')']); %把x分量化,把x1變成x(1),把x2變成x(2)<
22、/p><p><b> end </b></p><p> matrix=@(varargin)[varargin{:}].'; </p><p><b> %構(gòu)造迭代函數(shù)</b></p><p> phi=['x-' char(tF)]; </p><
23、;p> eval(['phi=@(x)' phi ';']); </p><p> err=inf; %無窮大</p><p> xold=phi(x0); </p><p><b> n=0; </b></p><p> while err>e </p>
24、<p> xnew=phi(xold); </p><p> %用本次結(jié)果與上次結(jié)果差的范數(shù)來衡量誤差</p><p> err=norm(xnew-xold); </p><p> xold=xnew; </p><p><b> n=n+1; </b></p><p>
25、 %迭代次數(shù)大于10000是退出循環(huán)</p><p> if (n>10000) </p><p><b> break; </b></p><p><b> end </b></p><p><b> n%迭代次數(shù)</b></p><p&g
26、t;<b> end </b></p><p><b> x=xold;</b></p><p><b> 運(yùn)行結(jié)果分析</b></p><p> newton_solve('[x1+2*x2-3;2*x1^2+x2^2-5]','[x1;x2]',[1.5;1
27、],0.0001)</p><p><b> n = </b></p><p><b> 2</b></p><p><b> ans =</b></p><p><b> 1.4880</b></p><p><b&
28、gt; 0.7560</b></p><p> simnewton_solve('[x1+2*x2-3;2*x1^2+x2^2-5]','[x1;x2]',[1.5;1],0.0001) </p><p><b> n =</b></p><p><b> 3</b>&l
29、t;/p><p><b> ans =</b></p><p><b> 1.4880</b></p><p><b> 0.7560</b></p><p> newton_solve('[x1+2*x2-3;2*x1^2+x2^2-5]','[x
30、1;x2]',[100;56],0.0001)</p><p><b> n =</b></p><p><b> 10</b></p><p><b> ans =</b></p><p><b> 1.4880</b></p>
31、;<p><b> 0.7560</b></p><p> simnewton_solve('[x1+2*x2-3;2*x1^2+x2^2-5]','[x1;x2]',[100;56],0.0001)</p><p><b> n =</b></p><p><b&
32、gt; 388</b></p><p><b> ans =</b></p><p><b> 1.4938</b></p><p><b> 0.7531</b></p><p> 上面的結(jié)果是牛頓法和簡化牛頓法同精度同初值的解法以及不同初值同精度得出來
33、的,我們利用迭代次數(shù)來比較它們運(yùn)行的快慢(即運(yùn)行的時(shí)間),我們本題的初值和精度可以任意取值,從而得出迭代次數(shù)以及結(jié)果。從結(jié)果可以看出,簡化牛頓法相比起牛頓法迭代次數(shù)要多一些,而且簡化牛頓法的值誤差較大,因此用牛頓法解非線性方程組要比簡化牛頓法要好。</p><p><b> 問題分析</b></p><p> 在我們參考了MATLAB相關(guān)書籍之后,通過在網(wǎng)上的查閱
34、,基本編寫出牛頓法解非線性方程組的程序,在這個(gè)程序的基礎(chǔ)上我們來改進(jìn)用以實(shí)現(xiàn)簡化牛頓法解非線性方程組,我們主要遇到的是要怎么使它可以在程序中賦初值之后直接生成,最后這個(gè)沒有解決,所以我們選擇了賦初值后,直接把求出來,再把的值作為常量帶入程序中求解。</p><p><b> 總結(jié)</b></p><p> 本次的程序設(shè)計(jì),我們用MATLAB編寫了牛頓法解非線性方程
35、以及簡化的牛頓法解非線性方程的程序。牛頓法是通過牛頓迭代法的公式:x(k+1)=x(k)-F’(x(k))-1F(x(k)) ,帶入初值及給定精度的范圍,得出方程組的解。簡化牛頓法,實(shí)在牛頓法的基礎(chǔ)上,把雅可比矩陣的逆的初始矩陣算出來,再通過迭代的出的解。我們選取了不同的初值解非線性方程組。并且對于同初值同精度問題,分別用牛頓法和簡化的牛頓法解得簡化的牛頓法迭代的次數(shù)更多。說明簡化的牛頓法迭代精度更低而且求的的解誤差較大。這與理論是相符
36、合的。牛頓法和簡化牛頓法都有優(yōu)點(diǎn)也有缺點(diǎn),我們在解決問題的時(shí)候,要結(jié)合自己的實(shí)力和自己所需的選擇恰當(dāng)?shù)姆椒?。我們從不懂到懂得這個(gè)過程讓我們收獲很多,通過不斷地學(xué)習(xí),查閱資料以及修改程序,一個(gè)從無到有的積累,我們不僅僅是在做題,也是在學(xué)習(xí)處理任何問題的方法。遇到困難不要輕易放棄,要善于利用和整合資源,這都是生活必不可少的。</p><p><b> 參考文獻(xiàn)</b></p>&
37、lt;p> 《數(shù)值計(jì)算方法》鄭繼明 重慶大學(xué)出版社 2005</p><p> 《數(shù)值分析》翟瑞彩和謝偉松 天津大學(xué)出版社2000</p><p> 《matlab 工程數(shù)學(xué)應(yīng)用》許波和劉征 清華大學(xué)出版社 2000</p><p><b> 心得體會</b></p><p> 為期一周的《數(shù)值計(jì)算方法》
38、的課程設(shè)計(jì)結(jié)束了,與其說是一個(gè)星期,實(shí)質(zhì)只有四天,中間有三天放假,所以我們在上機(jī)設(shè)計(jì)的時(shí)間里抓得很緊。</p><p> 通過兩年來的學(xué)習(xí),我覺得這樣的課程設(shè)計(jì)是非常有意義的。數(shù)值計(jì)算方法是一門應(yīng)用范圍很廣的課程,是信息與計(jì)算科學(xué)專業(yè)的一門主要專業(yè)基礎(chǔ)課程,通過這次實(shí)驗(yàn)上機(jī)才知道原來我們可以運(yùn)用MATLAB和C語言以及其他的相關(guān)匯編語言來編輯程序解決數(shù)值計(jì)算方法里面的很多問題。</p><p
39、> 在學(xué)習(xí)了理論知識之后,如何去具體的處理數(shù)學(xué)中的問題,如何把我們的理論運(yùn)用到實(shí)踐中去,這樣的課程設(shè)計(jì)為我們提供了這樣一個(gè)實(shí)踐平臺。通過這次實(shí)驗(yàn),我收獲頗多。</p><p> 首先是對MATLAB軟件的認(rèn)識有了進(jìn)一步的提升。它簡單易學(xué)、計(jì)算功能強(qiáng)等。MATLAB具有強(qiáng)大的矩陣運(yùn)算、數(shù)據(jù)處理的功能,它輸出的結(jié)果可視化。編程效率高,比C語言簡單,讓我們比較容易接受,所以我們在解決這道題的時(shí)候選擇了使用ma
40、tlab這種高級編程語言。我們也通過這次上機(jī)實(shí)驗(yàn)對《數(shù)值計(jì)算方法》有了更進(jìn)一步的鞏固。其次,通過這次上機(jī)實(shí)驗(yàn),我對牛頓法有了更深一層的理解。牛頓法是一種重要迭代法,他是逐步線性化方法的典型代表。為了減少計(jì)算量,牛頓法還衍生出許多的變格形式,比如下降牛頓法、阻尼牛頓法、簡化牛頓法、修正牛頓法、擬牛頓法等等,這里我們主要是用了牛頓法和簡化牛頓法來解非線性方程組,并對這兩種方法做了一個(gè)比較,通過精度的分析,迭代次數(shù)的比較得出牛頓法迭代次數(shù)比較
41、少,但計(jì)算量大;簡化的牛頓法迭代次數(shù)多但計(jì)算量相對較少。所以是各有所長,都能解決我們的問題。在做本次課程設(shè)計(jì)的過程中我感觸最深的當(dāng)屬查閱了很多書籍,為了讓自己的設(shè)計(jì)更加完善,更加符合標(biāo)準(zhǔn),一次次翻閱相關(guān)書籍書是十分必要的,同時(shí)也是必不可少的。</p><p> 通過這次實(shí)驗(yàn)讓我了解到合作的重要性,在處理問題的時(shí)候,當(dāng)自己冥思苦想也想不出來解決方案的時(shí)候,不妨選擇請教老師,和同學(xué)討論??梢赃_(dá)到事半功倍的效果。我們
42、的工作是一個(gè)團(tuán)隊(duì)的工作,團(tuán)隊(duì)需要個(gè)人,個(gè)人也離不開團(tuán)隊(duì),必須發(fā)揚(yáng)團(tuán)結(jié)協(xié)作的精神。某個(gè)人的離群都可能導(dǎo)致導(dǎo)致整項(xiàng)工作的失敗。實(shí)習(xí)中只有一個(gè)人知道原理是遠(yuǎn)遠(yuǎn)不夠的,必須讓每個(gè)人都知道,否則一個(gè)人的錯誤,就有可能導(dǎo)致整個(gè)工作失敗。團(tuán)結(jié)協(xié)作是我們實(shí)習(xí)成功的一項(xiàng)非常重要的保證。而這次實(shí)習(xí)也正好鍛煉了我們的這一點(diǎn),這對于我們的整個(gè)人生來說,都是非常寶貴的。 </p><p> 通過這一個(gè)星期《數(shù)值計(jì)算方法》上機(jī)實(shí)驗(yàn),我對《
43、數(shù)值計(jì)算方法》有了進(jìn)一步的鞏固,我們不僅掌握數(shù)值計(jì)算方法的基本概念,數(shù)值求解數(shù)學(xué)問題的基本方法,更進(jìn)一步為學(xué)習(xí)和解決科學(xué)與工程中的實(shí)際問題打好基礎(chǔ),使我們具備基本的算法分析、設(shè)計(jì)能力和一定的編程能力。當(dāng)然,若要是得自己在這一方面更有能力,僅僅一個(gè)星期的上機(jī)實(shí)驗(yàn)是遠(yuǎn)遠(yuǎn)不夠的,還需要自己課下的多多努力,不過通過這次實(shí)驗(yàn)為我們進(jìn)一步更好的學(xué)習(xí)引進(jìn)了一個(gè)方向,我相信,這次上機(jī)實(shí)驗(yàn)之后,我能夠更有方向性的、目的性去更深的學(xué)習(xí)《數(shù)值計(jì)算方法》以及其
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 非線性方程的數(shù)值解法研究.pdf
- 非線性方程組奇異問題的數(shù)值解法.pdf
- 非線性方程及不等式組的數(shù)值解法.pdf
- 非線性方程組迭代解法
- 數(shù)值方法課程設(shè)計(jì)---牛頓法解非線性方程組
- 非線性方程奇異問題的數(shù)值解法.pdf
- 數(shù)值分析課程設(shè)計(jì)(求解線性方程組)
- 數(shù)值分析2-計(jì)算方法2非線性方程的數(shù)值解法
- 數(shù)值分析課程設(shè)計(jì)---線性方程組求解
- 46125.非線性方程組的迭代解法
- 數(shù)值分析課程設(shè)計(jì)----考察非線性方程求根的試位法
- 非線性方程組的迭代解法【文獻(xiàn)綜述】
- 非線性方程組的迭代解法【開題報(bào)告】
- 非線性方程組的加速迭代解法.pdf
- 基于matlab的科學(xué)計(jì)算—非線性方程(組)
- 非線性方程數(shù)值方法
- 最優(yōu)化算法課程設(shè)計(jì)--解方程組及非線性方程組
- 非線性方程迭代解法的研究.pdf
- 數(shù)值分析3-計(jì)算方法3線性方程組的數(shù)值解法
- 非線性方程的newton解法[文獻(xiàn)綜述]
評論
0/150
提交評論