C語(yǔ)言解決多元多次方程_第1頁(yè)
C語(yǔ)言解決多元多次方程_第2頁(yè)
C語(yǔ)言解決多元多次方程_第3頁(yè)
C語(yǔ)言解決多元多次方程_第4頁(yè)
C語(yǔ)言解決多元多次方程_第5頁(yè)
已閱讀5頁(yè),還剩8頁(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、一 理論背景我們先考慮線性方程,線性方程組的解便不難得出了。與線性方程相比,非線性方程問(wèn)題無(wú)論是從理論上還是從計(jì)算公式上,都要復(fù)雜得多。對(duì)于一般的非線性方程,計(jì)算方程的根既無(wú)一定章程可尋也無(wú)直接法可言。例如,求解高次方程組的根,求解含有指數(shù)和正弦函數(shù)的超越方程的零點(diǎn)。解非線性方程或方程組也是計(jì)算方法中的一個(gè)主題。在解方程方面,牛頓(I . Newton)提出了方程求根的一種迭代方法,被后人稱為牛頓算法。三百年來(lái),人們一直用牛頓算法,改善牛頓算法,不斷推廣算法的應(yīng)用范圍。牛頓算法,可以說(shuō)是數(shù)值計(jì)算方面的最有影響的計(jì)算方法。對(duì)于言程式,如果是線性函數(shù),則它的求根是容易的。牛頓法實(shí)質(zhì)上是一種線性化方

2、法,其基本思想是將非線性方程式逐步歸結(jié)為某種線性方程來(lái)求解。解非線性方程組只是非線性方程的一種延伸和擴(kuò)展。二 主要理論考慮方程組 其中均為多元函數(shù)。若用向量記號(hào)記, 就可寫成 當(dāng),且中至少有一個(gè)是自變量 的非線性函數(shù)時(shí),則稱方程組為非線性方程組。非線性方程組求根問(wèn)題是前面介紹的方程即求根的直接推廣,實(shí)際上只要把單變量函數(shù)看成向量函數(shù)則可將單變量方程求根方法推廣到方程組。若已給出方程組的一個(gè)近似根 將函數(shù)的分量在用多元函數(shù)泰勒展開(kāi),并取其線性部分,則可表示為 令上式右端為零,得到線性方程組 其中 稱為為雅可比(Jacobi)矩陣。求解線性方程組,并記解為,則得 這就是解非線性方程組的牛頓法。三算

3、法 牛頓法主要思想是用 進(jìn)行迭代 。因此首先需要算出的雅可比矩陣,再求過(guò)求出它的逆,當(dāng)它達(dá)到某個(gè)精度時(shí)即停止迭代。 具體算法如下:1 首先宏定義方程組 ,確定步長(zhǎng)和精度;2 求的雅可比矩陣;可用求出雅可比矩陣;3 求雅可比矩陣的逆;將右乘一個(gè)單位矩陣,通過(guò)單位矩陣變換實(shí)現(xiàn)求 的逆,用指針來(lái)存貯。4 雅可比矩陣與其逆的相乘;5 用來(lái)迭代;6 當(dāng)精度大于時(shí),重復(fù)執(zhí)行25步,直到精度小于或等于停止迭代,就是最后的迭代結(jié)果。其中四代碼#include #include #include #include #define f0(x1,x2) (x1+2*x2-3)#define f1(x1,x2) (2

4、*x1*x1+x2*x2-5)#define x_ 0.000001#define matrixNum 2double *matrixF2(double *x);int y=0;void main() int i,j,n; double p,*x; double *b;double *matrixF; /矩陣F double *matrixF_; /矩陣F的雅可比矩陣的逆 b=(double *)malloc(matrixNum);matrixF=(double *)malloc(matrixNum); matrixF_=(double *)malloc(matrixNum*matrixNum

