第一篇:數(shù)值分析總結(jié)
一:1.數(shù)值分析的特點(diǎn):1)首先要有可靠的理論分析,以確保算法在理論上的收斂性和數(shù)值上的穩(wěn)定性。2)其次要對(duì)計(jì)算的結(jié)果進(jìn)行誤差估計(jì),以確定其是否滿足精度。3)還要考慮算法的運(yùn)行效率即算法的運(yùn)算量和存儲(chǔ)量。
2.數(shù)值分析的誤差種類:1)截?cái)嗾`差:模型的準(zhǔn)確解與數(shù)值方法準(zhǔn)確解之間的誤差。
2)舍入誤差:實(shí)數(shù)形式的原始數(shù)據(jù)與有限字長(zhǎng)計(jì)算機(jī)數(shù)據(jù)間的誤差。
3.算法的數(shù)值穩(wěn)定性與病態(tài)問題:1)若某算法受初始誤差或運(yùn)算過程中的舍入誤差影響較小,則稱為數(shù)值穩(wěn)定。2)若微小的初始誤差都會(huì)對(duì)最終結(jié)果產(chǎn)生極大的影響,則稱之為病態(tài)問題。
二:1.Runge現(xiàn)象及其解決方法
Runge現(xiàn)象即高次插值的振蕩現(xiàn)象,指增加節(jié)點(diǎn)固然能使插值函數(shù) p(x)與被插值函數(shù)f(x)在更多的地方相等,但在兩點(diǎn)之間p(x)不一定能很好地近似f(x),有時(shí)候誤差非常大。
解決方法:分段低次插值(將插值區(qū)間分成若干小區(qū)間,在小區(qū)間內(nèi)用低次插值)
2.樣條插值思想:插值函數(shù)p(x)在插值區(qū)間[a,b]上有二階光滑度,在分段的小區(qū)間
[xk,xk+1]上是低次多項(xiàng)式,同時(shí)滿足p(xi)=yi.三:理解逼近問題與擬合問題:1)逼近問題:函數(shù)f(x)在區(qū)間[a,b]具有一階光滑度,求多項(xiàng)式p(x)是f(x)-p(x)在某衡量標(biāo)準(zhǔn)下最小的問題。2)擬合問題:從理論上講y=f(x)是客觀存在的,但在實(shí)際中,僅僅從一些離散的數(shù)據(jù)(xi,yi)(i=1,2…)是不可能求出f(x)的準(zhǔn)確表達(dá)式,只能求出其近似表達(dá)式φ(x)。
插值問題與逼近問題的特點(diǎn)和區(qū)別:1)相同點(diǎn):它們都是求某點(diǎn)值的算法。
2)不同點(diǎn):A,被插值函數(shù)是未知的,而被逼近函數(shù)是已知的。B,插值函數(shù)在節(jié)點(diǎn)處與被插值函數(shù)相等。而逼近函數(shù)的值只要滿足很好的均勻逼近即可。C,求p(x)的方法不同。
四:Romberg求積法和Gauss求積法的基本思想:
1)復(fù)化求積公式精度較高,但需要事先確定步長(zhǎng),欠靈活性,在計(jì)算過程中將步長(zhǎng)逐次減半得到一個(gè)新的序列,用此新序列逼近I的算法為Romberg求積法。
2)對(duì)插值型求積公式,若能選取適當(dāng)?shù)膞k.Ak使其具有2n+1階代數(shù)精度,則稱此類求積公式為Gauss型。
五.Runge-Kutta方法的基本思想:
借助于Taylor級(jí)數(shù)法的思想,將yn+1=yn+hy’(ξ)中的y’(ξ)(平均斜率)表示為f在若干點(diǎn)處值的線性組合,通過選擇適當(dāng)?shù)南禂?shù)使公式達(dá)到一定的階。
第二篇:數(shù)值分析學(xué)習(xí)總結(jié)感想
數(shù)值分析學(xué)習(xí)感想
一個(gè)學(xué)期的數(shù)值分析,在老師的帶領(lǐng)下,讓我對(duì)這門課程有了深刻的理解和感悟。這門課程是一個(gè)十分重視算法和原理的學(xué)科,同時(shí)它能夠?qū)⑷说乃季S引入數(shù)學(xué)思考的模式,在處理問題的時(shí)候,可以合理適當(dāng)?shù)奶岢龇桨负图僭O(shè)。他的內(nèi)容貼近實(shí)際,像數(shù)值分析,數(shù)值微分,求解線性方程組的解等,使數(shù)學(xué)理論更加有實(shí)際意義。
數(shù)值分析在給我們的知識(shí)上,有很大一部分都對(duì)我有很大的幫助,讓我的生活和學(xué)習(xí)有了更加方便以及科學(xué)的方法。像第一章就講的誤差,在現(xiàn)實(shí)生活中,也許沒有太過于注意誤差,所以對(duì)誤差的看法有些輕視,但在學(xué)習(xí)了這一章之后,在老師的講解下,了解到這些誤差看似小,實(shí)則影響很大,更如后面所講的余項(xiàng),那些差別總是讓人很容易就出錯(cuò),也許在別的地方?jīng)]有什么,但是在數(shù)學(xué)領(lǐng)域,一個(gè)小的誤差,就很容易有不好的后果,而學(xué)習(xí)了數(shù)值分析的內(nèi)容,很容易就可以將誤差鎖定在一個(gè)很小的范圍內(nèi),在這一范圍內(nèi)再逼近,得出的近似值要準(zhǔn)確的多,而在最開始的計(jì)算中,誤差越小,對(duì)后面的影響越小,這無疑是好的。
數(shù)值分析不只在知識(shí)上傳授了我很多,在思想上也對(duì)我有很大的影響,他給了我很多數(shù)學(xué)思想,很多思考的角度,在看待問題的方面上,多方位的去思考,并從別的例子上舉一反三。像其中所講的插值法,在先學(xué)習(xí)了拉格朗日插值法后,對(duì)其理解透徹,了解了其中的原理和思想,再學(xué)習(xí)之后的牛頓插值以及三次樣條插值等等,都很容易的融會(huì)貫通,很容易的就理解了其中所想,他們的中心思想并沒有多大的變化,但是使用的方式卻是不同的,這不僅可以學(xué)習(xí)到其中心內(nèi)容,還可以去學(xué)習(xí)他們的思考方式,每個(gè)不同的思考方式帶來的都是不同的算法。而在看待問題上,不同的思考方式總是可以快速的全方位的去看透徹問題,從而知道如何去解決。
在不斷的學(xué)習(xí)中,知識(shí)在不斷的獲取,能力在不斷的提升,同時(shí)在老師的不懈講解下,我逐漸的發(fā)現(xiàn)數(shù)值分析所涵蓋的知識(shí)面特別的廣泛,而我所需要學(xué)習(xí)的地方也更加的多,自己的不足也在不斷的體現(xiàn),我知道這只是我剛剛接觸到了數(shù)學(xué)的那一角,在以后我還會(huì)接觸到更多,而這求知的欲望也在不停的驅(qū)趕我,學(xué)習(xí)的越多,對(duì)今后的生活才會(huì)有更大的幫助。
計(jì)算132
2013014923
張霖
第三篇:數(shù)值分析學(xué)習(xí)心得體會(huì)
數(shù)值分析學(xué)習(xí)感想
一個(gè)學(xué)期的數(shù)值分析,在老師的帶領(lǐng)下,讓我對(duì)這門課程有了深刻的理解和感悟。這門課程是一個(gè)十分重視算法和原理的學(xué)科,同時(shí)它能夠?qū)⑷说乃季S引入數(shù)學(xué)思考的模式,在處理問題的時(shí)候,可以合理適當(dāng)?shù)奶岢龇桨负图僭O(shè)。他的內(nèi)容貼近實(shí)際,像數(shù)值分析,數(shù)值微分,求解線性方程組的解等,使數(shù)學(xué)理論更加有實(shí)際意義。
數(shù)值分析在給我們的知識(shí)上,有很大一部分都對(duì)我有很大的幫助,讓我的生活和學(xué)習(xí)有了更加方便以及科學(xué)的方法。像第一章就講的誤差,在現(xiàn)實(shí)生活中,也許沒有太過于注意誤差,所以對(duì)誤差的看法有些輕視,但在學(xué)習(xí)了這一章之后,在老師的講解下,了解到這些誤差看似小,實(shí)則影響很大,更如后面所講的余項(xiàng),那些差別總是讓人很容易就出錯(cuò),也許在別的地方?jīng)]有什么,但是在數(shù)學(xué)領(lǐng)域,一個(gè)小的誤差,就很容易有不好的后果,而學(xué)習(xí)了數(shù)值分析的內(nèi)容,很容易就可以將誤差鎖定在一個(gè)很小的范圍內(nèi),在這一范圍內(nèi)再逼近,得出的近似值要準(zhǔn)確的多,而在最開始的計(jì)算中,誤差越小,對(duì)后面的影響越小,這無疑是好的。
數(shù)值分析不只在知識(shí)上傳授了我很多,在思想上也對(duì)我有很大的影響,他給了我很多數(shù)學(xué)思想,很多思考的角度,在看待問題的方面上,多方位的去思考,并從別的例子上舉一反
三。像其中所講的插值法,在先學(xué)習(xí)了拉格朗日插值法后,對(duì)其理解透徹,了解了其中的原理和思想,再學(xué)習(xí)之后的牛頓插值以及三次樣條插值等等,都很容易的融會(huì)貫通,很容易的就理解了其中所想,他們的中心思想并沒有多大的變化,但是使用的方式卻是不同的,這不僅可以學(xué)習(xí)到其中心內(nèi)容,還可以去學(xué)習(xí)他們的思考方式,每個(gè)不同的思考方式帶來的都是不同的算法。而在看待問題上,不同的思考方式總是可以快速的全方位的去看透徹問題,從而知道如何去解決。
在不斷的學(xué)習(xí)中,知識(shí)在不斷的獲取,能力在不斷的提升,同時(shí)在老師的不懈講解下,我逐漸的發(fā)現(xiàn)數(shù)值分析所涵蓋的知識(shí)面特別的廣泛,而我所需要學(xué)習(xí)的地方也更加的多,自己的不足也在不斷的體現(xiàn),我知道這只是我剛剛接觸到了數(shù)學(xué)的那一角,在以后我還會(huì)接觸到更多,而這求知的欲望也在不停的驅(qū)趕我,學(xué)習(xí)的越多,對(duì)今后的生活才會(huì)有更大的幫助。
計(jì)算132 2013014923 張霖篇二:數(shù)值分析學(xué)習(xí)報(bào)告
數(shù)值分析學(xué)習(xí)心得報(bào)告
班級(jí):11級(jí)軟工一班
姓名: * * * 學(xué)號(hào): 20117610*** 指導(dǎo)老師:* * * 學(xué)習(xí)數(shù)值分析的心得體會(huì)
無意中的一次選擇,讓我接觸了數(shù)值分析。
作為這學(xué)期的選修課,我從內(nèi)心深處來講,數(shù)值分析真的有點(diǎn)難。感覺它是在高等數(shù)學(xué)和線性代數(shù)的基礎(chǔ)上,又加深了探討。雖然這節(jié)課很難,我學(xué)的不是很好,但我依然對(duì)它比較感興趣。下面就具體說說我的學(xué)習(xí)體會(huì),讓那些感興趣的同學(xué)有個(gè)參考。學(xué)習(xí)數(shù)值分析,我們首先得知道一個(gè)軟件——matlab。matrix laboratory,即矩陣實(shí)驗(yàn)室,是math work公司推出的一套高效率的數(shù)值計(jì)算和可視化軟件。它是當(dāng)今科學(xué)界最具影響力、也是最具活力的軟件,它起源于矩陣運(yùn)算,并高速發(fā)展成計(jì)算機(jī)語言。它的優(yōu)點(diǎn)是強(qiáng)大的科學(xué)運(yùn)算、靈活的程序設(shè)計(jì)流程、高質(zhì)量的圖形可視化與界面、便捷的與其他程序和語言接口。
根據(jù)上網(wǎng)搜集到的資料,你就會(huì)發(fā)現(xiàn)matlab有許多優(yōu)點(diǎn):
首先,編程簡(jiǎn)單使用方便。到目前為止,我已經(jīng)學(xué)過c語言,機(jī)器語言,java語言,這三個(gè)語言相比,我感覺c語言還是很簡(jiǎn)單的一種編程語言。只要入門就很好掌握,但是想學(xué)精一門語言可不是那么容易的。慚愧的說,到目前為止,我依然處于入門階段,只會(huì)編寫小的簡(jiǎn)單的程序,但是班里依然還是有學(xué)習(xí)好的。c語言是簡(jiǎn)單且容易掌握的,但是,matlab的矩陣和向量操作功能是其他語言無法比擬的。在matlab環(huán)境下,數(shù)組的操作與數(shù)的操作一樣簡(jiǎn)單,基本數(shù)據(jù)單元是不需要指定維數(shù)的,不需要說明數(shù)據(jù)類型的矩陣,而其數(shù)學(xué)表達(dá)式和運(yùn)算規(guī)則與通常的習(xí)慣相同。
其次,函數(shù)庫可任意擴(kuò)充。眾所周知,c語音有著豐富的函數(shù)庫,我們可以隨時(shí)調(diào)用,大大方便了程序員的操作。可是作為it人士的你知道嗎,由于matlab語言庫函數(shù)與用戶文件的形式相同,用戶文件可以像庫函數(shù)一樣隨意調(diào)用,所以用戶可任意擴(kuò)充庫函數(shù)。這是不是很方便呢?
接著,語言簡(jiǎn)單內(nèi)涵豐富。數(shù)值分析所用的語言中,最重要的成分是函數(shù),其一般形式為:function[a,b,c??]=fun(d,e,f??),你也發(fā)現(xiàn)了吧,這樣的語音是不是很容易掌握呢!fun是自定義的函數(shù)名,只要不與庫函數(shù)想重,并且符合字符串書寫規(guī)則即可。
然后是豐富的工具箱。由于matlab 的開放性,許多領(lǐng)域的專家都為matlab 編寫了各種程序工具箱。這些工具箱提供了用戶在特別應(yīng)用領(lǐng)域所需的許多函數(shù),這使得用戶不必花大量的時(shí)間編寫程序就可以直接調(diào)用這些函數(shù),達(dá)到事半功倍的效果。不過你得提前知道這些工具箱,并且會(huì)使用。
最后,我們來說一下matlab的運(yùn)算。利用matlab可以做向量與矩陣的運(yùn)算,與普通加減運(yùn)算幾乎相似。
矩陣乘法用 “ * ” 符號(hào)表示,當(dāng)a矩陣列數(shù)與b矩陣的行數(shù)相等時(shí),二者可以進(jìn)行乘法運(yùn)算,否則是錯(cuò)誤的。如果a或b是標(biāo)量,則a*b返回標(biāo)量a(或b)乘上矩陣b(或a)的每一個(gè)元素所得的矩陣。
對(duì)n×m階矩陣a和p×q階矩陣b,a和b的kronecher乘法運(yùn)算可定義為: kronecker乘法的matlab命令為c=kron(a,b):例如,在matlab中輸入: a=[1 2;3 4];b=[1 3 2;2 4 6];c=kron(a,b)則程序會(huì)給出相應(yīng)的答案 c = 1 3 2 2 6 4 2 4 6 4 8 12 3 9 6 4 12 8 6 12 18 8 16 24 這就充分的考驗(yàn)了我們的實(shí)際動(dòng)手能力,當(dāng)然運(yùn)用一般的計(jì)算方法能算出結(jié)果,但相對(duì)來說沒有用它來運(yùn)算節(jié)省時(shí)間,其他算法又很不方便。上面介紹了matlab的特點(diǎn)與使用方法,接著我們要說它的程序設(shè)計(jì),其實(shí)跟c語言相比,它們的程序設(shè)計(jì)都差不多。
大家都知道,matlab與其它計(jì)算機(jī)語言一樣,也有控制流語句。而控制流語句本身,可使原本簡(jiǎn)單地在命令行中運(yùn)行的一系列命令或函數(shù),組合成為一個(gè)整體—程序,從而提高效率。以下是具體的幾個(gè)例子,看過之后,你會(huì)發(fā)現(xiàn),matlab的控制流語句跟其他計(jì)算機(jī)真的很相似:
(1)for 循環(huán)for循環(huán)的通用形式為:for v=expressionstatementsend其中expression 表達(dá)式是一個(gè)矩陣,因?yàn)閙atlab中都是矩陣,矩陣的列被一個(gè)接一個(gè)的賦值到變量v,然后statements語句運(yùn)行。
(2)while 循環(huán)while循環(huán)的通用形式為:while v=expressionstatementsend當(dāng)expression的所有運(yùn)算為非零值時(shí),statements 語句組將被執(zhí)行。如果判斷條件是向量或矩陣的話,可能需要all 或any函數(shù)作為判斷條件。(3)if和break語句通用形式為:if 條件1,命令組1;elesif條件2,命令組2;??;else命令組k;endbreak%中斷執(zhí)行,用在循環(huán)語句內(nèi)表示跳出循環(huán)。對(duì)于數(shù)值分析這節(jié)課,我的理解是:只要學(xué)習(xí)并掌握好matlab,你就已經(jīng)成功了。因此說,matlab是數(shù)學(xué)分析的基礎(chǔ)。另外,自我感覺這是一個(gè)很好的軟件,其語言簡(jiǎn)便,實(shí)用性強(qiáng)。但是作為一個(gè)做新手,想要學(xué)習(xí)好這門語言,還是比較困難的。在平常的上機(jī)課中,雖然我沒有問過老師,但是我向那些學(xué)習(xí)不錯(cuò)的學(xué)生還是交流了許多,比如說,張**,賈**,還有那個(gè)皮膚白白的女生。跟他們交流,我確實(shí)學(xué)到不少有用的東西。但是,畢竟沒有他們學(xué)得好,總之,在我接觸這門語言的這些天,除了會(huì)畫幾個(gè)簡(jiǎn)單的三維圖形,其他的還是有待提高。在這個(gè)軟件中,雖然有help,但大家不要以為有了這個(gè)就萬事大吉了,反而,從另一個(gè)方面也對(duì)我們大學(xué)生提出了兩個(gè)要求——充實(shí)的課外基礎(chǔ)和良好的英語基礎(chǔ)。在現(xiàn)代,幾乎所有好的軟件都是來自國(guó)外,假如你不會(huì)外語,想學(xué)好是非常難的,即使高考中的英語比重降低了,但我們依舊得學(xué)好。這樣我們才能走得更遠(yuǎn)。
其實(shí)想要學(xué)習(xí)好一們語言,不能只靠老師,靠朋友,關(guān)鍵是自己。每個(gè)人內(nèi)心深處都是有抵觸意識(shí)的,不可能把老師的所有都學(xué)到。其實(shí),我發(fā)現(xiàn)學(xué)習(xí)數(shù)值分析這門課,不光是學(xué)習(xí)一種語言,一些知識(shí),更重要的是學(xué)習(xí)一種方法,一種學(xué)習(xí)軟件的方法,還有學(xué)習(xí)的態(tài)度。
在最后,我想說的是,謝謝郭老師的辛勤付出,我們每個(gè)學(xué)生都會(huì)看在眼里記在心里的,謝謝您。篇三:數(shù)值分析學(xué)習(xí)總結(jié)感想
數(shù)值分析學(xué)習(xí)感想 摘要:數(shù)值分析主要介紹現(xiàn)代科學(xué)計(jì)算中常用的數(shù)值計(jì)算方法及其基本原理,研究并解決數(shù)值問題的近似解,是數(shù)學(xué)理論與計(jì)算機(jī)和實(shí)際問題的有機(jī)結(jié)合。隨著科學(xué)技術(shù)迅速發(fā)展,運(yùn)用數(shù)學(xué)方法解決工程技術(shù)領(lǐng)域中的實(shí)際問題,已經(jīng)得到普遍重視。
作為這學(xué)期的考試課,在我最初接觸這門課時(shí),我感到了很困難,因?yàn)闊o論是高數(shù)還是線性代數(shù)我都放下了很久,而我感覺數(shù)值分析是在高等數(shù)學(xué)和線性代數(shù)的基礎(chǔ)上,又加深了探討。雖然這節(jié)課很難,但是在老師不斷地引導(dǎo)和講授下,我逐漸對(duì)其產(chǎn)生了興趣。在老師的反復(fù)講解下,我發(fā)現(xiàn)我被它吸引了,因?yàn)樗粌H是單純的學(xué)科,還教會(huì)了我許多做人生活的道理。
首先,數(shù)值分析這門課程是一個(gè)十分重視算法和原理的學(xué)科,同時(shí)它能夠?qū)⑷说乃季S引入數(shù)學(xué)思考的模式,在處理問題的時(shí)候,可以合理適當(dāng)?shù)奶岢龇桨负图僭O(shè)。他的內(nèi)容貼近實(shí)際,像數(shù)值分析,數(shù)值微分,求解線性方程組的解等,使數(shù)學(xué)理論更加有實(shí)際意義。
數(shù)值分析在給我們的知識(shí)上,有很大一部分都對(duì)我有很大的幫助,讓我的生活和學(xué)習(xí)有了更加方便以及科學(xué)的方法。像第一章就講的誤差,在現(xiàn)實(shí)生活中,也許沒有太過于注意誤差,所以對(duì)誤差的看法有些輕視,但在學(xué)習(xí)了這一章之后,在老師的講解下,了解到這些誤差看似小,實(shí)則影響很大,更如后面所講的余項(xiàng),那些差別總是讓人很容易就出錯(cuò),也許在別的地方?jīng)]有什么,但是在數(shù)學(xué)領(lǐng)域,一個(gè)小的誤差,就會(huì)有很大的差別,而學(xué)習(xí)了數(shù)值分析的內(nèi)容,很容易就可以將誤差鎖定在一個(gè)很小的范圍內(nèi),在這一范圍內(nèi)再逼近,得出的近似值要準(zhǔn)確的多,而在最開始的計(jì)算中,誤差越小,對(duì)后面的影響越小,這無疑是好的。數(shù)值分析中,“以點(diǎn)帶面”的思想也深深影響了我。這里的“點(diǎn)”是根本,是主線。在第二章學(xué)習(xí)插值法的時(shí)候是以拉格朗日插值、牛頓插值為主線,然后逐漸展開介紹艾爾米特插值、分段低次插值和三次樣條插值。在學(xué)習(xí)中只要將研究拉格朗日插值和牛頓插值的基本原理、基本方法理解透徹,其他的插值方法就基本掌握了。第四章處理數(shù)值積分和數(shù)值微分的基本方法是逼近法,只要將函數(shù)逼近的基本思想理解好,掌握起來就會(huì)得心應(yīng)手;第六第七章是以迭代法為主線來求解線性方程組和非線性方程組的。在學(xué)習(xí)過程組只要將迭代法的相關(guān)原理掌
握好,便能掌握第六第七章。總的來數(shù),數(shù)值分析所涉及到數(shù)學(xué)中很多學(xué)科的知識(shí),內(nèi)容比較復(fù)雜,因此在學(xué)習(xí)過程中一定要將基本原理、基本算法理解透,然后再逐步推廣。同樣在生活中每件事情都有它的主線,只要抓住這條主線再難的事情也會(huì)迎刃而解。
還比如“等價(jià)轉(zhuǎn)化”的思想,這里的“等價(jià)”不是完全意義上的“等價(jià)”,是指在轉(zhuǎn)化前后轉(zhuǎn)化的主體主要特征值沒有變。插值法的思想就是抓住已知函數(shù)或者已知點(diǎn)的幾個(gè)主要特征,用另一個(gè)具備主要特征的簡(jiǎn)單函數(shù)來代替原函數(shù)或擬合已知數(shù)據(jù)點(diǎn)。實(shí)際生活中也有很多類似情況,已知事件或者面臨的情況往往是復(fù)雜的,常常不能直接用數(shù)學(xué)方法直接研究,我們可以做的就是抓住已經(jīng)事件的主要特征轉(zhuǎn)化為數(shù)學(xué)模型來建立。
在不斷的學(xué)習(xí)中,知識(shí)在不斷的獲取,能力在不斷的提升,同時(shí)在老師的耐心講解下,我逐漸的發(fā)現(xiàn)數(shù)值分析所涵蓋的知識(shí)面特別的廣泛,而我所需要學(xué)習(xí)的地方也更加的多,自己的不足也在不斷的體現(xiàn),我知道這只是我剛剛接觸到了數(shù)學(xué)的那一角,在以后我還會(huì)接觸到更多,而這求知的欲望也在不停的驅(qū)趕我,學(xué)習(xí)的越多,對(duì)今后的生活才會(huì)有更大的幫助。
希望在將來,通過反復(fù)的實(shí)踐能加深我的理解,在明年的這個(gè)時(shí)候我能有更多的感悟。同時(shí),因?yàn)槭逯艿膶W(xué)習(xí)時(shí)間太短加上我的基礎(chǔ)薄弱,我決定明年繼續(xù)來旁聽老師的課程,達(dá)到進(jìn)一步學(xué)習(xí),加深理解的目的。
數(shù)值分析課程論文:
數(shù)值分析學(xué)習(xí)心得感悟
姓名:崔俊毅
學(xué)號(hào):2015210211 專業(yè):防災(zāi)減災(zāi)專碩
院系:土木工程學(xué)院篇四:數(shù)值分析學(xué)習(xí)報(bào)告
數(shù)值分析學(xué)習(xí)心得報(bào)告
班級(jí):姓名:
學(xué)號(hào): ************ *** *********** 學(xué)習(xí)數(shù)值分析的心得體會(huì)
數(shù)值分析是一門利用計(jì)算機(jī)求解數(shù)學(xué)問題數(shù)值解的課程,有很強(qiáng)的理論性和實(shí)踐性,無意中的一次選擇,讓我接觸了數(shù)值分析。隨著科學(xué)技術(shù)的發(fā)展,提出了大量復(fù)雜的數(shù)值計(jì)算問題,在建立電子計(jì)算機(jī)成為數(shù)值計(jì)算的主要工具以后,它以數(shù)字計(jì)算機(jī)求解數(shù)學(xué)問題的理論和方法為研究對(duì)象。有可靠的理論分析,要有數(shù)值實(shí)驗(yàn),并對(duì)計(jì)算的結(jié)果進(jìn)行誤差分析。數(shù)值分析的主要內(nèi)容包括插值法,函數(shù)逼近,曲線擬和,數(shù)值積分,數(shù)值微分,解線性方程組的直接方法,解線性方程組的迭代法,非線性方程求根,常微分方程的數(shù)值解法。
作為這學(xué)期的選修課,我從內(nèi)心深處來講,數(shù)值分析真的有點(diǎn)難。感覺它是在高等數(shù)學(xué)和線性代數(shù)的基礎(chǔ)上,又加深了探討。雖然這節(jié)課很難,我學(xué)的不是很好,但我依然對(duì)它比較感興趣。下面就具體說說我的學(xué)習(xí)體會(huì),讓那些感興趣的同學(xué)有個(gè)參考。學(xué)習(xí)數(shù)值分析,我們首先得知道一個(gè)軟件——matlab。matrix laboratory,即矩陣實(shí)驗(yàn)室,是math work公司推出的一套高效率的數(shù)值計(jì)算和可視化軟件。它是當(dāng)今科學(xué)界最具影響力、也是最具活力的軟件,它起源于矩陣運(yùn)算,并高速發(fā)展成計(jì)算機(jī)語言。它的優(yōu)點(diǎn)是強(qiáng)大的科學(xué)運(yùn)算、靈活的程序設(shè)計(jì)流程、高質(zhì)量的圖形可視化與界面、便捷的與其他程序和語言接口。
根據(jù)上網(wǎng)搜集到的資料,你就會(huì)發(fā)現(xiàn)matlab有許多優(yōu)點(diǎn): 首先,編程簡(jiǎn)單使用方便。到目前為止,我已經(jīng)學(xué)過c語言,機(jī)器語言,java語言,這三個(gè)語言相比,我感覺c語言還是很簡(jiǎn)單的一種編程語言。只要入門就很好掌握,但是想學(xué)精一門語言可不是那么容易的。慚愧的說,到目前為止,我依然處于入門階段,只會(huì)編寫小的簡(jiǎn)單的程序,但是班里依然還是有學(xué)習(xí)好的。c語言是簡(jiǎn)單且容易掌握的,但是,matlab的矩陣和向量操作功能是其他語言無法比擬的。在matlab環(huán)境下,數(shù)組的操作與數(shù)的操作一樣簡(jiǎn)單,基本數(shù)據(jù)單元是不需要指定維數(shù)的,不需要說明數(shù)據(jù)類型的矩陣,而其數(shù)學(xué)表達(dá)式和運(yùn)
算規(guī)則與通常的習(xí)慣相同。
其次,函數(shù)庫可任意擴(kuò)充。眾所周知,c語音有著豐富的函數(shù)庫,我們可以隨時(shí)調(diào)用,大大方便了程序員的操作。可是作為it人士的你知道嗎,由于matlab語言庫函數(shù)與用戶文件的形式相同,用戶文件可以像庫函數(shù)一樣隨意調(diào)用,所以用戶可任意擴(kuò)充庫函數(shù)。這是不是很方便呢?
接著,語言簡(jiǎn)單內(nèi)涵豐富。數(shù)值分析所用的語言中,最重要的成分是函數(shù),其一般形式為:function[a,b,c??]=fun(d,e,f??),你也發(fā)現(xiàn)了吧,這樣的語音是不是很容易掌握呢!fun是自定義的函數(shù)名,只要不與庫函數(shù)想重,并且符合字符串書寫規(guī)則即可。
然后是豐富的工具箱。由于matlab 的開放性,許多領(lǐng)域的專家都為matlab 編寫了各種程序工具箱。這些工具箱提供了用戶在特別應(yīng)用領(lǐng)域所需的許多函數(shù),這使得用戶不必花大量的時(shí)間編寫程序就可以直接調(diào)用這些函數(shù),達(dá)到事半功倍的效果。不過你得提前知道這些工具箱,并且會(huì)使用。
最后,我們來說一下matlab的運(yùn)算。利用matlab可以做向量與矩陣的運(yùn)算,與普通加減運(yùn)算幾乎相似。
矩陣乘法用 “ * ” 符號(hào)表示,當(dāng)a矩陣列數(shù)與b矩陣的行數(shù)相等時(shí),二者可以進(jìn)行乘法運(yùn)算,否則是錯(cuò)誤的。如果a或b是標(biāo)量,則a*b返回標(biāo)量a(或b)乘上矩陣b(或a)的每一個(gè)元素所得的矩陣。
對(duì)n×m階矩陣a和p×q階矩陣b,a和b的kronecher乘法運(yùn)算可定義為: kronecker乘法的matlab命令為c=kron(a,b):例如,在matlab中輸入: a=[1 2;3 4];b=[1 3 2;2 4 6];c=kron(a,b)則程序會(huì)給出相應(yīng)的答案 c = 1 3 2 2 6 4 2 4 6 4 8 12 3 9 6 4 12 8 6 12 18 8 16 24 這就充分的考驗(yàn)了我們的實(shí)際動(dòng)手能力,當(dāng)然運(yùn)用一般的計(jì)算方法能算出結(jié)果,但相對(duì)來說沒有用它來運(yùn)算節(jié)省時(shí)間,其他算法又很不方便。上面介紹了matlab的特點(diǎn)與使用方法,接著我們要說它的程序設(shè)計(jì),其實(shí)跟c語言相比,它們的程序設(shè)計(jì)都差不多。
大家都知道,matlab與其它計(jì)算機(jī)語言一樣,也有控制流語句。而控制流語句本身,可使原本簡(jiǎn)單地在命令行中運(yùn)行的一系列命令或函數(shù),組合成為一個(gè)整體—程序,從而提高效率。以下是具體的幾個(gè)例子,看過之后,你會(huì)發(fā)現(xiàn),matlab的控制流語句跟其他計(jì)算機(jī)真的很相似:
(1)for 循環(huán)for循環(huán)的通用形式為:for v=expressionstatementsend其中expression 表達(dá)式是一個(gè)矩陣,因?yàn)閙atlab中都是矩陣,矩陣的列被一個(gè)接一個(gè)的賦值到變量v,然后statements語句運(yùn)行。
(2)while 循環(huán)while循環(huán)的通用形式為:while v=expressionstatementsend當(dāng)expression的所有運(yùn)算為非零值時(shí),statements 語句組將被執(zhí)行。如果判斷條件是向量或矩陣的話,可能需要all 或any函數(shù)作為判斷條件。
(3)if和break語句通用形式為:if 條件1,命令組1;elesif條件2,命令組2;??;else命令組k;endbreak%中斷執(zhí)行,用在循環(huán)語句內(nèi)表示跳出循環(huán)。對(duì)于數(shù)值分析這節(jié)課,我的理解是:只要學(xué)習(xí)并掌握好matlab,你就已經(jīng)成功了。因此說,matlab是數(shù)學(xué)分析的基礎(chǔ)。另外,自我感覺這是一個(gè)很好的軟件,其語言簡(jiǎn)便,實(shí)用性強(qiáng)。但是作為一個(gè)做新手,想要學(xué)習(xí)好這門語言,還是比較困難的。在平常的上機(jī)課中,雖然我沒有問過老師,但是我向那些學(xué)習(xí)不錯(cuò)的學(xué)生還是交流了許多,跟他們交流,我確實(shí)學(xué)到不少有用的東西。但是,畢竟沒有他們學(xué)得好,總之,在我接觸這門語言的這些天,除了會(huì)畫幾個(gè)簡(jiǎn)單的三維圖形,其他的還是有待提高。在這個(gè)軟件中,雖然有help,但大家不要以為有了這個(gè)就萬事大吉了,反而,從另一個(gè)方面也對(duì)我們大學(xué)生提出了兩個(gè)要求——充實(shí)的課外基礎(chǔ)和良好的英語基礎(chǔ)。在現(xiàn)代,幾乎所有好的軟件都是來自國(guó)外,假如你不會(huì)外語,想學(xué)好是非常難的,即使高考中的英語比重降低了,但我們依舊得學(xué)好。這樣我們才能走得更遠(yuǎn)。其實(shí)想要學(xué)習(xí)好一們語言,不能只靠老師,靠朋友,關(guān)鍵是自己。每個(gè)人內(nèi)心深處都是有抵觸意識(shí)的,不可能把老師的所有都學(xué)到。其實(shí),我發(fā)現(xiàn)學(xué)習(xí)數(shù)值分析這門課,不光是學(xué)習(xí)一種語言,一些知識(shí),更重要的是學(xué)習(xí)一種方法,一種學(xué)習(xí)軟件的方法,還有學(xué)習(xí)的態(tài)度。
數(shù)值分析是研究分析用計(jì)算機(jī)求解數(shù)學(xué)計(jì)算問題的數(shù)值計(jì)算方法及其理論的學(xué)科,是數(shù)學(xué)的一個(gè)分支,它以數(shù)字計(jì)算機(jī)求解數(shù)學(xué)問題的理論和方法為研究對(duì)象。在科學(xué)研究和工程技術(shù)中有許多問題可歸結(jié)為求解方程組的問題。本文主要討論了插值法求函數(shù),解線性方程組的求解方法,非線性方程組的解法及微分方程的解法,并通過在電流回路和單晶硅提拉過程中分析應(yīng)用。進(jìn)一步體現(xiàn)了數(shù)值分析的廣泛應(yīng)用,實(shí)際上由于誤差的存在,一些問題只能求得近似解。對(duì)于良態(tài)方程組,只要求解方法穩(wěn)定,即可得到比較滿意的計(jì)算結(jié)果。但對(duì)于病態(tài)方程組,即使使用穩(wěn)定性好的算法求解也未必理想,還需進(jìn)一步的研究。總之,數(shù)值分析可以通過計(jì)算方法進(jìn)行一種比較完善的構(gòu)造,使之更普遍化,能夠有舉一反三的思想,能夠解決一些實(shí)際中難解的問題,應(yīng)用到各個(gè)領(lǐng)域。
在最后,我想說的是,謝謝老師的辛勤付出,我們每個(gè)學(xué)生都會(huì)看在眼里記在心里的,謝謝您。篇五:數(shù)值分析期末總結(jié)論文,程序界面 數(shù)值計(jì)算方法論文
論文名稱:數(shù)值計(jì)算方法期末總結(jié)
學(xué) 號(hào):
姓 名:完成時(shí)間:
摘要:數(shù)值計(jì)算方法是數(shù)學(xué)的一個(gè)重要分支,以用計(jì)算機(jī)求解數(shù)學(xué)問題的理論和方法為研究對(duì)象。本文是我對(duì)本學(xué)期數(shù)值分析這門課程中所學(xué)到的內(nèi)容以及所作的工作的總結(jié)。通過一學(xué)期的學(xué)習(xí),我深入學(xué)習(xí)了線性方程組的解法,非線性方程的求根方法,矩陣特征值與特征向量的計(jì)算,函數(shù)的插值方法,最佳平方逼近,數(shù)值積分與數(shù)值微分,常微分方程初值問題的數(shù)值解法。通過陶老師課堂上的講解和課下的上機(jī)訓(xùn)練,對(duì)以上各個(gè)章節(jié)的算法有了更深刻的體會(huì)。最后做了程序的演示界面,使得程序看起來清晰明了,便于查看與修改。通過本學(xué)期的學(xué)習(xí)。
關(guān)鍵詞:數(shù)值計(jì)算方法、演示界面
第一章 前言
隨著電子計(jì)算機(jī)的普及與發(fā)展,科學(xué)計(jì)算已成為現(xiàn)代科學(xué)的重要組成部分,因而數(shù)值計(jì)算方法的內(nèi)容也愈來愈廣泛和豐富。通過本學(xué)期的學(xué)習(xí),主要掌握了一些數(shù)值方法的基本原理、具體算法,并通過編程在計(jì)算機(jī)上來實(shí)現(xiàn)這些算法。
第二章 基本概念 2.1算法
算法是指由基本算術(shù)運(yùn)算及運(yùn)算順序的規(guī)定構(gòu)成的完整的解題步驟。算法可以使用框圖、算法語言、數(shù)學(xué)語言、自然語言來進(jìn)行描述。具有的特征:正確性、有窮性、適用范圍廣、運(yùn)算工作量少、使用資源少、邏輯結(jié)構(gòu)簡(jiǎn)單、便于實(shí)現(xiàn)、計(jì)算結(jié)果可靠。2.2 誤差
計(jì)算機(jī)的計(jì)算結(jié)果通常是近似的,因此算法必有誤差,并且應(yīng)能估計(jì)誤差。誤差是指近似值與真正值之差。絕對(duì)誤差是指近似值與真正值之差或差的絕對(duì)值;相對(duì)誤差:是指近似值與真正值之比或比的絕對(duì)值。誤差來源見表2.1 表
第三章 泛函分析 2.1泛函分析概要
泛函分析(functional analysis)是研究“函數(shù)的函數(shù)”、函數(shù)空間和它們之間變換(映射)的一門較新的數(shù)學(xué)分支,隸屬分析數(shù)學(xué)。它以各種學(xué)科為具體背景,在集合的基礎(chǔ)上,把客觀世界中的研究對(duì)象抽象為元素和空間。如:距離空間,賦范線性空間,內(nèi)積空間。2.2 范數(shù)
范數(shù),是具有“長(zhǎng)度”概念的函數(shù)。在線性代數(shù)、泛函分析及相關(guān)的數(shù)學(xué)領(lǐng)
域,泛函是一個(gè)函數(shù),其為矢量空間內(nèi)的所有矢量賦予非零的正長(zhǎng)度或大小。
這里以cn空間為例,rn空間類似。最常用的范數(shù)就是p-范數(shù)。若,那么
當(dāng)p取1,2,∞的時(shí)候分別是以下幾種最簡(jiǎn)單的情形: 1-范數(shù):║x║1=│x1│+│x2│+?+│xn│ 2-范數(shù):║x║2=(│x1│2+│x2│2+?+│xn│2)1/2 ∞-范數(shù):║x║∞=max(│x1│,│x2│,?,│xn│)
其中2-范數(shù)就是通常意義下的距離。
對(duì)于這些范數(shù)有以下不等式:║x║∞ ≤ ║x║2 ≤ ║x║1 ≤ n1/2║x║2 ≤ n║x║∞
另外,若p和q是赫德爾(hölder)共軛指標(biāo),即1/p+1/q=1,那么有赫德爾不等式:
|
一般來講矩陣范數(shù)除了正定性,齊次性和三角不等式之外,還規(guī)定其必須滿足相容性:║xy║≤║x║║y║。所以矩陣范數(shù)通常也稱為相容范數(shù)。
如果║·║α是相容范數(shù),且任何滿足║·║β≤║·║α的范數(shù)║·║β都不是相容范數(shù),那么║·║α稱為極小范數(shù)。對(duì)于n階實(shí)方陣(或復(fù)方陣)全體上的任何一個(gè)范數(shù)║·║,總存在唯一的實(shí)數(shù)k>0,使得k║·║是極小范數(shù)。
注:如果不考慮相容性,那么矩陣范數(shù)和向量范數(shù)就沒有區(qū)別,因?yàn)閙xn矩陣全體和mn維向量空間同構(gòu)。引入相容性主要是為了保持矩陣作為線性算子的特征,這一點(diǎn)和算子范數(shù)的相容性一致,并且可以得到mincowski定理以外的信息。
第四章 算法總結(jié)
本學(xué)期講解過的主要算法列舉如下:線性方程組的解法(高斯消元法,列主消元法,doolittle分解法,追趕法,ldl分解法,jacobi分解法,seidel迭代法);非線性方程的求根方法(二分法,簡(jiǎn)單迭代法,newton迭代法,newton+下山因子,newton迭代法2,newton非線性方程);矩陣特征值與特征向量的計(jì)算(householder矩陣,反冪法,冪法,qr分解);函數(shù)的插值方法(三次樣條插值,lagrange插值法,newton差商插值法);最佳平方逼近(chebyshev最小二乘法,曲線擬合最小二乘法);數(shù)值積分與數(shù)值微分(simpson求積分式算法,romberg算法,外推法);常微分方程初值問題的數(shù)值解法(歐拉改進(jìn)法、龍格庫塔法和修正的adams法)。下面對(duì)主要算法進(jìn)行分析。4.1線性方程組的解法 本章學(xué)習(xí)了一些求解線性方程組的常用方法,其中g(shù)auss消元法,列主元消元法,lu分解法,追趕法和ldl’分解法都是解線性方程組的直接方法;而jacobi迭代法和sor法則是解線性方程組的基本迭代法。求解線性方程組時(shí),應(yīng)該注意方程組的性態(tài),對(duì)病態(tài)方程組使用通常求解方程組的方法將導(dǎo)致錯(cuò)誤。迭代求精法可用于求解某些病態(tài)方程。4.1.1高斯列主元lu分解法求解線性方程組
高斯消元法和lu分解法是直接法求解線性方程組中的兩種方法。其中高斯消元法的基本思想是將線性方程組(1.1)通過消元,逐步化為同解的三角形方程組,然后用回代法解出n個(gè)解。高斯列主元消元法則是在高斯消元法的基礎(chǔ)上提(k?1)(k?1)a?0akkkk出的先選主元再消元的方法,避免了時(shí)消元無法進(jìn)行或者是當(dāng)?shù)慕^(k?1)a(i?k?1,k?2,ik對(duì)值與其下方的元素,n)的絕對(duì)值之比很小時(shí),引起計(jì)算機(jī)
上溢或產(chǎn)生很大的舍入誤差而導(dǎo)致所求出的解失真的問題。lu分解法是將矩陣a用一個(gè)下三角矩陣和一個(gè)上三角矩陣之積來表示,即a?lu,然后由a?lu,ax?b,得lux?b,將線性方程組的求解化為對(duì)兩個(gè)三角形方程組ly?b和ux?y的求解,由此可解出線性方程組(1.1)的n個(gè)解x1,x2,xn。這兩種求解線性方程組的方法在處理單個(gè)線性方程組時(shí)沒有差別,只是方法的不同,但在處理系數(shù)矩陣a相同,而右端項(xiàng)不同的一組線性方程組時(shí),lu分解法就有明顯的優(yōu)勢(shì),因?yàn)樗菍⑾禂?shù)矩陣a和右端項(xiàng)b分開處理的,這樣就可以只進(jìn)行一次分解。例如,求解線性方程組ax?bi,i?1,2,m,用高斯消元法求解的計(jì)算量 1313mnn?mn2 大約為3,而用lu分解求解的計(jì)算量約為3,后者計(jì)算量顯然小很多。但是lu分解法同樣有可能由于ujj的絕對(duì)值很小而引起計(jì)算機(jī)上溢或產(chǎn)生很大的舍入誤差而導(dǎo)致所求出的解失真。因此提出了結(jié)合高斯列主元消元的lu分解法。
我們采用的計(jì)算方法是先將a矩陣進(jìn)行高斯列主元消元,然后再計(jì)算相應(yīng)的l矩陣和u矩陣(u矩陣就是經(jīng)過n-1步消元后的a矩陣)。但要注意,第k步消元時(shí)會(huì)產(chǎn)生mik(i?k?1,k?2,n),從而可以得到l矩陣的第k列元素,但在下一步消元前選取列主元時(shí)可能會(huì)交換方程的位置,因此與方程位置對(duì)應(yīng)的l矩陣中的元素也要交換位置。4.2非線性方程組的求根方法
本章學(xué)習(xí)的二分法簡(jiǎn)單迭代法、newton迭代法等方法,代表著求解非線性方程所采用的兩類方法。大范圍收斂方法的初值x0選取沒有多少限制,只要在含根區(qū)間任選其一即可,二分法就是這類方法。局部收斂法要求x0要充分靠近根x*才能保證收斂,以簡(jiǎn)單迭代法為基礎(chǔ),newton迭代法為代表的各類迭代法都屬這類方法。4.2.1newton迭代法
牛頓迭代法的構(gòu)造過程是這樣的:設(shè)x0是f(x)?0的一個(gè)近似根,將f(x)在 f(x0)f(x)?f(x0)?f(x0)(x?x0)?(x?x0)2?x0處作taylor展開得2!,若取其
x?x?f(x)/f(x0),然后再對(duì)x1做f(x)100前兩項(xiàng)來近似代替,得近似方程的根 f上述同樣處理,繼續(xù)下去,一般若(xk)?0,則可以構(gòu)造出迭代格式 xk?1?xk?f(xk)f(xk)此格式稱為牛頓迭代格式,用它來求解f(x)?0的方法稱為牛頓迭代法。牛頓迭代法的幾何意義是用f(x)在xk處的切線與x軸得交點(diǎn)作為下一個(gè)迭代點(diǎn)xk?1的。由于這一特點(diǎn),牛頓迭代法也常稱為切線法。
牛頓迭代法雖然收斂很快,但它通常過于依賴初值x0的選取,如果x0選擇不當(dāng),將導(dǎo)致迭代發(fā)散或產(chǎn)生無限循環(huán)。
第四篇:清華大學(xué)數(shù)值分析實(shí)驗(yàn)報(bào)告
數(shù)值分析實(shí)驗(yàn)報(bào)告
一、實(shí)驗(yàn)3.1
題目:
考慮線性方程組,,編制一個(gè)能自動(dòng)選取主元,又能手動(dòng)選取主元的求解線性代數(shù)方程組的Gauss消去過程。
(1)取矩陣,則方程有解。取計(jì)算矩陣的條件數(shù)。分別用順序Gauss消元、列主元Gauss消元和完全選主元Gauss消元方法求解,結(jié)果如何?
(2)現(xiàn)選擇程序中手動(dòng)選取主元的功能,每步消去過程都選取模最小或按模盡可能小的元素作為主元進(jìn)行消元,觀察并記錄計(jì)算結(jié)果,若每步消去過程總選取按模最大的元素作為主元,結(jié)果又如何?分析實(shí)驗(yàn)的結(jié)果。
(3)取矩陣階數(shù)n=20或者更大,重復(fù)上述實(shí)驗(yàn)過程,觀察記錄并分析不同的問題及消去過程中選擇不同的主元時(shí)計(jì)算結(jié)果的差異,說明主元素的選取在消去過程中的作用。
(4)選取其他你感興趣的問題或者隨機(jī)生成的矩陣,計(jì)算其條件數(shù),重復(fù)上述實(shí)驗(yàn),觀察記錄并分析實(shí)驗(yàn)的結(jié)果。
1.算法介紹
首先,分析各種算法消去過程的計(jì)算公式,順序高斯消去法:
第k步消去中,設(shè)增廣矩陣中的元素(若等于零則可以判定系數(shù)矩陣為奇異矩陣,停止計(jì)算),則對(duì)k行以下各行計(jì)算,分別用乘以增廣矩陣的第行并加到第行,則可將增廣矩陣中第列中以下的元素消為零;重復(fù)此方法,從第1步進(jìn)行到第n-1步,則可以得到最終的增廣矩陣,即;
列主元高斯消去法:
第k步消去中,在增廣矩陣中的子方陣中,選取使得,當(dāng)時(shí),對(duì)中第行與第行交換,然后按照和順序消去法相同的步驟進(jìn)行。重復(fù)此方法,從第1步進(jìn)行第n-1步,就可以得到最終的增廣矩陣,即;
完全主元高斯消去法:
第k步消去中,在增廣矩陣中對(duì)應(yīng)的子方陣中,選取使得,若或,則對(duì)中第行與第行、第列與第列交換,然后按照和順序消去法相同的步驟進(jìn)行即可。重復(fù)此方法,從第1步進(jìn)行到第n-1步,就可以得到最終的增廣矩陣,即;
接下來,分析回代過程求解的公式,容易看出,對(duì)上述任一種消元法,均有以下計(jì)算公式:
2.實(shí)驗(yàn)程序的設(shè)計(jì)
一、輸入實(shí)驗(yàn)要求及初始條件;
二、計(jì)算系數(shù)矩陣A的條件數(shù)及方程組的理論解;
三、對(duì)各不同方法編程計(jì)算,并輸出最終計(jì)算結(jié)果。
3.計(jì)算結(jié)果及分析
(1)
先計(jì)算系數(shù)矩陣的條件數(shù),結(jié)果如下,可知系數(shù)矩陣的條件數(shù)較大,故此問題屬于病態(tài)問題,b或A的擾動(dòng)都可能引起解的較大誤差;
采用順序高斯消去法,計(jì)算結(jié)果為:
最終解為x=(1.***,1.***,1.***,1.***,0.***,1.***,0.***,1.***,0.***,1.***)T
使用無窮范數(shù)衡量誤差,得到=2.842***1e-14,可以發(fā)現(xiàn),采用順序高斯消元法求得的解與精確解之間誤差較小。通過進(jìn)一步觀察,可以發(fā)現(xiàn),按照順序高斯消去法計(jì)算時(shí),其選取的主元值和矩陣中其他元素大小相近,因此順序高斯消去法方式并沒有對(duì)結(jié)果造成特別大的影響。
若采用列主元高斯消元法,則結(jié)果為:
最終解為x=(1.***,1.***,1.***,1.***,1.***,1.***,1.***,1.***,1.***,1.***)T
同樣使用無窮范數(shù)衡量誤差,有=0;
若使用完全主元高斯消元法,則結(jié)果為
最終解x=(1.***,1.***,1.***,1.***,1.***,1.***,1.***,1.***,1.***,1.***)T
同樣使用無窮范數(shù)衡量誤差,有=0;
(2)
若每步都選取模最小或盡可能小的元素為主元,則計(jì)算結(jié)果為
最終解x=(1.***
1.***
1.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***)T
使用無窮范數(shù)衡量誤差,有為2.842***1e-14;而完全主元消去法的誤差為=0。
從(1)和(2)的實(shí)驗(yàn)結(jié)果可以發(fā)現(xiàn),列主元消去法和完全主元消去法都得到了精確解,而順序高斯消去法和以模盡量小的元素為主元的消去法沒有得到精確解。在后兩種消去法中,由于程序計(jì)算時(shí)的舍入誤差,對(duì)最終結(jié)果產(chǎn)生了一定的影響,但由于方程組的維度較低,并且元素之間相差不大,所以誤差仍比較小。
為進(jìn)一步分析,計(jì)算上述4種方法每步選取的主元數(shù)值,并列表進(jìn)行比較,結(jié)果如下:
第n次消元
順序
列主元
完全主元
模最小
6.***
6.***
4.***
4.***
4.***
4.***
4.***3333
4.***3333
4.***
4.***
4.***
4.***
4.0***063
4.0***063
4.***
4.***
4.0039***
4.0039***
4.***
0.0***469
0.0***469
4.***
從上表可以發(fā)現(xiàn),對(duì)這個(gè)方程組而言,順序高斯消去選取的主元恰好事模盡量小的元素,而由于列主元和完全主元選取的元素為8,與4在數(shù)量級(jí)上差別小,所以計(jì)算過程中的累積誤差也較小,最終4種方法的輸出結(jié)果均較為精確。
在這里,具體解釋一下順序法與模最小法的計(jì)算結(jié)果完全一致的原因。該矩陣在消元過程中,每次選取主元的一列只有兩個(gè)非零元素,對(duì)角線上的元素為4左右,而其正下方的元素為8,該列其余位置的元素均為0。在這樣的情況下,默認(rèn)的主元也就是該列最小的主元,因此兩種方法所得到的計(jì)算結(jié)果是一致的。
理論上說,完全高斯消去法的誤差最小,其次是列主元高斯消去法,而選取模最小的元素作為主元時(shí)的誤差最大,但是由于方程組的特殊性(元素相差不大并且維度不高),這個(gè)理論現(xiàn)象在這里并沒有充分體現(xiàn)出來。
(3)
時(shí),重復(fù)上述實(shí)驗(yàn)過程,各種方法的計(jì)算結(jié)果如下所示,在這里,仍采用無窮范數(shù)衡量絕對(duì)誤差。
順序高斯消去法
列主元高斯消去
完全主元高斯消去
選取模最小或盡可能小元素作為主元消去
X
1.***
1.***
1.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***
1.***
1.***
1.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***
2.***e-11
0
0
2.***e-11
可以看出,此時(shí)列主元和完全主元的計(jì)算結(jié)果仍為精確值,而順序高斯消去和模盡可能小方法仍然產(chǎn)生了一定的誤差,并且兩者的誤差一致。與n=10時(shí)候的誤差比相比,n=20時(shí)的誤差增長(zhǎng)了大約1000倍,這是由于計(jì)算過程中舍入誤差的不斷累積所致。所以,如果進(jìn)一步增加矩陣的維數(shù),應(yīng)該可以看出更明顯的現(xiàn)象。
(4)
不同矩陣維度下的誤差如下,在這里,為方便起見,選取2-條件數(shù)對(duì)不同維度的系數(shù)矩陣進(jìn)行比較。
維度
條件數(shù)
順序消去
列主元
完全主元
模盡量小
1.7e+3
2.84e-14
0
0
2.84e-14
1.8e+6
2.91e-11
0
0
2.91e-11
5.7e+7
9.31e-10
0
0
9.31e-10
1.8e+9
2.98e-08
0
0
2.98e-08
1.9e+12
3.05e-05
0
0
3.05e-05
3.8e+16
3.28e+04
3.88e-12
3.88e-12
3.28e+04
8.5e+16
3.52e+13
4.2e-3
4.2e-3
3.52e+13
從上表可以看出,隨著維度的增加,不同方法對(duì)計(jì)算誤差的影響逐漸體現(xiàn),并且增長(zhǎng)較快,這是由于舍入誤差逐步累計(jì)而造成的。不過,方法二與方法三在維度小于40的情況下都得到了精確解,這兩種方法的累計(jì)誤差遠(yuǎn)比方法一和方法四慢;同樣地,出于與前面相同的原因,方法一與方法四的計(jì)算結(jié)果保持一致,方法二與方法三的計(jì)算結(jié)果保持一致。
4.結(jié)論
本文矩陣中的元素差別不大,模最大和模最小的元素并沒有數(shù)量級(jí)上的差異,因此,不同的主元選取方式對(duì)計(jì)算結(jié)果的影響在維度較低的情況下并不明顯,四種方法都足夠精確。
對(duì)比四種方法,可以發(fā)現(xiàn)采用列主元高斯消去或者完全主元高斯消去法,可以盡量抑制誤差,算法最為精確。不過,對(duì)于低階的矩陣來說,四種方法求解出來的結(jié)果誤差均較小。
另外,由于完全選主元方法在選主元的過程中計(jì)算量較大,而且可以發(fā)現(xiàn)列主元法已經(jīng)可以達(dá)到很高的精確程度,因而在實(shí)際計(jì)算中可以選用列主元法進(jìn)行計(jì)算。
附錄:程序代碼
clear
clc;
format
long;
%方法選擇
n=input('矩陣A階數(shù):n=');
disp('選取求解方式');
disp('1
順序Gauss消元法,2
列主元Gauss消元法,3
完全選主元Gauss消元法,4
模最小或近可能小的元素作為主元');
a=input('求解方式序號(hào):');
%賦值A(chǔ)和b
A=zeros(n,n);
b=zeros(n,1);
for
i=1:n
A(i,i)=6;
if
i>1
A(i,i-1)=8;
end
if
i A(i,i+1)=1; end end for i=1:n for j=1:n b(i)=b(i)+A(i,j); end end disp('給定系數(shù)矩陣為:'); A disp('右端向量為:'); b %求條件數(shù)及理論解 disp('線性方程組的精確解:'); X=(A\b)' fprintf('矩陣A的1-條件數(shù): %f \n',cond(A,1)); fprintf('矩陣A的2-條件數(shù): %f \n',cond(A)); fprintf('矩陣A的無窮-條件數(shù): %f \n',cond(A,inf)); %順序Gauss消元法 if a==1 A1=A;b1=b; for k=1:n if A1(k,k)==0 disp('主元為零,順序Gauss消元法無法進(jìn)行'); break end fprintf('第%d次消元所選取的主元:%g\n',k,A1(k,k)) %disp('此次消元后系數(shù)矩陣為:'); %A1 for p=k+1:n l=A1(p,k)/A1(k,k); A1(p,k:n)=A1(p,k:n)-l*A1(k,k:n); b1(p)=b1(p)-l*b1(k); end end x1(n)=b1(n)/A1(n,n); for k=n-1:-1:1 for w=k+1:n b1(k)=b1(k)-A1(k,w)*x1(w); end x1(k)=b1(k)/A1(k,k); end disp('順序Gauss消元法解為:'); disp(x1); disp('所求解與精確解之差的無窮-范數(shù)為'); norm(x1-X,inf) end %列主元Gauss消元法 if a==2 A2=A;b2=b; for k=1:n [max_i,max_j]=find(A2(:,k)==max(abs(A2(k:n,k)))); if max_i~=k A2_change=A2(k,:); A2(k,:)=A2(max_i,:); A2(max_i,:)=A2_change; b2_change=b2(k); b2(k)=b2(max_i); b2(max_i)=b2_change; end if A2(k,k)==0 disp('主元為零,列主元Gauss消元法無法進(jìn)行'); break end fprintf('第%d次消元所選取的主元:%g\n',k,A2(k,k)) %disp('此次消元后系數(shù)矩陣為:'); %A2 for p=k+1:n l=A2(p,k)/A2(k,k); A2(p,k:n)=A2(p,k:n)-l*A2(k,k:n); b2(p)=b2(p)-l*b2(k); end end x2(n)=b2(n)/A2(n,n); for k=n-1:-1:1 for w=k+1:n b2(k)=b2(k)-A2(k,w)*x2(w); end x2(k)=b2(k)/A2(k,k); end disp('列主元Gauss消元法解為:'); disp(x2); disp('所求解與精確解之差的無窮-范數(shù)為'); norm(x2-X,inf) end %完全選主元Gauss消元法 if a==3 A3=A;b3=b; for k=1:n VV=eye(n); [max_i,max_j]=find(A3(k:n,k:n)==max(max(abs(A3(k:n,k:n))))); if numel(max_i)==0 [max_i,max_j]=find(A3(k:n,k:n)==-max(max(abs(A3(k:n,k:n))))); end W=eye(n); W(max_i(1)+k-1,max_i(1)+k-1)=0; W(k,k)=0; W(max_i(1)+k-1,k)=1; W(k,max_i(1)+k-1)=1; V=eye(n); V(k,k)=0; V(max_j(1)+k-1,max_j(1)+k-1)=0; V(k,max_j(1)+k-1)=1; V(max_j(1)+k-1,k)=1; A3=W*A3*V; b3=W*b3; VV=VV*V; if A3(k,k)==0 disp('主元為零,完全選主元Gauss消元法無法進(jìn)行'); break end fprintf('第%d次消元所選取的主元:%g\n',k,A3(k,k)) %disp('此次消元后系數(shù)矩陣為:'); %A3 for p=k+1:n l=A3(p,k)/A3(k,k); A3(p,k:n)=A3(p,k:n)-l*A3(k,k:n); b3(p)=b3(p)-l*b3(k); end end x3(n)=b3(n)/A3(n,n); for k=n-1:-1:1 for w=k+1:n b3(k)=b3(k)-A3(k,w)*x3(w); end x3(k)=b3(k)/A3(k,k); end disp('完全選主元Gauss消元法解為:'); disp(x3); disp('所求解與精確解之差的無窮-范數(shù)為'); norm(x3-X,inf) end %模最小或近可能小的元素作為主元 if a==4 A4=A;b4=b; for k=1:n AA=A4; AA(AA==0)=NaN; [min_i,j]=find(AA(k:n,k)==min(abs(AA(k:n,k)))); if numel(min_i)==0 [min_i,j]=find(AA(k:n,k)==-min(abs(AA(k:n,k:n)))); end W=eye(n); W(min_i(1)+k-1,min_i(1)+k-1)=0; W(k,k)=0; W(min_i(1)+k-1,k)=1; W(k,min_i(1)+k-1)=1; A4=W*A4; b4=W*b4; if A4(k,k)==0 disp('主元為零,模最小Gauss消元法無法進(jìn)行'); break end fprintf('第%d次消元所選取的主元:%g\n',k,A4(k,k)) %A4 for p=k+1:n l=A4(p,k)/A4(k,k); A4(p,k:n)=A4(p,k:n)-l*A4(k,k:n); b4(p)=b4(p)-l*b4(k); end end x4(n)=b4(n)/A4(n,n); for k=n-1:-1:1 for w=k+1:n b4(k)=b4(k)-A4(k,w)*x4(w); end x4(k)=b4(k)/A4(k,k); end disp('模最小Gauss消元法解為:'); disp(x4); disp('所求解與精確解之差的無窮-范數(shù)為'); norm(x4-X,inf) end 二、實(shí)驗(yàn)3.3 題目: 考慮方程組的解,其中系數(shù)矩陣H為Hilbert矩陣: 這是一個(gè)著名的病態(tài)問題。通過首先給定解(例如取為各個(gè)分量均為1)再計(jì)算出右端的辦法給出確定的問題。 (1)選擇問題的維數(shù)為6,分別用Gauss消去法(即LU分解)、J迭代法、GS迭代法和SOR迭代法求解方程組,其各自的結(jié)果如何?將計(jì)算結(jié)果與問題的解比較,結(jié)論如何。 (2)逐步增大問題的維數(shù),仍用上述的方法來解它們,計(jì)算的結(jié)果如何?計(jì)算的結(jié)果說明的什么? (3)討論病態(tài)問題求解的算法。 1.算法設(shè)計(jì) 對(duì)任意線性方程組,分析各種方法的計(jì)算公式如下,(1)Gauss消去法: 首先對(duì)系數(shù)矩陣進(jìn)行LU分解,有,則原方程轉(zhuǎn)化為,令,則原方程可以分為兩步回代求解: 具體方法這里不再贅述。 (2)J迭代法: 首先分解,再構(gòu)造迭代矩陣,其中,進(jìn)行迭代計(jì)算,直到誤差滿足要求。 (3)GS迭代法: 首先分解,再構(gòu)造迭代矩陣,其中,進(jìn)行迭代計(jì)算,直到誤差滿足要求。 (4)SOR迭代法: 首先分解,再構(gòu)造迭代矩陣,其中,進(jìn)行迭代計(jì)算,直到誤差滿足要求。 2.實(shí)驗(yàn)過程 一、根據(jù)維度n確定矩陣H的各個(gè)元素和b的各個(gè)分量值; 二、選擇計(jì)算方法(Gauss消去法,J迭代法,GS迭代法,SOR迭代法),對(duì)迭代法設(shè)定初值,此外SOR方法還需要設(shè)定松弛因子; 三、進(jìn)行計(jì)算,直至滿足誤差要求(對(duì)迭代法,設(shè)定相鄰兩次迭代結(jié)果之差的無窮范數(shù)小于0.0001;
3.計(jì)算結(jié)果及分析
(1)時(shí),問題可以具體定義為
計(jì)算結(jié)果如下,Gauss消去法
第1次消元所選取的主元是:1
第2次消元所選取的主元是:0.0833333
第3次消元所選取的主元是:0.00555556
第4次消元所選取的主元是:0.000357143
第5次消元所選取的主元是:2.26757e-05
第6次消元所選取的主元是:1.43155e-06
解得X=(0.***
1.***
0.***
1.***
0.***
1.***)T
使用無窮范數(shù)衡量誤差,可得=4.***e-10;
J迭代法
設(shè)定迭代初值為零,計(jì)算得到
J法的迭代矩陣B的譜半徑為4.30853>1,所以J法不收斂;
GS迭代法
設(shè)定迭代初值為零,計(jì)算得到GS法的迭代矩陣G的譜半徑為:0.999998<1,故GS法收斂,經(jīng)過541次迭代計(jì)算后,結(jié)果為X=(1.001***6
0.***
0.***
1.***
1.***
0.***)T
使用無窮范數(shù)衡量誤差,有=0.***;
SOR迭代法
設(shè)定迭代初值為零向量,并設(shè)定,計(jì)算得到SOR法迭代矩陣譜半徑為0.***,經(jīng)過100次迭代后的計(jì)算結(jié)果為
X=(1.***
0.***
1.03***59
1.06***81
1.***
0.9***527)T;
使用無窮范數(shù)衡量誤差,有=0.***;
對(duì)SOR方法,可變,改變值,計(jì)算結(jié)果可以列表如下
迭代次數(shù)
迭代矩陣的譜半徑
0.***
0.***
0.***
0.***
X
1.***
0.***
1.01***40
1.***
1.0***681
0.***
1.***
0.***
1.***
1.***
1.***
0.***
1.***
0.***
1.***
1.***
0.***
0.***
1.05***66
0.***
1.***
0.***
1.***
0.***
0.***
0.***
0.***
0.***
可以發(fā)現(xiàn),松弛因子的取值對(duì)迭代速度造成了不同的影響,上述四種方法中,松弛因子=0.5時(shí),收斂相對(duì)較快。
綜上,四種算法的結(jié)果列表如下:
算法
Gauss消去法
Jacobi法
GS法
SOR法(取)
迭代次數(shù)
--
不收斂
541
迭代矩陣的譜半徑
--
4.30853
0.999998
0.***
X
0.***
1.***
0.***
1.***
0.***
1.***
--
1.001***6
0.***
0.***
1.***
1.***
0.***
1.***
0.***
1.03***59
1.06***81
1.***
0.9***527
4.***e-10
--
0.***
0.***
計(jì)算可得,矩陣H的條件數(shù)為>>1,所以這是一個(gè)病態(tài)問題。由上表可以看出,四種方法的求解都存在一定的誤差。下面分析誤差的來源:
LU分解方法的誤差存在主要是由于Hilbert矩陣各元素由分?jǐn)?shù)形式轉(zhuǎn)換為小數(shù)形式時(shí),不能除盡情況下會(huì)出現(xiàn)舍入誤差,在進(jìn)行LU分解時(shí)也存在這個(gè)問題,所以最后得到的結(jié)果不是方程的精確解,但結(jié)果顯示該方法的誤差非常小;
Jacobi迭代矩陣的譜半徑為4.30853,故此迭代法不收斂;
GS迭代法在迭代次數(shù)為541次時(shí)得到了方程的近似解,其誤差約為0.05,比較大。GS迭代矩陣的譜半徑為0.999998,很接近1,所以GS迭代法收斂速度較慢;
SOR迭代法在迭代次數(shù)為100次時(shí)誤差約為0.08,誤差較大。SOR迭代矩陣的譜半徑為0.999999,也很接近1,所以時(shí)SOR迭代法收斂速度不是很快,但是相比于GS法,在迭代速度方面已經(jīng)有了明顯的提高;另外,對(duì)不同的,SOR方法的迭代速度會(huì)相應(yīng)有變化,如果選用最佳松弛因子,可以實(shí)現(xiàn)更快的收斂;
(2)
考慮不同維度的情況,時(shí),算法
Gauss消去
J法
GS法
SOR法(w=0.5)
計(jì)算結(jié)果
0.***
1.***
0.***
1.***
0.***
1.***
0.***
1.***
--
0.***
1.***
0.***
1.***
1.***
1.***
0.9968***
0.***
1.***
0.9397***
0.***
1.***
1.***
1.***
0.***
0.***
迭代次數(shù)
--
--
356
譜半徑
--
6.04213
0.***
--
時(shí),算法
Gauss消去法
Jacobi法
GS法
SOR法(w=0.5)
計(jì)算結(jié)果
0.***
1.***
0.***
1.000***1
0.***
1.***
0.***
1.***
0.***
1.***
0.***
--
0.***
1.***
0.***
0.***
0.***
1.02***91
1.***
1.***
1.***
0.***
0.947***7
1.0***572
0.***
0.***
0.***
1.***
1.***
1.***
1.***
0.***
0.***
0.***
迭代次數(shù)
--
--
1019
譜半徑
--
8.64964
0.***
--
時(shí)
算法
Gauss消去法
Jacobi法
GS法
SOR法(w=0.5)
計(jì)算結(jié)果
0.***
1.***
0.***
0.***
1.***
0.***
2.***
-2.***
7.***
-7.***
7.***
-1.***
0.***
1.***
0.***
--
不收斂
1.***
1.***
0.907***9
0.***
0.***
1.***
1.09***64
1.***
1.***
1.***
1.0385***
0.***
0.942***3
0.***
0.***
迭代次數(shù)
--
--
262
譜半徑
--
6.04213
>1
1.***
8.***
--
--
0.***
分析以上結(jié)果可以發(fā)現(xiàn),隨著n值的增加,Gauss消去法誤差逐漸增大,而且誤差增大的速度很快,在維數(shù)小于等于10情況下,Gauss消去法得到的結(jié)果誤差較小;但當(dāng)維數(shù)達(dá)到15時(shí),計(jì)算結(jié)果誤差已經(jīng)達(dá)到精確解的很多倍;
J法迭代不收斂,無論n如何取值,其譜半徑始終大于1,因而J法不收斂,所以J迭代法不能用于Hilbert矩陣的求解;
對(duì)于GS迭代法和SOR迭代法,兩種方法均收斂,GS迭代法是SOR迭代法松弛因子取值為1的特例,SOR方法受到取值的影響,會(huì)有不同的收斂情況。可以得出GS迭代矩陣的譜半徑小于1但是很接近1,收斂速度很慢。雖然隨著維數(shù)的增大,所需迭代的次數(shù)逐漸減少,但是當(dāng)維數(shù)達(dá)到15的時(shí)候,GS法已經(jīng)不再收斂。因此可以得出結(jié)論,GS迭代方法在Hilbert矩陣維數(shù)較低時(shí),能夠在一定程度上滿足迭代求解的需求,不過迭代的速度很慢。另外,隨著矩陣維數(shù)的增加,SOR法的誤差水平基本穩(wěn)定,而且誤差在可以接受的范圍之內(nèi)。
經(jīng)過比較可以得出結(jié)論,如果求解較低維度的Hibert矩陣問題,Gauss消去法、GS迭代法和SOR迭代法均可使用,且Gauss消去法的結(jié)果精確度較高;如果需要求解較高維度的Hibert矩陣問題,只有采用SOR迭代法。
(3)
系數(shù)矩陣的條件數(shù)較大時(shí),為病態(tài)方程。由實(shí)驗(yàn)可知,Gauss法在解上述方程時(shí),結(jié)果存在很大的誤差。而對(duì)于收斂的迭代法,可以通過選取最優(yōu)松弛因子的方法來求解,雖然迭代次數(shù)相對(duì)較多,但是結(jié)果較為精確。
總體來看,對(duì)于一般病態(tài)方程組的求解,可以采用以下方式:
1.低維度下采用Gauss消去法直接求解是可行的;
Jacobi迭代方法不適宜于求解病態(tài)問題;
GS迭代方法可以解決維數(shù)較低的病態(tài)問題,但其譜半徑非常趨近于1,導(dǎo)致迭代算法收斂速度很慢,維數(shù)較大的時(shí)候,GS法也不再收斂;
SOR方法較適合于求解病態(tài)問題,特別是矩陣維數(shù)較高的時(shí)候,其優(yōu)勢(shì)更為明顯。
2.采用高精度的運(yùn)算,如選用雙倍或更多倍字長(zhǎng)的運(yùn)算,可以提高收斂速度;
3.可以對(duì)原方程組作某些預(yù)處理,從而有效降低系數(shù)矩陣的條件數(shù)。
4.實(shí)驗(yàn)結(jié)論
(1)對(duì)Hibert矩陣問題,其條件數(shù)會(huì)隨著維度的增加迅速增加,病態(tài)性會(huì)越來越明顯;在維度較低的時(shí)候,Gauss消去法、GS迭代法和SOR迭代法均可使用,且可以優(yōu)先使用Gauss消去法;如果需要求解較高維度的Hibert矩陣問題,只有SOR迭代法能夠求解。
(2)SOR方法比較適合于求解病態(tài)問題,特別是矩陣維數(shù)較高的時(shí)候,其優(yōu)點(diǎn)更為明顯。從本次實(shí)驗(yàn)可以看出,隨著矩陣維數(shù)的增大,SOR方法所需的迭代次數(shù)減少,而且誤差基本穩(wěn)定,是解決病態(tài)問題的適宜方法。
附錄:程序代碼
clear
all
clc;
format
long;
%矩陣賦值
n=input('矩陣H的階數(shù):n=');
for
i=1:n
for
j=1:n
H(i,j)=1/(i+j-1);
end
end
b=H*ones(n,1);
disp('H矩陣為:');
H
disp('向量b:');
b
%方法選擇
disp('選取求解方式');
disp('1
Gauss消去法,2
J迭代法,3
GS迭代法,4
SOR迭代法');
a=input('求解方式序號(hào):');
%Gauss消去法
if
a==1;
H1=H;b1=b;
for
k=1:n
if
H1(k,k)==0
disp('主元為零,Gauss消去法無法進(jìn)行');
break
end
fprintf('第%d次消元所選取的主元是:%g\n',k,H1(k,k))
for
p=k+1:n
m5=-H1(p,k)/H1(k,k);
H1(p,k:n)=H1(p,k:n)+m5*H1(k,k:n);
b1(p)=b1(p)+m5*b1(k);
end
end
x1(n)=b1(n)/H1(n,n);
for
k=n-1:-1:1
for
v=k+1:n
b1(k)=b1(k)-H1(k,v)*x1(v);
end
x1(k)=b1(k)/H1(k,k);
end
disp('Gauss消去法解為:');
disp(x1);
disp('解與精確解之差的無窮范數(shù)');
norm((x1-a),inf)
end
D=diag(diag(H));
L=-tril(H,-1);
U=-triu(H,1);
%J迭代法
if
a==2;
%給定初始x0
ini=input('初始值設(shè)定:x0=');
x0(:,1)=ini*diag(ones(n));
disp('初始解向量為:');
x0
xj(:,1)=x0(:,1);
B=(D^(-1))*(L+U);
f=(D^(-1))*b;
fprintf('(J法B矩陣譜半徑為:%g\n',vrho(B));
if
vrho(B)<1;
for
m2=1:5000
xj(:,m2+1)=B*xj(:,m2)+fj;
if
norm((xj(:,m2+1)-xj(:,m2)),inf)<0.0001
break
end
end
disp('J法計(jì)算結(jié)果為:');
xj(:,m2+1)
disp('解與精確解之差的無窮范數(shù)');
norm((xj(:,m2+1)-diag(ones(n))),inf)
disp('J迭代法迭代次數(shù):');
m2
else
disp('由于B矩陣譜半徑大于1,因而J法不收斂');
end
end
%GS迭代法
if
a==3;
%給定初始x0
ini=input('初始值設(shè)定:x0=');
x0(:,1)=ini*diag(ones(n));
disp('初始解向量為:');
x0
xG(:,1)=x0(:,1);
G=inv(D-L)*U;
fG=inv(D-L)*b;
fprintf('GS法G矩陣譜半徑為:%g\n',vrho(G));
if
vrho(G)<1
for
m3=1:5000
xG(:,m3+1)=G*xG(:,m3)+fG;
if
norm((xG(:,m3+1)-xG(:,m3)),inf)<0.0001
break;
end
end
disp('GS迭代法計(jì)算結(jié)果:');
xG(:,m3+1)
disp('解與精確解之差的無窮范數(shù)');
norm((xG(:,m3+1)-diag(ones(n))),inf)
disp('GS迭代法迭代次數(shù):');
m3
else
disp('由于G矩陣譜半徑大于1,因而GS法不收斂');
end
end
%SOR迭代法
if
a==4;
%給定初始x0
ini=input('初始值設(shè)定:x0=');
x0(:,1)=ini*diag(ones(n));
disp('初始解向量為:');
x0
A=H;
for
i=1:n
b(i)=sum(A(i,:));
end
x_star=ones(n,1);
format
long
w=input('松弛因子:w=');
Lw=inv(D-w*L)*((1-w)*D+w*U);
f=w*inv(D-w*L)*b;
disp('迭代矩陣的譜半徑:')
p=vrho(Lw)
time_max=100;%迭代次數(shù)
x=zeros(n,1);%迭代初值
for
i=1:time_max
x=Lw*x+f;
end
disp('SOR迭代法得到的解為');
x
disp('解與精確解之差的無窮范數(shù)');
norm((x_star-x),inf)
end
pause
三、實(shí)驗(yàn)4.1
題目:
對(duì)牛頓法和擬牛頓法。進(jìn)行非線性方程組的數(shù)值求解
(1)用上述兩種方法,分別計(jì)算下面的兩個(gè)例子。在達(dá)到精度相同的前提下,比較其迭代次數(shù)、CPU時(shí)間等。
(2)取其他初值,結(jié)果又如何?反復(fù)選取不同的初值,比較其結(jié)果。
(3)總結(jié)歸納你的實(shí)驗(yàn)結(jié)果,試說明各種方法適用的問題。
1.算法設(shè)計(jì)
對(duì)需要求解的非線性方程組而言,牛頓法和擬牛頓法的迭代公式如下,(1)牛頓法:
牛頓法為單步迭代法,需要取一個(gè)初值。
(2)擬牛頓法:(Broyden秩1法)
其中,擬牛頓法不需要求解的導(dǎo)數(shù),因此節(jié)省了大量的運(yùn)算時(shí)間,但需要給定矩陣的初值,取為。
2.實(shí)驗(yàn)過程
一、輸入初值;
二、根據(jù)誤差要求,按公式進(jìn)行迭代計(jì)算;
三、輸出數(shù)據(jù);
3.計(jì)算結(jié)果及分析
(1)首先求解方程組(1),在這里,設(shè)定精度要求為,方法
牛頓法
擬牛頓法
初始值
計(jì)算結(jié)果X
x1
0.***
0.***
x2
1.***
1.0852***
x3
0.***
0.***
迭代次數(shù)
CPU計(jì)算時(shí)間/s
3.777815
2.739349
可以看出,在初始值相同情況下,牛頓法和擬牛頓法在達(dá)到同樣計(jì)算精度情況下得到的結(jié)果基本相同,但牛頓法的迭代次數(shù)明顯要少一些,但是,由于每次迭代都需要求解矩陣的逆,所以牛頓法每次迭代的CPU計(jì)算時(shí)間更長(zhǎng)。
之后求解方程組(2),同樣設(shè)定精度要求為
方法
牛頓法
擬牛頓法
初始值
計(jì)算結(jié)果X
x1
0.***
0.***
x2
0.***
0.***
x3
-0.***
-0.***
迭代次數(shù)
CPU計(jì)算時(shí)間/s
2.722437
3.920195
同樣地,可以看出,在初始值相同情況下,牛頓法和擬牛頓法在達(dá)到同樣計(jì)算精度情況下得到的結(jié)果是基本相同的,但牛頓法的迭代次數(shù)明顯要少,但同樣的,由于每次迭代中有求解矩陣的逆的運(yùn)算,牛頓法每次迭代的CPU計(jì)算時(shí)間較長(zhǎng)。
(2)對(duì)方程組(1),取其他初值,計(jì)算結(jié)果列表如下,同樣設(shè)定精度要求為
初始值
方法
牛頓法
擬牛頓法
計(jì)算結(jié)果
0.***
1.***
0.***
9.21***94
-5.***
18.1***205
迭代次數(shù)
CPU計(jì)算時(shí)間/s
3.907164
4.818019
計(jì)算結(jié)果
0.***
1.***
0.***
9.21***91
-5.***
18.1***807
迭代次數(shù)
2735
CPU計(jì)算時(shí)間/s
8.127286
5.626023
計(jì)算結(jié)果
0.***
1.***
0.***
0.***
1.0852***
0.***
迭代次數(shù)
CPU計(jì)算時(shí)間/s
3.777815
2.739349
計(jì)算結(jié)果
0.***
1.***
0.***
0.***
1.***
0.***
迭代次數(shù)
188
CPU計(jì)算時(shí)間/s
3.835697
2.879070
計(jì)算結(jié)果
9.21***22
-5.***
18.1***605
Matlab警告矩陣接近奇異值,程序進(jìn)入長(zhǎng)期循環(huán)計(jì)算中
迭代次數(shù)
--
CPU計(jì)算時(shí)間/s
4.033868
--
計(jì)算結(jié)果
0.***
1.***
0.***
Matlab警告矩陣接近奇異值,程序進(jìn)入長(zhǎng)期循環(huán)計(jì)算中
迭代次數(shù)
--
CPU計(jì)算時(shí)間/s
12.243263
--
從上表可以發(fā)現(xiàn),方程組(1)存在另一個(gè)在(9.2,-5.6,18.1)T附近的不動(dòng)點(diǎn),初值的選取會(huì)直接影響到牛頓法和擬牛頓法最后的收斂點(diǎn)。
總的來說,設(shè)定的初值離不動(dòng)點(diǎn)越遠(yuǎn),需要的迭代次數(shù)越多,因而初始值的選取非常重要,合適的初值可以更快地收斂,如果初始值偏離精確解較遠(yuǎn),會(huì)出現(xiàn)迭代次數(shù)增加直至無法收斂的情況;
由于擬牛頓法是一種近似方法,擬牛頓法需要的的迭代次數(shù)明顯更多,而且收斂情況不如牛頓法好(初值不夠接近時(shí),甚至?xí)霈F(xiàn)奇異矩陣的情況),但由于牛頓法的求解比較復(fù)雜,計(jì)算時(shí)間較長(zhǎng);
同樣的,對(duì)方程組(2),取其他初值,計(jì)算結(jié)果列表如下,同樣設(shè)定精度要求為
初始值
方法
牛頓法
擬牛頓法
計(jì)算結(jié)果
0.***
0.***
-0.***
0.***
0.***
-0.***
迭代次數(shù)
CPU計(jì)算時(shí)間/s
2.722437
3.920195
計(jì)算結(jié)果
0.***
0.***
-0.***
0.***
-0.***
76.***
迭代次數(shù)
CPU計(jì)算時(shí)間/s
5.047111
5.619752
計(jì)算結(jié)果
0.***
0.***
-0.***
1.0e+02
*
-0.***
-0.000***6
1.754***3
迭代次數(shù)
CPU計(jì)算時(shí)間/s
3.540668
3.387829
計(jì)算結(jié)果
0.***
0.***
-0.***
1.0e+04
*
0.***
-0.***
1.***
迭代次數(shù)
CPU計(jì)算時(shí)間/s
2.200571
2.640901
計(jì)算結(jié)果
0.***
0.***
-0.***
矩陣為奇異值,無法輸出準(zhǔn)確結(jié)果
迭代次數(shù)
--
CPU計(jì)算時(shí)間/s
1.719072
--
計(jì)算結(jié)果
0.***
0.***
-0.***
矩陣為奇異值,無法輸出準(zhǔn)確結(jié)果
迭代次數(shù)
149
--
CPU計(jì)算時(shí)間/s
2.797116
--
計(jì)算結(jié)果
矩陣為奇異值,無法輸出準(zhǔn)確結(jié)果
矩陣為奇異值,無法輸出準(zhǔn)確結(jié)果
迭代次數(shù)
--
--
CPU計(jì)算時(shí)間/s
--
--
在這里,與前文類似的發(fā)現(xiàn)不再贅述。
從這里看出,牛頓法可以在更大的區(qū)間上實(shí)現(xiàn)壓縮映射原理,可以在更大的范圍上選取初值并最終收斂到精確解附近;
在初始值較接近于不動(dòng)點(diǎn)時(shí),牛頓法和擬牛頓法計(jì)算所得到的結(jié)果是基本相同的,雖然迭代次數(shù)有所差別,但計(jì)算總的所需時(shí)間相近。
(3)
牛頓法在迭代過程中用到了矩陣的求逆,其迭代收斂的充分條件是迭代滿足區(qū)間上的映內(nèi)性,對(duì)于矩陣的求逆過程比較簡(jiǎn)單,所以在較大區(qū)間內(nèi)滿足映內(nèi)性的問題適合應(yīng)用牛頓法進(jìn)行計(jì)算。一般而言,對(duì)于函數(shù)單調(diào)或者具有單值特性的函數(shù)適合應(yīng)用牛頓法,其對(duì)初始值敏感程度較低,算法具有很好的收斂性。
另外,需要說明的是,每次計(jì)算給出的CPU時(shí)間與計(jì)算機(jī)當(dāng)時(shí)的運(yùn)行狀態(tài)有關(guān),同時(shí),不同代碼的運(yùn)行時(shí)間也不一定一致,所以這個(gè)數(shù)據(jù)并不具有很大的參考價(jià)值。
4.實(shí)驗(yàn)結(jié)論
對(duì)牛頓法和擬牛頓法,都存在初始值越接近精確解,所需的迭代次數(shù)越小的現(xiàn)象;
在應(yīng)用上,牛頓法和擬牛頓法各有優(yōu)勢(shì)。就迭代次數(shù)來說,牛頓法由于更加精確,所需的迭代次數(shù)更少;但就單次迭代來說,牛頓法由于計(jì)算步驟更多,且計(jì)算更加復(fù)雜,因而每次迭代所需的時(shí)間更長(zhǎng),而擬牛頓法由于采用了簡(jiǎn)化的近似公式,其每次迭代更加迅速。當(dāng)非線性方程組求逆過程比較簡(jiǎn)單時(shí),如方程組1的情況時(shí),擬牛頓法不具有明顯的優(yōu)勢(shì);而當(dāng)非線性方程組求逆過程比較復(fù)雜時(shí),如方程組2的情況,擬牛頓法就可以體現(xiàn)出優(yōu)勢(shì),雖然循環(huán)次數(shù)有所增加,但是CPU耗時(shí)反而更少。
另外,就方程組壓縮映射區(qū)間來說,一般而言,對(duì)于在區(qū)間內(nèi)函數(shù)呈現(xiàn)單調(diào)或者具有單值特性的函數(shù)適合應(yīng)用牛頓法,其對(duì)初始值敏感程度較低,使算法具有很好的收斂性;而擬牛頓法由于不需要在迭代過程中對(duì)矩陣求逆,而是利用差商替代了對(duì)矩陣的求導(dǎo),所以即使初始誤差較大時(shí),其倒數(shù)矩陣與差商偏差也較小,所以對(duì)初始值的敏感程度較小。
附錄:程序代碼
%方程1,牛頓法
tic;
format
long;
%%初值
disp('請(qǐng)輸入初值');
a=input('第1個(gè)分量為:');
b=input('第2個(gè)分量為:');
c=input('第3個(gè)分量為:');
disp('所選定初值為');
x=[a;b;c]
%%誤差要求
E=0.0001;
%%迭代
i=0;
e=2*E;
while
e>E
F=[12*x(1)-x(2)^2-4*x(3)-7;x(1)^2+10*x(2)-x(3)-11;x(2)^3+10*x(3)-8];
f=[12,-2*x(2),-4;2*x(1),10,-1;0,3*x(2)^2,10];
det_x=((f)^(-1))*(-F);
x=x+det_x;
e=max(norm(det_x));
i=i+1;
end
disp('迭代次數(shù)');
i
disp('迭代次數(shù)');
x
toc;
%方程1,擬牛頓法
tic;
format
long;
%%初值
%%初值
disp('請(qǐng)輸入初值');
a=input('第1個(gè)分量為:');
b=input('第2個(gè)分量為:');
c=input('第3個(gè)分量為:');
disp('所選定初值為');
x0=[a;b;c]
%%誤差要求
E=0.0001;
%%迭代
i=0;
e=2*E;
A0=eye(3);
while
e>E
F0=[12*x0(1)-x0(2)^2-4*x0(3)-7;x0(1)^2+10*x0(2)-x0(3)-11;x0(2)^3+10*x0(3)-8];
x1=x0-A0^(-1)*F0;
s=x1-x0;
F1=[12*x1(1)-x1(2)^2-4*x1(3)-7;x1(1)^2+10*x1(2)-x1(3)-11;x1(2)^3+10*x1(3)-8];
y=F1-F0;
A1=A0+(y-A0*s)*s'/(s'*s);
x0=x1;
A0=A1;
e=max(norm(s));
i=i+1;
end
disp('迭代次數(shù)');
i
disp('迭代次數(shù)');
x0
toc;
%方程2,牛頓法
tic;
format
long;
%%初值
disp('請(qǐng)輸入初值');
a=input('第1個(gè)分量為:');
b=input('第2個(gè)分量為:');
c=input('第3個(gè)分量為:');
disp('所選定初值為');
x=[a;b;c]
%%誤差要求
E=0.0001;
%%迭代
i=0;
e=2*E;
while
e>E
F=[3*x(1)-cos(x(2)*x(3))-0.5;x(1)^2-81*(x(2)+0.1)^2+sin(x(3))+1.06;exp(1)^(-x(1)*x(2))+20*x(3)+(10*pi-3)/3];
f=[3,x(3)*sin(x(2)*x(3)),x(2)*sin(x(2)*x(3));2*x(1),-162*x(2)-81/5,cos(x(3));-x(2)*exp(1)^(-x(1)*x(2)),-x(1)*exp(1)^(-x(1)*x(2)),20];
det_x=((f)^(-1))*(-F);
x=x+det_x;
e=max(norm(det_x));
i=i+1;
end
disp('迭代次數(shù)');
i
disp('迭代次數(shù)');
x
toc;
%方程2,擬牛頓法
tic;
format
long;
%%初值
%%初值
disp('請(qǐng)輸入初值');
a=input('第1個(gè)分量為:');
b=input('第2個(gè)分量為:');
c=input('第3個(gè)分量為:');
disp('所選定初值為');
x0=[a;b;c]
%%誤差要求
E=0.0001;
%%迭代
i=0;
e=2*E;
A0=eye(3);
while
e>E
F0=[3*x0(1)-cos(x0(2)*x0(3))-0.5;x0(1)^2-81*(x0(2)+0.1)^2+sin(x0(3))+1.06;exp(1)^(-x0(1)*x0(2))+20*x0(3)+(10*pi-3)/3];
x1=x0-A0^(-1)*F0;
s=x1-x0;
F1=[3*x1(1)-cos(x1(2)*x1(3))-0.5;x1(1)^2-81*(x1(2)+0.1)^2+sin(x1(3))+1.06;exp(1)^(-x1(1)*x1(2))+20*x1(3)+(10*pi-3)/3];
y=F1-F0;
A1=A0+(y-A0*s)*s'/(s'*s);
x0=x1;
A0=A1;
e=max(norm(s));
i=i+1;
end
disp('迭代次數(shù)');
i
disp('迭代次數(shù)');
x0
toc;
第五篇:復(fù)數(shù)值分析習(xí)題
2011級(jí)葫蘆島校區(qū)研究生數(shù)值分析復(fù)習(xí)參考提綱(注意例題未必出原題,給出的是題型)
一、例2-4,例2-6,例2-11,二、86頁:1,2,3,5,6,7,8
三、1、n階線性方程組的雅可比迭代法:迭代公式、矩陣表示
2、n階線性方程組的高斯-賽德爾迭代法:迭代公式、矩陣表示
3、逐次超松弛迭代法:迭代公式、矩陣表示
4、迭代法的收斂性:(1)迭代法收斂的充要條件;(2)迭代法收斂的充分條件;(3)迭代法收斂的基本定理
5、例4-3,例4-4,例4-5,例4-8,6、110頁:1,2,5
四、1、n次拉格朗日插值:插值公式、插值余項(xiàng)與誤差估計(jì)
2、牛頓插值:差商、牛頓插值公式、插值余項(xiàng)與誤差估記
3、等距節(jié)點(diǎn)插值:差分、等距節(jié)點(diǎn)插值公式、誤差估計(jì)
4、厄米特插值:插值公式、插值余項(xiàng)
5、分段低次插值:插值方法,分段低次線性插值余項(xiàng)、分段三次厄米特插值余項(xiàng)
6、三次樣條插值:?jiǎn)栴}的提法、邊界條件類型
7、例5-
1、例5-
2、例5-
4、例5-
6、例5-
7、例5-
8、例5-10
五、1、最佳一致逼近的概念、最佳一致逼近多項(xiàng)式的解法、2、切比雪夫多項(xiàng)式及其性質(zhì)
3、例6-24、最佳平方逼近的概念、最佳平方逼近的計(jì)算
5、例6-56、正交多項(xiàng)式序列的構(gòu)造方法
7、勒讓德多項(xiàng)式及其性質(zhì)
8、例6-69、離散數(shù)據(jù)的最小二乘法
10、例6-8
六、1、牛頓-柯特斯求積公式、梯形公式、辛普森公式、柯特斯公式及其階段誤差
2、證明:梯形公式和矩形公式具有一次代數(shù)精度、辛普森公式具有三次代數(shù)精度 3、181頁定理1及其證明
4、復(fù)化梯形公式、復(fù)化辛普森公式,復(fù)化柯特斯公式及其截?cái)嗾`差
5、例7-
2、例7-36、龍貝格求積公式
7、例7-
5、例7-68、插值型求導(dǎo)方法
9、例7-12
七、例8-
1、例8-2
八、10頁1、3、7、9