第一篇:數(shù)值分析課程實(shí)驗(yàn)報(bào)告
《數(shù)值分析》課程實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)名稱 用二分法和迭代法求方程的根
成績
一、實(shí)驗(yàn)?zāi)康?/span>
掌握利用二分法以及迭代法求方程近似根的方法,并學(xué)會運(yùn)用 matlab 軟件編寫程序,求解出方程的根,對迭代法二分法進(jìn)一步認(rèn)識并靈活運(yùn)用。
二、實(shí)驗(yàn)內(nèi)容
比較求方程 5 0xx e ? ? 的根,要求精確到小數(shù)點(diǎn)后的第 4 位 1.在區(qū)間[0,1]內(nèi)用二分法; 2.用迭代法1/5kxkx e??,取初值00.25 x ?.三、算法描述
1、二分法:二分法是最簡單的求根方法,它是利用連續(xù)函數(shù)的零點(diǎn)定理,將汗根區(qū)間逐次減半縮小,取區(qū)間的中點(diǎn)構(gòu)造收斂點(diǎn)列{ }來逼近根 x.2、迭代法:迭代法是一種逐次逼近的方法,其步驟是首先給定一個(gè)粗糙的初始值,然后用一個(gè)迭代公式反復(fù)修正這個(gè)值,知道滿足要求為止。
四、實(shí)驗(yàn)步驟1、二分法:
(1)計(jì)算 f(x)在區(qū)間[0,1]端點(diǎn)處的值 f(0)和 f(1)的值;
(2)計(jì)算 f(x)在區(qū)間【0,1】的中點(diǎn)(0+1)/2=1/2 處的值 f((a+b)/2);
(3)如果函數(shù)值 f(1/2)=0,則 1/2 是 f(x)=0 的實(shí)根,輸出根 x,終止;否則繼續(xù)轉(zhuǎn)(4)繼續(xù)做檢驗(yàn)。由于 f(1/2)≠0,所以繼續(xù)做檢驗(yàn)。
(4)如果函數(shù)值 f(0)* f(1/2)<0,則根在區(qū)間[0,1/2]內(nèi),這時(shí)以 1/2 代表 1;否則以 1/2 代表 0;,此時(shí)應(yīng)該用 1/2 代表 1.(5)重復(fù)執(zhí)行(2)(3)(4)步,直到滿足題目所要求的精度,算法結(jié)束。2、迭代法
(1)提供迭代初值25.00? x;(2)計(jì)算迭代值)(0 1x x ? ?;
(3)檢查|0 1x x ?|,若? ? ? | |0 1x x,則以1x代替0x轉(zhuǎn)(2)步繼續(xù)迭代;當(dāng)? ? ? | |0 1x x時(shí)
終止計(jì)算,取作為所求結(jié)果。
五、程序
(1)二分法程序:
function y=bisection(fx,xa,xb,n,delta)
x=xa;fa=5*x-exp(x);
x=xb;fb=5*x-exp(x);
disp(“[
n
xa
xb
xc
fc
]”);
for i=1:n
xc=(xa+xb)/2;x=xc;fc=5*x-exp(x);
X=[i,xa,xb,xc,fc];
disp(X),if fc==0,end
if fc*fa<0
xb=xc;
else xa=xc;
end
if(xb-xa) end (2)迭代法程序: function y=diedai(fx,x0,n,delta) disp(“[ k xk ]”); for i=1:n x1=(exp(x0))/5; X=[i,x1]; disp(X); if abs(x1-x0) fprintf(“The procedure was successful”) return else i=i+1; x0=x1; end end 六、實(shí)驗(yàn)結(jié)果及分析 (1)二分法: 實(shí)驗(yàn)結(jié)果如下: [ n xa xb xc fc ] 1.0000 0 1.0000 0.5000 0.8513 2.0000 0 0.5000 0.2500 --0.0340 3.0000 0.2500 0.5000 0.3750 0.4200 4.0000 0.2500 0.3750 0.3125 0.1957 5.0000 0.2500 0.3125 0.2813 0.0815 6.0000 0.2500 0.2813 0.2656 0.0239 7.0000 0.2500 0.2656 0.2578 --0.0050 8.0000 0.2578 0.2656 0.2617 0.0094 9.0000 0.2578 0.2617 0.2598 0.0022 10.0000 0.2578 0.2598 0.2588 --0.0014 11.0000 0.2588 0.2598 0.2593 0.0004 12.0000 0.2588 0.2593 0.2590 --0.0005 13.0000 0.2590 0.2593 0.2592 --0.0001 14.0000 0.2592 0.2 593 0.2592 0.0002 15.0000 0.2592 0.2592 0.2592 0.0001 依據(jù)題目要求的精度,則需做二分十四次,由實(shí)驗(yàn)數(shù)據(jù)知 x=0.2592 即為所求的根 (2)迭代法: 實(shí)驗(yàn)結(jié)果如下: 根據(jù)題目精度要求,故所求根為 x=0.2592.對二分法和迭代法的觀察和分析我們可以知道,二分法的優(yōu)點(diǎn)是方法比較簡單,編程比較容易,只是二分法只能用于求方程的近似根,不能用于求方程的復(fù)根,且收斂速度慢。而迭代法的收斂速度明顯大于二分法的速度。 數(shù)值分析實(shí)驗(yàn)報(bào)告 一、實(shí)驗(yàn)3.1 題目: 考慮線性方程組,,編制一個(gè)能自動選取主元,又能手動選取主元的求解線性代數(shù)方程組的Gauss消去過程。 (1)取矩陣,則方程有解。取計(jì)算矩陣的條件數(shù)。分別用順序Gauss消元、列主元Gauss消元和完全選主元Gauss消元方法求解,結(jié)果如何? (2)現(xiàn)選擇程序中手動選取主元的功能,每步消去過程都選取模最小或按模盡可能小的元素作為主元進(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ì)算),則對k行以下各行計(jì)算,分別用乘以增廣矩陣的第行并加到第行,則可將增廣矩陣中第列中以下的元素消為零;重復(fù)此方法,從第1步進(jìn)行到第n-1步,則可以得到最終的增廣矩陣,即; 列主元高斯消去法: 第k步消去中,在增廣矩陣中的子方陣中,選取使得,當(dāng)時(shí),對中第行與第行交換,然后按照和順序消去法相同的步驟進(jìn)行。重復(fù)此方法,從第1步進(jìn)行第n-1步,就可以得到最終的增廣矩陣,即; 完全主元高斯消去法: 第k步消去中,在增廣矩陣中對應(yīng)的子方陣中,選取使得,若或,則對中第行與第行、第列與第列交換,然后按照和順序消去法相同的步驟進(jìn)行即可。重復(fù)此方法,從第1步進(jìn)行到第n-1步,就可以得到最終的增廣矩陣,即; 接下來,分析回代過程求解的公式,容易看出,對上述任一種消元法,均有以下計(jì)算公式: 2.實(shí)驗(yàn)程序的設(shè)計(jì) 一、輸入實(shí)驗(yàn)要求及初始條件; 二、計(jì)算系數(shù)矩陣A的條件數(shù)及方程組的理論解; 三、對各不同方法編程計(jì)算,并輸出最終計(jì)算結(jié)果。 3.計(jì)算結(jié)果及分析 (1) 先計(jì)算系數(shù)矩陣的條件數(shù),結(jié)果如下,可知系數(shù)矩陣的條件數(shù)較大,故此問題屬于病態(tài)問題,b或A的擾動都可能引起解的較大誤差; 采用順序高斯消去法,計(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í),其選取的主元值和矩陣中其他元素大小相近,因此順序高斯消去法方式并沒有對結(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í)的舍入誤差,對最終結(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),對這個(gè)方程組而言,順序高斯消去選取的主元恰好事模盡量小的元素,而由于列主元和完全主元選取的元素為8,與4在數(shù)量級上差別小,所以計(jì)算過程中的累積誤差也較小,最終4種方法的輸出結(jié)果均較為精確。 在這里,具體解釋一下順序法與模最小法的計(jì)算結(jié)果完全一致的原因。該矩陣在消元過程中,每次選取主元的一列只有兩個(gè)非零元素,對角線上的元素為4左右,而其正下方的元素為8,該列其余位置的元素均為0。在這樣的情況下,默認(rèn)的主元也就是該列最小的主元,因此兩種方法所得到的計(jì)算結(jié)果是一致的。 理論上說,完全高斯消去法的誤差最小,其次是列主元高斯消去法,而選取模最小的元素作為主元時(shí)的誤差最大,但是由于方程組的特殊性(元素相差不大并且維度不高),這個(gè)理論現(xiàn)象在這里并沒有充分體現(xiàn)出來。 (3) 時(shí),重復(fù)上述實(shí)驗(yàn)過程,各種方法的計(jì)算結(jié)果如下所示,在這里,仍采用無窮范數(shù)衡量絕對誤差。 順序高斯消去法 列主元高斯消去 完全主元高斯消去 選取模最小或盡可能小元素作為主元消去 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í)的誤差增長了大約1000倍,這是由于計(jì)算過程中舍入誤差的不斷累積所致。所以,如果進(jìn)一步增加矩陣的維數(shù),應(yīng)該可以看出更明顯的現(xiàn)象。 (4) 不同矩陣維度下的誤差如下,在這里,為方便起見,選取2-條件數(shù)對不同維度的系數(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 從上表可以看出,隨著維度的增加,不同方法對計(jì)算誤差的影響逐漸體現(xiàn),并且增長較快,這是由于舍入誤差逐步累計(jì)而造成的。不過,方法二與方法三在維度小于40的情況下都得到了精確解,這兩種方法的累計(jì)誤差遠(yuǎn)比方法一和方法四慢;同樣地,出于與前面相同的原因,方法一與方法四的計(jì)算結(jié)果保持一致,方法二與方法三的計(jì)算結(jié)果保持一致。 4.結(jié)論 本文矩陣中的元素差別不大,模最大和模最小的元素并沒有數(shù)量級上的差異,因此,不同的主元選取方式對計(jì)算結(jié)果的影響在維度較低的情況下并不明顯,四種方法都足夠精確。 對比四種方法,可以發(fā)現(xiàn)采用列主元高斯消去或者完全主元高斯消去法,可以盡量抑制誤差,算法最為精確。不過,對于低階的矩陣來說,四種方法求解出來的結(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('求解方式序號:'); %賦值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ì) 對任意線性方程組,分析各種方法的計(jì)算公式如下,(1)Gauss消去法: 首先對系數(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迭代法),對迭代法設(shè)定初值,此外SOR方法還需要設(shè)定松弛因子; 三、進(jìn)行計(jì)算,直至滿足誤差要求(對迭代法,設(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.***; 對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),松弛因子的取值對迭代速度造成了不同的影響,上述四種方法中,松弛因子=0.5時(shí),收斂相對較快。 綜上,四種算法的結(jié)果列表如下: 算法 Gauss消去法 Jacobi法 GS法 SOR法(?。?/p> 迭代次數(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í),不能除盡情況下會出現(xiàn)舍入誤差,在進(jìn)行LU分解時(shí)也存在這個(gè)問題,所以最后得到的結(jié)果不是方程的精確解,但結(jié)果顯示該方法的誤差非常?。?/p> 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)有了明顯的提高;另外,對不同的,SOR方法的迭代速度會相應(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矩陣的求解; 對于GS迭代法和SOR迭代法,兩種方法均收斂,GS迭代法是SOR迭代法松弛因子取值為1的特例,SOR方法受到取值的影響,會有不同的收斂情況。可以得出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é)果存在很大的誤差。而對于收斂的迭代法,可以通過選取最優(yōu)松弛因子的方法來求解,雖然迭代次數(shù)相對較多,但是結(jié)果較為精確。 總體來看,對于一般病態(tài)方程組的求解,可以采用以下方式: 1.低維度下采用Gauss消去法直接求解是可行的; Jacobi迭代方法不適宜于求解病態(tài)問題; GS迭代方法可以解決維數(shù)較低的病態(tài)問題,但其譜半徑非常趨近于1,導(dǎo)致迭代算法收斂速度很慢,維數(shù)較大的時(shí)候,GS法也不再收斂; SOR方法較適合于求解病態(tài)問題,特別是矩陣維數(shù)較高的時(shí)候,其優(yōu)勢更為明顯。 2.采用高精度的運(yùn)算,如選用雙倍或更多倍字長的運(yùn)算,可以提高收斂速度; 3.可以對原方程組作某些預(yù)處理,從而有效降低系數(shù)矩陣的條件數(shù)。 4.實(shí)驗(yàn)結(jié)論 (1)對Hibert矩陣問題,其條件數(shù)會隨著維度的增加迅速增加,病態(tài)性會越來越明顯;在維度較低的時(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('求解方式序號:'); %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 題目: 對牛頓法和擬牛頓法。進(jìn)行非線性方程組的數(shù)值求解 (1)用上述兩種方法,分別計(jì)算下面的兩個(gè)例子。在達(dá)到精度相同的前提下,比較其迭代次數(shù)、CPU時(shí)間等。 (2)取其他初值,結(jié)果又如何?反復(fù)選取不同的初值,比較其結(jié)果。 (3)總結(jié)歸納你的實(shí)驗(yàn)結(jié)果,試說明各種方法適用的問題。 1.算法設(shè)計(jì) 對需要求解的非線性方程組而言,牛頓法和擬牛頓法的迭代公式如下,(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í)間更長。 之后求解方程組(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í)間較長。 (2)對方程組(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)入長期循環(huán)計(jì)算中 迭代次數(shù) -- CPU計(jì)算時(shí)間/s 4.033868 -- 計(jì)算結(jié)果 0.*** 1.*** 0.*** Matlab警告矩陣接近奇異值,程序進(jìn)入長期循環(huán)計(jì)算中 迭代次數(shù) -- CPU計(jì)算時(shí)間/s 12.243263 -- 從上表可以發(fā)現(xiàn),方程組(1)存在另一個(gè)在(9.2,-5.6,18.1)T附近的不動點(diǎn),初值的選取會直接影響到牛頓法和擬牛頓法最后的收斂點(diǎn)。 總的來說,設(shè)定的初值離不動點(diǎn)越遠(yuǎn),需要的迭代次數(shù)越多,因而初始值的選取非常重要,合適的初值可以更快地收斂,如果初始值偏離精確解較遠(yuǎn),會出現(xiàn)迭代次數(shù)增加直至無法收斂的情況; 由于擬牛頓法是一種近似方法,擬牛頓法需要的的迭代次數(shù)明顯更多,而且收斂情況不如牛頓法好(初值不夠接近時(shí),甚至?xí)霈F(xiàn)奇異矩陣的情況),但由于牛頓法的求解比較復(fù)雜,計(jì)算時(shí)間較長; 同樣的,對方程組(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)壓縮映射原理,可以在更大的范圍上選取初值并最終收斂到精確解附近; 在初始值較接近于不動點(diǎn)時(shí),牛頓法和擬牛頓法計(jì)算所得到的結(jié)果是基本相同的,雖然迭代次數(shù)有所差別,但計(jì)算總的所需時(shí)間相近。 (3) 牛頓法在迭代過程中用到了矩陣的求逆,其迭代收斂的充分條件是迭代滿足區(qū)間上的映內(nèi)性,對于矩陣的求逆過程比較簡單,所以在較大區(qū)間內(nèi)滿足映內(nèi)性的問題適合應(yīng)用牛頓法進(jìn)行計(jì)算。一般而言,對于函數(shù)單調(diào)或者具有單值特性的函數(shù)適合應(yīng)用牛頓法,其對初始值敏感程度較低,算法具有很好的收斂性。 另外,需要說明的是,每次計(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é)論 對牛頓法和擬牛頓法,都存在初始值越接近精確解,所需的迭代次數(shù)越小的現(xiàn)象; 在應(yīng)用上,牛頓法和擬牛頓法各有優(yōu)勢。就迭代次數(shù)來說,牛頓法由于更加精確,所需的迭代次數(shù)更少;但就單次迭代來說,牛頓法由于計(jì)算步驟更多,且計(jì)算更加復(fù)雜,因而每次迭代所需的時(shí)間更長,而擬牛頓法由于采用了簡化的近似公式,其每次迭代更加迅速。當(dāng)非線性方程組求逆過程比較簡單時(shí),如方程組1的情況時(shí),擬牛頓法不具有明顯的優(yōu)勢;而當(dāng)非線性方程組求逆過程比較復(fù)雜時(shí),如方程組2的情況,擬牛頓法就可以體現(xiàn)出優(yōu)勢,雖然循環(huán)次數(shù)有所增加,但是CPU耗時(shí)反而更少。 另外,就方程組壓縮映射區(qū)間來說,一般而言,對于在區(qū)間內(nèi)函數(shù)呈現(xiàn)單調(diào)或者具有單值特性的函數(shù)適合應(yīng)用牛頓法,其對初始值敏感程度較低,使算法具有很好的收斂性;而擬牛頓法由于不需要在迭代過程中對矩陣求逆,而是利用差商替代了對矩陣的求導(dǎo),所以即使初始誤差較大時(shí),其倒數(shù)矩陣與差商偏差也較小,所以對初始值的敏感程度較小。 附錄:程序代碼 %方程1,牛頓法 tic; format long; %%初值 disp('請輸入初值'); 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('請輸入初值'); 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('請輸入初值'); 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('請輸入初值'); 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; 學(xué)號: 姓名: 實(shí)驗(yàn)二插值法 實(shí)驗(yàn)2.1(多項(xiàng)式插值的振蕩現(xiàn)象) 問題提出:考慮一個(gè)固定的區(qū)間上用插值逼近一個(gè)函數(shù)。顯然拉格朗日插值中使用的節(jié)點(diǎn)越多,插值多項(xiàng)式的次數(shù)就越高。我們自然關(guān)心插值多項(xiàng)式的次數(shù)增加時(shí),L(x)是否也更加靠近被逼近的函數(shù)。龍格給出了一個(gè)極著名例子。設(shè)區(qū)間[-1,1]上函數(shù) f(x)=1/(1+25x^2) 實(shí)驗(yàn)內(nèi)容:考慮區(qū)間[-1,1]的一個(gè)等距劃分,分點(diǎn)為: x(i)=-1+2i/n,i=0,1,2…,n 則拉格朗日插值多項(xiàng)式為: L(x)=∑l(i)(x)/(1+25x(j)^2)i=0,1,…n 其中l(wèi)(i)(x), i=0,1,…n,n是n次拉格朗日插值基函數(shù)。 實(shí)驗(yàn)要求: ⑴ 選擇不斷增大的分點(diǎn)數(shù)目n=2,3…,畫出f(x)及插值多項(xiàng)式函數(shù)L(x)在[-1,1]上的圖象,比較分析實(shí)驗(yàn)結(jié)果。 (2)選擇其它的函數(shù),例如定義在區(qū)間[-5,5]上的函數(shù) h(x)=x/(1+x^4),g(x)=arctanx 重復(fù)上述的實(shí)驗(yàn)看其結(jié)果如何。 (3)區(qū)間[a,b]上切比雪夫點(diǎn)的定義為: xk=(b+a)/2+((b-a)/2)cos((2k-1)π/(2(n+1))),k=1,2,^,n+1 以x1,x2^x(n+1)為插值節(jié)點(diǎn)構(gòu)造上述各函數(shù)的拉格朗日插值多項(xiàng)式,比較其結(jié)果。 實(shí)驗(yàn)過程: 程序:。。。。。。。。。。。。。。。。 數(shù)值實(shí)驗(yàn)結(jié)果及分析:。。。。。。。。。。。。。。 討論。。。。。。。。。。。。。。。。。。。 實(shí)驗(yàn)總結(jié):。。。。。。。。。。。。。。。 摘要:“數(shù)值分析”是計(jì)算機(jī)科學(xué)比較重要的基礎(chǔ)課之一,從多方面就“數(shù)值分析”課程教學(xué)中存在的問題以及提高教學(xué)質(zhì)量、學(xué)生興趣的教學(xué)方法進(jìn)行了探討。 關(guān)鍵詞:數(shù)值分析;教學(xué)方法;實(shí)踐 作者簡介:黃文芝(1978-),女,湖北武漢人,武漢工程大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,講師;張蕾(1982-),女,湖北武漢人,武漢工程大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,講師。(湖北?武漢?430073) 基金項(xiàng)目:本文系武漢工程大學(xué)青年科學(xué)基金項(xiàng)目(項(xiàng)目編號:q201107)的研究成果。 中圖分類號:g642.0?????文獻(xiàn)標(biāo)識碼:a?????文章編號:1007-0079(2012)05-0039-02 “數(shù)值分析”也稱計(jì)算方法,它與計(jì)算工具發(fā)展密切相關(guān)。計(jì)算方法是數(shù)學(xué)的一個(gè)組成部分,很多方法都與當(dāng)時(shí)的數(shù)學(xué)家名字相聯(lián)系,如牛頓插值公式,方程求根的牛頓法,解線性方程組的高斯消去法,多項(xiàng)式求值的秦九韶算法,計(jì)算積分的辛普森公式等,這表明計(jì)算方法就是數(shù)學(xué)的一部分,它沒有形成單獨(dú)的學(xué)科分支。而計(jì)算機(jī)出現(xiàn)以后,計(jì)算方法迅速發(fā)展并形成數(shù)學(xué)科學(xué)的一個(gè)獨(dú)立分支――計(jì)算數(shù)學(xué)。這說明了計(jì)算方法與計(jì)算機(jī)的密切聯(lián)系,以及在計(jì)算機(jī)研究領(lǐng)域的重要性。并且數(shù)值分析在計(jì)算機(jī)相關(guān)領(lǐng)域應(yīng)用比較廣泛,比如在數(shù)學(xué)建模中,在圖像處理中,在信號處理中等都會用到數(shù)值分析中相關(guān)的一些知識。這些都說明“數(shù)值分析”是計(jì)算機(jī)專業(yè)學(xué)生的一門核心專業(yè)基礎(chǔ)課程。 “數(shù)值分析”課程的教學(xué)內(nèi)容主要包括三部分,一部分是插值擬合,一部分是方程和方程組求解,另外一部分是常微分方程初值問題數(shù)值解。而數(shù)值積分也是在插值的基礎(chǔ)進(jìn)行,故筆者把它歸為插值擬合部分。這些內(nèi)容看上去都是以前學(xué)過的知識,積分是在高等數(shù)學(xué)里學(xué)過的,而方程和方程組求解更是中學(xué)就重點(diǎn)講解過的知識,學(xué)生剛開始接觸這門課的時(shí)候會和以前所學(xué)的純數(shù)學(xué)學(xué)習(xí)的思想結(jié)合起來。通過“數(shù)值分析”課程的教學(xué),培養(yǎng)學(xué)生用計(jì)算機(jī)解決問題的能力,并且為后續(xù)階段的專業(yè)課程打下基礎(chǔ)。 筆者是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的一名老師,使用的教材是清華大學(xué)出版的李慶揚(yáng)等編的《數(shù)值分析》,本文就當(dāng)前“數(shù)值分析”課程在計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)教學(xué)中存在的一些問題和教學(xué)方法、教學(xué)模式等方面進(jìn)行討論,其目的在于改進(jìn)教學(xué)方法和手段,提高學(xué)生興趣和教學(xué)效果。 一、“數(shù)值分析”課程教學(xué)中存在的問題 1.數(shù)學(xué)理論強(qiáng),公式繁多冗長,學(xué)生學(xué)習(xí)興趣不高 “數(shù)值分析”是數(shù)學(xué)的一部分,具有與其他數(shù)學(xué)課程一樣的理論性強(qiáng)的特點(diǎn),但“數(shù)值分析”又還有一些和以往學(xué)生所學(xué)各類數(shù)學(xué)課程不同的特點(diǎn)。首先,“數(shù)值分析”研究的是計(jì)算算法,用計(jì)算機(jī)來解決問題,以前學(xué)生學(xué)習(xí)數(shù)學(xué)課程大都是從理論學(xué)習(xí)到作業(yè)聯(lián)系,涉及的知識邏輯推理的特性比較強(qiáng),并且以往研究的大多數(shù)都是連續(xù)的,這種研究對象的差異使得學(xué)生不能很快接受,思想不能很快轉(zhuǎn)變過來。其次,“數(shù)值分析”比以往所學(xué)的數(shù)學(xué)課程的公式更加繁多,更加冗長,比如解線性方程組,如果用以前的知識,學(xué)生都會解,但現(xiàn)在解線性方程組不僅僅是要得出結(jié)果,更重要的是解線性方程組的算法以及它的實(shí)現(xiàn),這就涉及到至少4個(gè)公式,而我們要弄清楚了這些公式的來歷才能通過編程實(shí)現(xiàn)這個(gè)算法,這也是學(xué)生不感興趣的主要原因。 另外,由于學(xué)生對數(shù)學(xué)課程以及對數(shù)學(xué)公式的害怕,對“數(shù)值分析”這門課程的重要性認(rèn)識不足,當(dāng)學(xué)生學(xué)習(xí)遇到困難時(shí),容易失去學(xué)習(xí)興趣,從而放棄學(xué)習(xí)。雖然“數(shù)值分析”是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的基礎(chǔ)課,是大多數(shù)課程的基礎(chǔ),但學(xué)生還不能理會到“數(shù)值分析”這門課程對以后課程的重要性,對于大三的學(xué)生來說他們現(xiàn)在所學(xué)的課程還沒能很好地得到應(yīng)用,而對他們比較實(shí)際的用處――找工作也沒有顯現(xiàn)出比較重要的作用,因而學(xué)生會在潛意識里無視這門課,在課程學(xué)習(xí)遇到困難的情況下,他們往往會選擇放棄學(xué)習(xí)。 2.知識點(diǎn)多,信息量大,掌握困難 這門課的知識點(diǎn)比較多,信息量比較大,對于理學(xué)的學(xué)生來說該課程學(xué)時(shí)比較多,但筆者承擔(dān)的“數(shù)值分析”課程的學(xué)時(shí)是48學(xué)時(shí),并且完全是講授部分,然而相對于課程所包含的大量內(nèi)容,這些學(xué)時(shí)數(shù)遠(yuǎn)遠(yuǎn)不夠,比如函數(shù)逼近與快速傅里葉變換,它涉及到范數(shù),賦范線性空間,歐氏空間,三角插值等許多概念,想讓學(xué)生在規(guī)定的學(xué)時(shí)數(shù)內(nèi)真正掌握這些概念比較困難,尤其是對計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生而言。因?yàn)槔韺W(xué)院的學(xué)生學(xué)過實(shí)變函數(shù)、泛函分析,所以理解這些概念就略顯容易些。 3.重理論,輕實(shí)踐 當(dāng)前“數(shù)值分析”課程教學(xué)過程中,仍然存在理論與實(shí)踐脫離的現(xiàn)象,雖然這門課實(shí)踐比較重要,但鑒于課時(shí)的安排,大多數(shù)教師只能按書本知識來講,學(xué)生聽,學(xué)生沒理解理論的用處,沒能立刻就在實(shí)踐中體現(xiàn)出來,因此使得很多學(xué)生只是為了考試而學(xué)習(xí),為了學(xué)習(xí)而學(xué)習(xí),不知道它的作用,考完就還給老師。這樣他們也只獲得了知識的皮毛,而沒有抓住知識的精髓和實(shí)質(zhì)。 二、“數(shù)值分析”課程教學(xué)方法淺談 1.強(qiáng)調(diào)課程的重要性,提高學(xué)生的學(xué)習(xí)興趣 為了讓學(xué)生正確對待這門課,應(yīng)該讓學(xué)生充分認(rèn)識到“數(shù)值分析”課程在計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)中的重要性。在組織教學(xué)的過程中,可以安排一些有實(shí)踐經(jīng)驗(yàn)的學(xué)生介紹經(jīng)驗(yàn)(這樣學(xué)生更好理解,更容易相信,更實(shí)際),聯(lián)系具體的研究方向,給出簡單的例子,論述“數(shù)值分析”在計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)方向中的應(yīng)用,讓學(xué)生切實(shí)感受到“數(shù)值分析”課程是后續(xù)課程學(xué)習(xí)的基礎(chǔ),應(yīng)用比較廣泛。另外,在教學(xué)中教師還必須聯(lián)系實(shí)際,在課程中穿插一些有實(shí)際應(yīng)用意義的例子,比如現(xiàn)在很多數(shù)學(xué)建模就用到“數(shù)值分析”的內(nèi)容,可以就里面簡單的例子引用一個(gè)。這樣讓學(xué)生了解到“數(shù)值分析”不是空洞抽象的理論,而是能夠解決實(shí)際問題的工具,通過這些方法,使學(xué)生逐步樹立“數(shù)值分析”比較有用,應(yīng)該學(xué)好“數(shù)值分析”課程的觀念。 然而僅有應(yīng)該學(xué)好該課程的觀念還不夠,還應(yīng)該從各個(gè)方面提高學(xué)生學(xué)習(xí)的興趣,興趣是最好的老師,只有有了興趣,學(xué)生才會真正自主去學(xué)習(xí),而不是被動的,為了考試而學(xué)習(xí)。如何讓枯燥的課程變得生動有趣是值得研究的問題。在實(shí)際教學(xué)過程中,可以采用學(xué)生自己講解,學(xué)生之間互相提問等方法,另外也可以編一些小程序,演示計(jì)算機(jī)解題的過程,這樣讓學(xué)生體會到雖然計(jì)算機(jī)的功能比較強(qiáng)大,還是需要人腦來控制,靈魂還是人。這樣能使學(xué)生在整個(gè)課題中能主動思考,而不是被動接收。 2.合理取舍教學(xué)內(nèi)容,把握全局,突出重點(diǎn) “數(shù)值分析”課程所涉及的內(nèi)容非常豐富,但現(xiàn)在課時(shí)有限,因此合理取舍教學(xué)內(nèi)容非常重要,應(yīng)該在有限的學(xué)時(shí)內(nèi),讓學(xué)生掌握比較重要的理論方法,比如根據(jù)學(xué)生專業(yè)的特點(diǎn),可以將主要的教學(xué)時(shí)間安排在講解誤差分析,插值,數(shù)值積分,方程和方程組的解法上面。在矩陣特征值計(jì)算方面,有時(shí)間的條件下可以簡單介紹思想方法,而對于常微分方程初值問題的數(shù)值解可以舍去,因?yàn)楸緦I(yè)的學(xué)生沒有學(xué)常微分方程,所以對常微分方程初值問題的數(shù)值解會無法理解。 3.合理使用多種教學(xué)方法和手段 傳統(tǒng)的“黑板+粉筆”的教學(xué)模式對數(shù)學(xué)課程的教學(xué)非常重要,通過板書學(xué)生可以了解教師處理問題的思維過程,然而鑒于“數(shù)值分析”的特點(diǎn),又不能完全用傳統(tǒng)的教學(xué)模式,因?yàn)椤皵?shù)值分析”課程中有大量的矩陣和公式,如果單純使用“黑板+粉筆”,黑板無法板書完整,如果擦掉原先板書的內(nèi)容又無法把前后聯(lián)系起來講解,而使用多媒體就可以解決這一問題。另外,有條件的學(xué)??梢园焉险n安排到有投影的機(jī)房,在講解算法時(shí)教師可以演示一些程序,學(xué)生學(xué)起來就不會覺得完全是在聽數(shù)學(xué)課了。因?yàn)槭怯?jì)算機(jī)專業(yè)的學(xué)生,這樣和他們的聯(lián)系更緊密些,他們也可以通過編程來實(shí)現(xiàn)算法。 4.強(qiáng)調(diào)理論聯(lián)系實(shí)踐,培養(yǎng)解決問題的能力 “數(shù)值分析”這門課重點(diǎn)講授的是算法,而學(xué)生如果沒有很好的實(shí)踐,對這些算法的應(yīng)用只能停留在死記硬背上,這不是學(xué)習(xí)的目的。本來計(jì)算機(jī)專業(yè)也應(yīng)該突出學(xué)生的動手能力,所以對講授的每個(gè)算法都應(yīng)盡可能讓學(xué)生編程來實(shí)現(xiàn),這樣一來可以鞏固學(xué)生學(xué)到的知識,二來也可以讓學(xué)生明白這門課不是單純的數(shù)學(xué)課,而是和實(shí)際聯(lián)系比較緊密的一門課。當(dāng)然要實(shí)現(xiàn)每個(gè)算法都編程,在所授課的學(xué)時(shí)內(nèi)是無法完成的,這樣就要鼓勵學(xué)生自己主動去編程,可以采取一些獎勵的措施,比如對編程完成比較好的學(xué)生可以適當(dāng)提高平時(shí)成績等。學(xué)生自己主動的學(xué)習(xí)有利于提高其學(xué)習(xí)興趣,開發(fā)學(xué)生智力,培養(yǎng)學(xué)生解決問題的能力,從而提高學(xué)生的綜合素質(zhì)。 三、總結(jié) 隨著計(jì)算機(jī)的廣泛應(yīng)用,“數(shù)值分析”課程作為計(jì)算機(jī)科學(xué)與技術(shù)的一門專業(yè)基礎(chǔ)課程,在學(xué)生學(xué)習(xí)和工作中越來越重要,因此“數(shù)值分析”課程教學(xué)也應(yīng)該不斷更新知識結(jié)構(gòu),豐富教學(xué)內(nèi)容,改進(jìn)教學(xué)手段,以提高學(xué)生學(xué)習(xí)興趣,提高教學(xué)質(zhì)量,培養(yǎng)學(xué)習(xí)的能力,從而為后續(xù)課程的學(xué)習(xí)和將來的工作打下堅(jiān)實(shí)的基礎(chǔ)。 《數(shù)值計(jì)算方法》課程教學(xué)大綱 課程名稱:數(shù)值計(jì)算方法/Mathods of Numerical Calculation 課程代碼:0806004066 開課學(xué)期:4 學(xué)時(shí)/學(xué)分:56學(xué)時(shí)/3.5學(xué)分(課內(nèi)教學(xué) 40 學(xué)時(shí),實(shí)驗(yàn)上機(jī) 16 學(xué)時(shí),課外 0 學(xué)時(shí))先修課程:《高等代數(shù)》、《數(shù)學(xué)分析》、《常微分方程》、《C語言程序設(shè)計(jì)》 適用專業(yè):信息與計(jì)算科學(xué) 開課院(系):數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院 一、課程的性質(zhì)與任務(wù) 數(shù)值計(jì)算方法是數(shù)學(xué)與應(yīng)用數(shù)學(xué)專業(yè)的核心課程之一。它是對一個(gè)數(shù)學(xué)問題通過計(jì)算機(jī)實(shí)現(xiàn)數(shù)值運(yùn)算得到數(shù)值解答的方法及其理論的一門學(xué)科。本課程的任務(wù)是架設(shè)數(shù)學(xué)理論與計(jì)算機(jī)程序設(shè)計(jì)之間的橋梁,建立解決數(shù)學(xué)問題的有效算法,討論其收斂性和數(shù)值穩(wěn)定性并尋找誤差估計(jì)式,培養(yǎng)學(xué)生數(shù)值計(jì)算的能力。 二、課程的教學(xué)內(nèi)容、基本要求及學(xué)時(shí)分配 (一)誤差分析 2學(xué)時(shí) 了解數(shù)值計(jì)算方法的主要研究內(nèi)容。2 理解誤差的概念和誤差的分析方法。熟悉在數(shù)值計(jì)算中應(yīng)遵循的一些基本原則。重點(diǎn):數(shù)值計(jì)算中應(yīng)遵循的基本原則。難點(diǎn):數(shù)值算法的穩(wěn)定性。 (二)非線性方程組的求根 8學(xué)時(shí) 理解方程求根的逐步搜索法的含義和思路 掌握方程求根的二分法、迭代法、牛頓法及簡化牛頓法、非線性方程組求根的牛頓法 3 熟悉各種求根方法的算法步驟,并能編程上機(jī)調(diào)試和運(yùn)行或能利用數(shù)學(xué)軟件求非線性方程的近似根。 重點(diǎn):迭代方法的收斂性、牛頓迭代方法。難點(diǎn):迭代方法收斂的階。 (三)線性方程組的解法 10學(xué)時(shí) 熟練掌握高斯消去法 熟練地實(shí)現(xiàn)矩陣的三角分解:Doolittle法、Crout法、Cholesky法、LDR方法。3 掌握線性方程組的直接解法:Doolittle法、Crout法、Cholesky法(平方根法)、改進(jìn)平方根法、追趕法。 4能熟練地求向量和矩陣的1-范數(shù)、2-范數(shù)、?-范數(shù)和條件數(shù)。5 理解迭代法的基本思想,掌握迭代收斂的基本定理。掌握解線性方程組的雅可比(Jacobi)迭代法、高斯-賽德爾(Gauss-Seidel)迭代法、逐次超松馳(SOR)迭代法。7能寫出線性方程組的各種直接解法和間接解法的算法,并能編程上機(jī)運(yùn)行或能利用數(shù)學(xué)軟件求解線性方程組。 重點(diǎn):矩陣的三角分解。 難點(diǎn):線性方程組迭代解法的收斂問題。 (四)插值法 6學(xué)時(shí) 1.了解插值的一般概念和多項(xiàng)式插值的存在唯一性。 2.熟練掌握Lagrange插值、Newton插值、Hermite插值、分段低次插值及三次樣條插值的求解。 3.熟悉曲線擬合的最小二乘法,能熟練地求矛盾方程組的最小二乘解。 4.能對Lagrange插值、Newton插值、Neville插值、Hermite插值、三次樣條插值、線擬合的最小二乘法等編程上機(jī)調(diào)試和運(yùn)行或借助數(shù)學(xué)軟件求插值函數(shù)和曲線擬合。 重點(diǎn):Lagrange插值、Newton插值、Hermite插值。難點(diǎn):三次樣條插值的求解。 (五)最佳逼近多項(xiàng)式的一般理論 5學(xué)時(shí) 了解最佳逼近的基本問題。掌握C[a,b]空間中最佳逼近的唯一性問題。3 了解切貝紹夫定理與Vallee-Poussin定理。 (六)數(shù)值微分與數(shù)值積分 5學(xué)時(shí) 了解數(shù)值積分的基本思想,能夠熟練地確定具體求積公式的代數(shù)精度及確定求積公式的節(jié)點(diǎn)和系數(shù)。熟練地用Newton-cotes公式,Romberg公式,兩點(diǎn)、三點(diǎn)Gauss公式等進(jìn)行數(shù)值積分 重點(diǎn):確定具體求積公式的代數(shù)精度及確定求積公式的節(jié)點(diǎn)和系數(shù)。難點(diǎn):用待定系數(shù)法確定Gauss型求積公式的節(jié)點(diǎn)和系數(shù)。 (七)常微分方程的數(shù)值解 4學(xué)時(shí) 理解常微分方程的數(shù)值解的含義 掌握常微分方程的歐拉解法、R—K方法、亞當(dāng)姆斯方法,理解其算法思想。重點(diǎn):基于數(shù)值積分的方法。難點(diǎn):R—K方法。 三、推薦教材及參考書 推薦教材: 1、張韻華等編著,數(shù)值計(jì)算方法與算法,科學(xué)出版社,2001。 2、馮天祥編著,數(shù)值計(jì)算方法,四川科技出版社,2003。參考書: 1、馮天祥編著,數(shù)值計(jì)算方法理論與實(shí)踐研究,西南交通大學(xué)出版社,2005。 2、李慶揚(yáng)等著,數(shù)值分析,華中理工大學(xué)出版社,2000。 3、林成森著,數(shù)值計(jì)算方法,科學(xué)出版社出版,1999。 4、李慶揚(yáng)等著,現(xiàn)代數(shù)值分析,高等教育出版社,1998。 5封建湖等,計(jì)算方法典型題分析解集,西北工業(yè)大學(xué)出版社,1999。 四、結(jié)合近幾年的教學(xué)改革與研究,對教學(xué)大綱進(jìn)行的新調(diào)整 增加了最佳逼近多項(xiàng)式的一般理論。 大綱制訂者:馮玉明 大綱審定者:陳小春 制訂日期:2008-11-15第二篇:清華大學(xué)數(shù)值分析實(shí)驗(yàn)報(bào)告
第三篇:數(shù)值分析實(shí)驗(yàn)報(bào)告寫作范本
第四篇:“數(shù)值分析”課程教學(xué)改革淺談
第五篇:《數(shù)值計(jì)算方法》課程教學(xué)大綱.