5、); cout請(qǐng)輸入初值:;for(i=0;i*(x+i); do p=0.0;for(i=0;imatrixNum;i+) *(b+i)=0;*matrixF=f0(*x,*(x+1); *(matrixF+1)=f1(*x,*(x+1); matrixF_=matrixF2(x);for(i=0;imatrixNum;i+)for(j=0;jmatrixNum;j+)*(b+i)+=*(matrixF_+i*matrixNum+j)*(*(matrixF+j); *(x+i)=*(x+i)-*(b+i);cout*(x+i) ; coutendl; for(i=0;ix_);cout最終迭

6、代結(jié)果為*x,*(x+1)endl; delete matrixF; delete matrixF_; getch();double *matrixF2(double *x) int i,j; double t; double *matrixF1; /矩陣F的雅可比矩陣 double *matrixF2; /矩陣F的雅可比矩陣的逆 matrixF1=(double *)malloc(matrixNum*matrixNum); matrixF2=(double *)malloc(matrixNum*matrixNum); for(i=0;imatrixNum;i+) for(j=0;jmatri

7、xNum;j+)if(i=j) *(matrixF2+i*matrixNum+j)=1;else *(matrixF2+i*matrixNum+j)=0; *matrixF1=(f0(*x+x_),*(x+1)-f0(*x,*(x+1)/x_; *(matrixF1+1)=(f0(*x,(*(x+1)+x_)-f0(*x,*(x+1)/x_; *(matrixF1+2)=(f1(*x+x_),*(x+1)-f1(*x,*(x+1)/x_; *(matrixF1+3)=(f1(*x,(*(x+1)+x_)-f1(*x,*(x+1)/x_; /for(i=0;imatrixNum;i+) / co

8、ut*(x+i)endl; cout矩陣F在*x,*(x+1)的雅可比矩陣endl;for(i=0;imatrixNum;i+) for(j=0;jmatrixNum;j+) cout*(matrixF1+i*matrixNum+j) ; coutendl;/求矩陣F的雅可比矩陣的逆 t=*matrixF1; for(i=0,j=0;jmatrixNum;j+) *(matrixF1+i*matrixNum+j)/=t; *(matrixF2+i*matrixNum+j)/=t; t=*(matrixF1+1*matrixNum);for(i=1,j=0;jmatrixNum;j+)*(mat

9、rixF1+i*matrixNum+j)-=*(matrixF1+j)*t; *(matrixF2+i*matrixNum+j)-=*(matrixF2+j)*t;t=*(matrixF1+1*matrixNum+1); for(i=1,j=0;jmatrixNum;j+) *(matrixF1+i*matrixNum+j)/=t; *(matrixF2+i*matrixNum+j)/=t; t=*(matrixF1+1);for(i=i,j=0;jmatrixNum;j+) *(matrixF1+j)-=*(matrixF1+i*matrixNum+j)*t; *(matrixF2+j)-=

10、*(matrixF2+i*matrixNum+j)*t; for(i=0;imatrixNum;i+) for(j=0;jmatrixNum;j+) cout*(matrixF1+i*matrixNum+j) ; coutendl; for(i=0;imatrixNum;i+) for(j=0;jmatrixNum;j+) cout*(matrixF2+i*matrixNum+j) ; coutendl;cout第y次迭代結(jié)果為*x,*(x+1)endl;getch(); return matrixF2; delete matrixF1; delete matrixF2;五算法分析及改進(jìn)措施

11、牛頓法解非線性方程組是一種線性方法,即將非線性方程組以一線性方程組來(lái)近似,由此構(gòu)造一種迭代格式,用以逐次逼近所求的解案。 可以證明Newton迭代至少是二階收斂的,而且收斂速度快。因此牛頓法是解非線性方程的常且方法。 正因?yàn)镹ewton法思想直觀自然,是最常用的,也是研究其它方法的出發(fā)點(diǎn),該方法的不足恰好是其它方法研究的出發(fā)點(diǎn)。 首先,Newton法的每步迭代都要計(jì)算,它是由個(gè)偏導(dǎo)數(shù)值構(gòu)造的矩陣,有些問(wèn)題中每個(gè)值可能都很復(fù)雜,甚至根本無(wú)法解析地計(jì)算。當(dāng)比較大時(shí)這部分是算法中耗費(fèi)時(shí)機(jī)最多的,不僅如此,每步迭代還要解線性方程組,當(dāng)很大時(shí)(如由離散非線性偏微方程導(dǎo)出的非線性方程組,可能有甚至更多),

12、其工作量很大。 其次,在許多情況下,初值要有較嚴(yán)格的限制,在實(shí)際應(yīng)用中給出確保收斂的初值是十分困難的。非線性問(wèn)題通常又是多解的,給出收斂到所需要解的初值更加困難。 再有,迭代過(guò)程中如果某一步處有奇異或幾乎奇異(后者指的條件數(shù)很大),則Newton法的計(jì)算將無(wú)法進(jìn)行下去。特別如果在的解處有奇異,不僅計(jì)算困難,而且問(wèn)題本身也變得十分復(fù)雜,以一無(wú)元代數(shù)方程為例,這時(shí)方程產(chǎn)生重根。 為了克服Newton法的上述缺點(diǎn),我們可以采用Newton法和參數(shù)Newton法克服前兩種缺點(diǎn),擬Newton法可以克服第三種缺點(diǎn)。 這里就擬Newton法為例敘述對(duì)牛頓法的改進(jìn)我們用矩陣近似的代替,從而得到如下形式的迭代

13、法: 0,1,2,.其中Bk均為非奇異的.為了不要每次迭代都計(jì)算逆矩陣,我們?cè)O(shè)法構(gòu)造直接逼近的逆矩陣,迭代公式化為 : 0,1,2,. 六根據(jù)實(shí)例分析結(jié)果對(duì)于如下非線性方程組用如上源程序運(yùn)行。1輸入初值為1.5 1.0 進(jìn)行迭代的結(jié)果分別為: 理論值分別為: 第一次 1.5 0.75 1.5 0.75 第二次 1.4881 0.755952 1.488095 0.755952 第三次 1.48803 0.755983 1.488034 0.755983 停止迭代,最終迭代結(jié)果為1.488034 0.7559832. 輸入初值為2.0 2.0 進(jìn)行迭代的結(jié)果分別為: 第一次 1.83333 0.583333 第二次 1.52778 0.736111 第三次 1.4887 0.755652 第四次 1.48803 0.755983以上表明1)迭代中存在誤差;這是由于求雅可比式時(shí)用差商法來(lái)近似替代了,要過(guò)一系列的運(yùn)算,從而誤差在所難免。由于精度x_取0.000001,已經(jīng)足夠小了,所以迭

溫馨提示

  • 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)論