計算方法第五次上機作業

2022-09-28 20:51:04 字數 3113 閱讀 9860

gegebao

摘要:程式基於matlab,包括問題陳述、演算法與程式、結果與分析、討論四個部分。

一、問題陳述

下面的非線性方程組在求解的時候都會遇到一些困難,請使用標準的庫函式或者自己編寫的程式,按照給定的初值求解這些問題。在每個題中,都可能出現不收斂或者收斂到某值但又不是方程組的解,試給出解釋;觀察其收斂速度,如果比預想的要慢,試解釋其原因。

(1)取初值x1 =15,x2=-2,求解

(2)取初值

二、演算法與程式

本次作業採用牛頓法求解非線性方程組。

(1)求解前,我們先將方程組的式子變形為函式f1和f2:

下面是接下來過程的**,每一次迭代的結果被儲存在x的二維陣列裡:

x=[15;-2];i=1;f=1對座標取初值,對其他值初始化

while(log10(norm(f))>-15) %迭代結束的條件,當[f1;f2]的範數小於預設值結束迭代

a=x(1,i);b=x(2,i為了使**簡潔一點,將值賦給單字母的兩個變數a和b

f=[a+b*(b*(5-b)-2)-13;a+b*(b*(1+b)-14)-29求解f=[f1;f2]

df=[1,-b*(b-5)-b*(2*b-5)-2;1,b*(b+1)+b*(2*b+1)-14求解

x(:,i+1)=x(:,i)-df^(-1)*f求下一組解向量

i=i+1;

end(2)求解前,我們先將方程組的式子變形為函式f1、f2和f3:

x=[(1+3^(0.5))/2;(1-3^(0.5))/2;3^(0.5)];i=1;f=1; %對座標取初值,對其他值初始化

while(log10(norm(f))>-15) %迭代結束的條件,當[f1;f2;f3]的範數小於預設值結束迭代

a=x(1,i);b=x(2,i);c=x(3,i); %為了使**簡潔一點,將值賦給單字母的三個變數a、b和c

f=[a^2+b^2+c^2-5;a+b-1;a+c-3求解f=[f1;f2;f3]

df=[2*a,2*b,2*c;1,1,0;1 0 1求解

x(:,i+1)=x(:,i)-df^(-1)*f求下一組解向量

i=i+1;

end三、結果與分析

(1)執行**,將儲存解向量的二維陣列列印出來,如下表

x1=5,x2=4

下面是將每一步迭代的結果按照順序連線起來的圖。

解法收斂得並不快。x(k)在起點附近**了很多次,最後才收斂到結束點。將結果帶入方程的確是方程的解。

通過影象可以看出,起始點和解還是距離很遠的,因此前幾次迭代中,迭代結果並沒有向結果靠近,這可能是導致解法收斂較慢的原因。當起始點遠離解時,高階導數起到的作用更加明顯,我們通過一階線性近似的牛頓法,不能夠保證迭代過程中的每一步總能夠向解靠近,迭代會在區域性**很多次才收斂到解上去,於是導致收斂速度很慢。

(2)執行程式,程式會報錯,檢查結果可以發現,給定的初始點處的是乙個奇異矩陣,在求逆過程中會報錯。

我們先討論另外乙個問題,就是當行列式比較小,的逆的行列式會與之相反地特別大。這樣迭代出來的x會比較遠離上乙個x的值。但是如果我們確信解就在給定的初始值附近,那麼這樣的迭代會使x跑到離解比較遠的地方去,明顯不利於迭代的收斂。

其實奇異也是相同的問題,只不過行列式小到了0,其逆趨向於無窮。我們可以對這兩種問題合併為乙個問題來加以處理。

我們考慮當的行列式比較小時,可以讓加上乙個矩陣再來求逆,這樣x就不會**得太厲害。這樣處理後迭代過程仍然收斂到解處。

但從另一方面,我們又不能太影響的性質,因為畢竟反映了方程組的一階線性趨勢,解有可能真的離初始點非常遠。所以我們的干擾要盡可能小,所以加上的矩陣要盡可能小。

下面提供兩種處理方法。

1.加法

x=[(1+3^(0.5))/2;(1-3^(0.5))/2;3^(0.5)];i=1;f=1;

e=[0.01,0,0;0,0,0;0,0,0小矩陣e

while(log10(norm(f))>-15)

a=x(1,i);b=x(2,i);c=x(3,i);

f=[a^2+b^2+c^2-5;a+b-1;a+c-3];

df=[2*a,2*b,2*c;1,1,0;1 0 1];

if(abs(det(df))>10^(-3根據的行列式的值來確定不同的迭代方案

x(:,i+1)=x(:,i)-df^(-1)*f;

else

x(:,i+1)=x(:,i)-(df+e)^(-1)*f加上乙個小的矩陣e

endi=i+1;

end結果:x1=5/3,x2=-2/3,x3=4/3

2.減法

x=[(1+3^(0.5))/2;(1-3^(0.5))/2;3^(0.5)];i=1;f=1;

e=[0.01,0,0;0,0,0;0,0,0小矩陣e

while(log10(norm(f))>-15)

a=x(1,i);b=x(2,i);c=x(3,i);

f=[a^2+b^2+c^2-5;a+b-1;a+c-3];

df=[2*a,2*b,2*c;1,1,0;1 0 1];

if(abs(det(df))>10^(-3根據的行列式的值來確定不同的迭代方案

x(:,i+1)=x(:,i)-df^(-1)*f;

else

x(:,i+1)=x(:,i)-(df-e)^(-1)*f減去乙個小的矩陣e

endi=i+1;

end結果:x1=1,x2=-0,x3=2

採用不同的處理方法,會收斂到兩個不同的值。這應該是因為在初始點處,兩種不同方法使後來的迭代分別在初始點的兩邊進行,然後收斂到了不同的解上面。帶入題中,兩個解都是正確的。

兩種方法都用了十四步得到要求精度的解,收斂的速度很快,可見這樣的處理還是合適的,

四、討論

本次作業使用了牛頓法。牛頓法說到底就是將非線性問題在某個區域性轉化為線性問題(只保留到一階導),然後用一步又一步的線性運算向解靠近,最終的到真正的解。但是這其中會遇到一些麻煩,奇異矩陣就是其一。

奇異矩陣本質上而言,就是牛頓法在某一步迭代中得到的線性方程組(以矩陣的形式呈現)是沒有解,或者使結果與上一步迭代的結果相差太遠,這都對收斂有害。當然我們清楚的知道,我們每一步並不是要得到乙個精確解,而是乙個更靠近解的結果,所以我們可以對方程組稍作變化,比如讓矩陣加上或減去乙個小的矩陣,得到乙個近似的解。上面的題也支援了這樣的處理,迭代的結果仍然會收斂到正確的解上。

第五次作業 學生

國際 第五次作業 第9章 姓名學號專業 班級 一 單項選擇題 1.李斯特 保護主義的主要特點 a.保護幼稚工業 b.保護成熟工業 c.保護壟斷工業 d.保護衰退工業 2.亞當 斯密 大衛 李嘉圖 赫克歇爾 俄林的學說都是主張 a.公平 b.自由 c.保護 d.管理 3.70年代以來,西方國家在 自由...

計算方法第二次上機作業

gegebao 摘要 程式基於matlab,包括問題陳述 演算法與程式 結果與分析 討論四個部分。一 問題陳述 數學上已經證明了 成立,所以可以通過積分來計算的近似值。1 分別使用矩形 梯形和simpson復合求積公式計算的近似值。選擇不同的h,對於每種求積公式,試將誤差刻畫成h的函式,並比較各方面...

計算方法第五章作業答案

第五章作業答案 習題五p119 2.解 1 所給方程組可化為如下等價方程組jacobi迭代矩陣為 因 故jacobi迭代法和gauss seidel迭代法都收斂。jacobi迭代格式分量表示式為 gauss seidel迭代格式的分量表示式為取,代入上述兩種迭代格式分別計算,直到滿足精度要求為止。用...