




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)五 解線性方程組的直接方法實(shí)驗(yàn)5.1 (主元的選取與算法的穩(wěn)定性)問題提出:gauss消去法是我們在線性代數(shù)中已經(jīng)熟悉的。但由于計(jì)算機(jī)的數(shù)值運(yùn)算是在一個(gè)有限的浮點(diǎn)數(shù)集合上進(jìn)行的,如何才能確保gauss消去法作為數(shù)值算法的穩(wěn)定性呢?gauss消去法從理論算法到數(shù)值算法,其關(guān)鍵是主元的選擇。主元的選擇從數(shù)學(xué)理論上看起來平凡,它卻是數(shù)值分析中十分典型的問題。實(shí)驗(yàn)內(nèi)容:考慮線性方程組 編制一個(gè)能自動選取主元,又能手動選取主元的求解線性方程組的gauss消去過程。實(shí)驗(yàn)要求:(1)取矩陣,則方程有解。取n=10計(jì)算矩陣的條件數(shù)。讓程序自動選取主元,結(jié)果如何?(2)現(xiàn)選擇程序中手動選取主元的功能。每步消
2、去過程總選取按模最小或按模盡可能小的元素作為主元,觀察并記錄計(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é)果。思考題一:(vadermonde矩陣)設(shè) ,其中,(1)對n=2,5,8,計(jì)算a的條件數(shù);隨n增大,矩陣性態(tài)如何變化?(2)對n=5,解方程組ax=b;設(shè)a的最后一個(gè)元素有擾動10-4,再求解ax=b(3
3、)計(jì)算(2)擾動相對誤差與解的相對偏差,分析它們與條件數(shù)的關(guān)系。(4)你能由此解釋為什么不用插值函數(shù)存在定理直接求插值函數(shù)而要用拉格朗日或牛頓插值法的原因嗎?相關(guān)matlab函數(shù)提示:zeros(m,n) 生成m行,n列的零矩陣ones(m,n) 生成m行,n列的元素全為1的矩陣eye(n) 生成n階單位矩陣rand(m,n) 生成m行,n列(0,1)上均勻分布的隨機(jī)矩陣diag(x) 返回由向量x的元素構(gòu)成的對角矩陣tril(a) 提取矩陣a的下三角部分生成下三角矩陣triu(a) 提取矩陣a的上三角部分生成上三角矩陣rank(a) 返回矩陣a的秩det(a) 返回方陣a的行列式inv(a)
4、 返回可逆方陣a的逆矩陣v,d=eig(a) 返回方陣a的特征值和特征向量norm(a,p) 矩陣或向量的p范數(shù)cond(a,p) 矩陣的條件數(shù)l,u,p=lu(a) 選列主元lu分解r=chol(x) 平方根分解hi=hilb(n) 生成n階hilbert矩陣5.1實(shí)驗(yàn)過程:5.1.1程序:function x=gauss(n,r)n=input(請輸入矩陣a的階數(shù):n=)a=diag(6*ones(1,n)+diag(ones(1,n-1),1)+diag(8*ones(1,n-1),-1)b=a*ones(n,1)for i=1:4p=input(條件數(shù)對應(yīng)的范數(shù)是p-范數(shù):p=)pp=
5、cond(a,p)endpausem,n=size(a);nb=n+1;ab=a br=input(請輸入是否為手動,手動輸入1,自動輸入0:r=)for i=1:n-1 if r=0 pivot,p=max(abs(ab(i:n,i); ip=p+i-1; if ip=i ab(i ip,:)=ab(ip i,:);disp(ab); pause end end if r=1 i=i ip=input(輸入i列所選元素所處的行數(shù):ip=); ab(i ip,:)=ab(ip i,:);disp(ab); pause end pivot=ab(i,i); for k=i+1:n ab(k,i:
6、nb)=ab(k,i:nb)-(ab(k,i)/pivot)*ab(i,i:nb); end disp(ab); pauseendx=zeros(n,1);x(n)=ab(n,nb)/ab(n,n);for i=n-1:-1:1 x(i)=(ab(i,nb)-ab(i,i+1:n)*x(i+1:n)/ab(i,i);end5.1.2實(shí)驗(yàn)結(jié)果如下: 1.按照實(shí)驗(yàn)要求一:取矩陣a的階數(shù):n=10且自動選取主元,程序結(jié)果運(yùn)行如下:(2) 現(xiàn)選擇程序中手動選取主元的功能,觀察并記錄計(jì)算結(jié)果。 選取絕對值最大的元素為主元:程序運(yùn)行開始如第一問的截圖也是求范數(shù)故這里不在給出。the answer is :
7、1 1 1 1 1 1 1 1 1 1 選取絕對值最小的元素為主元:the answer is: 1.0e+003*(inf 0.007 0.0057 -0.0410 -0.0303 0.3430 0.2577 -2.7290 -2.0463 2.7308)取矩陣a的階數(shù):n=20,手動選取主元: 選取絕對值最大的元素為主元:the answer is :1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 選取絕對值最小的元素為主元:the answer is: 1.0e+007*(-inf 0.0000 0.0000 -0.0000 -0.0000 0.0000
8、0.0000 -0.0003 -0.0002 0.0022 0.0016 -0.0175 -0.0131 0.1398 0.1049 -1.1185 -0.8389 8.9478 6.7109 -8.9478)修改程序如下:function x=gaussong(n,r)n=input(請輸入矩陣a的階數(shù):n=)a=hilb(n)b=a*ones(n,1)for i=1:4p=input(條件數(shù)對應(yīng)的范數(shù)是p-范數(shù):p=)pp=cond(a,p)endpausem,n=size(a);nb=n+1;ab=a br=input(請輸入是否為手動,手動輸入1,自動輸入0:r=)for i=1:n-
9、1 if r=0 pivot,p=max(abs(ab(i:n,i); ip=p+i-1; if ip=i ab(i ip,:)=ab(ip i,:);disp(ab); pause end end if r=1 i=i ip=input(輸入i列所選元素所處的行數(shù):ip=); ab(i ip,:)=ab(ip i,:);disp(ab); pause end pivot=ab(i,i); for k=i+1:n ab(k,i:nb)=ab(k,i:nb)-(ab(k,i)/pivot)*ab(i,i:nb); end disp(ab); pauseendx=zeros(n,1);x(n)=a
10、b(n,nb)/ab(n,n);for i=n-1:-1:1 x(i)=(ab(i,nb)-ab(i,i+1:n)*x(i+1:n)/ab(i,i);end所求范數(shù)為:自動輸入結(jié)果為:ans = 1.0000 1.00001 .0000 1.0000 1.0002 0.9996 1.0007 0.9993 1.0004 0.9999選取絕對值最大的元素為主元結(jié)果為:the answer is :nan nan nan nan nan inf -inf -inf 281.3945 -283.3708選取絕對值最小的元素為主元結(jié)果為:the answer is :nan nan nan -inf
11、-5.8976 -1.9243 -2.0291 -4.9972 23.4548 -11.10125.1.3 對實(shí)驗(yàn)結(jié)果進(jìn)行分析:5.1.3.1 對實(shí)驗(yàn)要求一的結(jié)果進(jìn)行分析:對于gauss消去法就是用行的初等變換將原線性方程組系數(shù)矩陣轉(zhuǎn)化為簡單形式,從而進(jìn)行求解,缺點(diǎn)是迭代次數(shù)可能較多,效率不高,且在消去過程中不可以將主元素很小的做除數(shù),否則將導(dǎo)致其他元素?cái)?shù)量級的嚴(yán)重增長和舍入誤差的擴(kuò)散,使得計(jì)算解不可靠。5.1.3.2 對實(shí)驗(yàn)要求二的結(jié)果進(jìn)行分析:通過每次選取最大或最小的主元可以發(fā)現(xiàn)取絕對值大的元素作為主元比取絕對值小的元素作為主元時(shí)產(chǎn)生的結(jié)果比較準(zhǔn)確,即選取絕對值小的主元時(shí)結(jié)果產(chǎn)生了較大的誤
12、差,條件數(shù)越大產(chǎn)生的誤差就越大。所以應(yīng)盡量避免很小的數(shù)作為除數(shù)。5.1.3.3 對實(shí)驗(yàn)要求三的結(jié)果進(jìn)行分析:此要求是對要求一和要求二的一個(gè)延續(xù),通過實(shí)驗(yàn)結(jié)果可以看出若采用很小的數(shù)作為主元迭代次數(shù)越多導(dǎo)致的結(jié)果越不可靠,甚至出現(xiàn)錯(cuò)誤。5.1.3.4 對實(shí)驗(yàn)要求四的結(jié)果進(jìn)行分析:對新矩陣進(jìn)行實(shí)驗(yàn)發(fā)現(xiàn)依然符合上述規(guī)律,可以知道,在進(jìn)行迭代時(shí)主元的選擇與算法的穩(wěn)定性有密切的聯(lián)系選取絕對值大的元素作為主元比絕對值小的元素作為主元時(shí)對結(jié)果產(chǎn)生的誤差較小。條件數(shù)越大對用gauss消去法解線性方程組時(shí),對結(jié)果產(chǎn)生的誤差就越大。5.1.4實(shí)驗(yàn)總結(jié):1. 在用gauss消去法解線性方程組時(shí),主元的選取與算法的穩(wěn)定
13、性有密切的聯(lián)系,選取適當(dāng)?shù)闹髟欣诘贸龇€(wěn)定的算法,2. 在算法的過程中,選取絕對值較大的主元比選取絕對值較小的主元更有利于算法的穩(wěn)定,選取絕對值最大的元素作為主元時(shí),得出的結(jié)果相對較準(zhǔn)確較穩(wěn)定。3. 條件數(shù)越小,對用這種方法得出的結(jié)果更準(zhǔn)確。4. 在算除法的過程中要盡量避免使用較小的數(shù)做為除數(shù),以免發(fā)生結(jié)果數(shù)量級加大,使大數(shù)吃掉小數(shù),產(chǎn)生舍入誤差。實(shí)驗(yàn)5.2(線性代數(shù)方程組的性態(tài)與條件數(shù)的估計(jì))問題提出:理論上,線性代數(shù)方程組的攝動滿足 矩陣的條件數(shù)確實(shí)是對矩陣病態(tài)性的刻畫,但在實(shí)際應(yīng)用中直接計(jì)算它顯然不現(xiàn)實(shí),因?yàn)橛?jì)算通常要比求解方程還困難。實(shí)驗(yàn)內(nèi)容:matlab中提供有函數(shù)“condest
14、”可以用來估計(jì)矩陣的條件數(shù),它給出的是按1-范數(shù)的條件數(shù)。首先構(gòu)造非奇異矩陣a和右端,使得方程是可以精確求解的。再人為地引進(jìn)系數(shù)矩陣和右端的攝動,使得充分小。實(shí)驗(yàn)要求:(1)假設(shè)方程ax=b的解為x,求解方程,以1-范數(shù),給出的計(jì)算結(jié)果。(2)選擇一系列維數(shù)遞增的矩陣(可以是隨機(jī)生成的),比較函數(shù)“condest”所需機(jī)器時(shí)間的差別.考慮若干逆是已知的矩陣,借助函數(shù)“eig”很容易給出cond2(a)的數(shù)值。將它與函數(shù)“cond(a,2)”所得到的結(jié)果進(jìn)行比較。(3)利用“condest”給出矩陣a條件數(shù)的估計(jì),針對(1)中的結(jié)果給出的理論估計(jì),并將它與(1)給出的計(jì)算結(jié)果進(jìn)行比較,分析所得結(jié)
15、果。注意,如果給出了cond(a)和的估計(jì),馬上就可以給出的估計(jì)。(4)估計(jì)著名的hilbert矩陣的條件數(shù)。5.2 實(shí)驗(yàn)過程如下: 5.2.1.1 實(shí)驗(yàn)要求一的程序如下:function n=jisuan(n)a=fix(100*rand(n)+1 x=ones(n,1) b=a*x data=rand(n)*0.00001 datb=rand(n,1)*0.00001 a=a+datab=b+datbx0=get(a,b) x1=norm(x0-x,1)/norm(x,1) function x=get(a,b)m,n=size(a);nb=n+1;ab=a b;for i=1:n-1 p
16、ivot=ab(i,i); for k=i+1:n ab(k,i:nb)=ab(k,i:nb)-(ab(k,i)/pivot)*ab(i,i:nb); endendx=zeros(n,1);x(n)=ab(n,nb)/ab(n,n);for i=n-1:-1:1 x(i)=(ab(i,nb)-ab(i,i+1:n)*x(i+1:n)/ab(i,i);end5.2.1.2 實(shí)驗(yàn)要求一程序運(yùn)行結(jié)果如下:系數(shù)矩陣a為:7018142952536398247346580289074421962620992338538830595879897467437769加擾動后的系數(shù)矩陣a為:70.0000046
17、 18.0000042 14.0000099 29.0000032 52.0000044 53.0000013 63.0000057 98.0000030 2.0000079 47.0000096 34.0000093 65.0000021 80.0000079 28.0000087 90.0000044 7.0000073 44.0000068 21.0000061 96.0000006 26.0000002 20.0000050 99.0000041 23.0000021 38.0000063 53.0000060 88.0000077 30.0000021 59.0000074 58.0
18、000084 79.0000037 89.0000005 74.0000097 67.0000064 43.0000027 77.0000063 69.0000058 b值為:236309270302367419加擾動后的b值為:236.00000451309.00000044270.00000027302.00000313367.00000013419.00000384 data的值為:4.610951267e-064.153748604e-069.900825926e-063.200355775e-064.399243096e-061.337727485e-065.678287124e-0
19、63.04998677e-067.888616922e-069.600986004e-069.333801082e-062.071327296e-067.942106514e-068.743671716e-064.386585338e-067.266317666e-066.833323243e-066.071989445e-065.91825935e-071.50094987e-074.983113034e-064.119532082e-062.125598643e-066.298878488e-066.028690857e-067.6795039e-062.139633316e-067.44
20、5657831e-068.392382403e-063.704768261e-065.02688037e-079.708449393e-066.434922879e-062.679472507e-066.287846e-065.75147779e-06 datb的值為:4.514248268e-064.38953253e-072.7185123e-073.126850481e-061.28625747e-073.839672885e-06 xx的值為:0.999999684491.00000038780.999999143481.00000065171.00000221560.99999754
21、53 x0的值為:1.146958549e-06 x1的值為:6.8990e-0075.2.1.3實(shí)驗(yàn)結(jié)果為:的計(jì)算結(jié)果為:6.8990e-0075.2.2.1 實(shí)驗(yàn)要求二的程序如下:function cond2(a) b=a*a;v1,d1=eig(b);v2,d2=eig(b(-1);cond2a=sqrt(max(max(d1)*sqrt(max(max(d2)endfor n=10:10:100n=n a=fix(100*randn(n); condesta=condest(a) cond2(a) conda2=cond(a,2) pause end5.2.2.2 實(shí)驗(yàn)要求二的程序運(yùn)行
22、結(jié)果如下:ncondestacond2aconda2101.46e+0242.50783044142.507830441204.59e+021.23e+021.23e+02304.05e+0279.26495488579.264954885402.21e+034.26e+024.26e+02503.02e+034.08e+024.08e+02604.75e+037.78e+027.78e+02704.69e+035.14e+025.14e+02805.47e+034.89e+024.89e+02905.66e+035.50e+025.50e+021004.47e+035.06e+025.06e
23、+025.2.3.1 實(shí)驗(yàn)要求三的程序如下:function bijiao(n) a=fix(100*rand(n)+1; x=ones(n,1); b=a*x; data=rand(n)*0.00001; datb=rand(n,1)*0.00001; a=a+data;b=b+datb;xx=geshow(a,b); x1=norm(xx-x,1)/norm(x,1) x2=cond(a)/(1-norm(inv(a)*norm(xx-x)*(norm(xx-x)/(norm(a)+norm(datb)/norm(b) datx=abs(x1-x2) 5.2.3.2 實(shí)驗(yàn)要求三的程序運(yùn)行結(jié)
24、果如下:給出對的估計(jì)是:7.310559817408125e-007的理論結(jié)果是: 3.828481757617297e-007結(jié)果相差: 3.482078059790828e-0075.2.4.1 實(shí)驗(yàn)要求四的程序如下:for n=4:11 n=n hi=hilb(n); cond1hi=cond(hi,1) cond2hi=cond(hi,2) condinfhi=cond(hi,inf) pauseend5.2.4.2 實(shí)驗(yàn)要求四的程序運(yùn)行結(jié)果如下:ncond1hicond2hicondinfhi42.84e+041.55e+042.84e+0459.44e+054.77e+059.44
25、e+0562.91e+071.50e+072.91e+0779.85e+084.75e+089.85e+0883.39e+101.53e+103.39e+1091.10e+124.93e+111.10e+12103.54e+131.60e+133.54e+13111.23e+155.22e+141.23e+15討論:線性代數(shù)方程組的性態(tài)與條件數(shù)有著很重要的關(guān)系,既矩陣的條件數(shù)是刻畫矩陣性質(zhì)的一個(gè)重要的依據(jù),條件數(shù)越大,矩陣“病態(tài)”性越嚴(yán)重,在解線性代數(shù)方程組的過程中較容易產(chǎn)生比較大的誤差,則在實(shí)際問題的操作過程中,我們必須要減少對條件數(shù)來求解,把條件數(shù)較大的矩陣化成條件數(shù)較小的矩陣來進(jìn)行求解。
26、實(shí)驗(yàn)總結(jié):在本次實(shí)驗(yàn)中,使我們知道了矩陣條件數(shù)對線性代數(shù)方程組求解的影響,條件數(shù)越大,對最后解的影響的越大,hilbert矩陣是一個(gè)很”病態(tài)”的矩陣,他的條件數(shù)隨著階數(shù)的增加而增大,每增加一階,條件數(shù)就增大一個(gè)數(shù)量級,在求解的過程中要盡量避免hilbert矩陣實(shí)驗(yàn)六 解線性方程組的迭代法實(shí)驗(yàn)6.1(病態(tài)的線性方程組的求解)問題提出:理論的分析表明,求解病態(tài)的線性方程組是困難的。實(shí)際情況是否如此,會出現(xiàn)怎樣的現(xiàn)象呢?實(shí)驗(yàn)內(nèi)容:考慮方程組hx=b的求解,其中系數(shù)矩陣h為hilbert矩陣, 這是一個(gè)著名的病態(tài)問題。通過首先給定解(例如取為各個(gè)分量均為1)再計(jì)算出右端b的辦法給出確定的問題。實(shí)驗(yàn)要求
27、:(1)選擇問題的維數(shù)為6,分別用gauss消去法、j迭代法、gs迭代法和sor迭代法求解方程組,其各自的結(jié)果如何?將計(jì)算結(jié)果與問題的解比較,結(jié)論如何?(2)逐步增大問題的維數(shù),仍然用上述的方法來解它們,計(jì)算的結(jié)果如何?計(jì)算的結(jié)果說明了什么?(3)討論病態(tài)問題求解的算法由于本實(shí)驗(yàn)用到迭代法,故先給出迭代法相關(guān)資料: 迭代法也稱輾轉(zhuǎn)法,是一種不斷用變量的舊值遞推新值的過程,跟迭代法相對應(yīng)的是直接法(或者稱為一次解法),即一次性解決問題。迭代法又分為精確迭代和近似迭代?!岸址ā焙汀芭nD迭代法”屬于近似迭代法。迭代算法是用計(jì)算機(jī)解決問題的一種基本方法。它利用計(jì)算機(jī)運(yùn)算速度快、適合做重復(fù)性操作的特點(diǎn)
28、,讓計(jì)算機(jī)對一組指令(或一定步驟)進(jìn)行重復(fù)執(zhí)行,在每次執(zhí)行這組指令(或這些步驟)時(shí),都從變量的原值推出它的一個(gè)新值。 迭代是數(shù)值分析中通過從一個(gè)初始估計(jì)出發(fā)尋找一系列近似解來解決問題(一般是解方程或者方程組)的過程,為實(shí)現(xiàn)這一過程所使用的方法統(tǒng)稱為迭代法(iterative method)。一般可以做如下定義:對于給定的線性方程組(這里的同為矩陣,任意線性方程組都可以變換成此形式),用公式(括號中為上標(biāo),代表迭代k次得到的x,初始時(shí)k=0)逐步帶入求近似解的方法稱為迭代法(或稱一階定常迭代法)。如果k趨向無窮大時(shí)存在,記為,稱此迭代法收斂。顯然就是此方程組的解,否則稱為迭代法發(fā)散。跟迭代法相對
29、應(yīng)的是直接法(或者稱為一次解法),即一次性的快速解決問題,例如通過開方解決方程。一般如果可能,直接解法總是優(yōu)先考慮的。但當(dāng)遇到復(fù)雜問題時(shí),特別是在未知量很多,方程為非線性時(shí),我們無法找到直接解法(例如五次以及更高次的代數(shù)方程沒有解析解,參見阿貝爾定理),這時(shí)候或許可以通過迭代法尋求方程(組)的近似解。最常見的迭代法是牛頓法。其他還包括最速下降法、共軛迭代法、變尺度迭代法、最小二乘法、線性規(guī)劃、非線性規(guī)劃、單純型法、懲罰函數(shù)法、斜率投影法、遺傳算法、模擬退火法等等。利用迭代算法解決問題,需要做好以下三個(gè)方面的工作: (1)確定迭代變量在可以用迭代算法解決的問題中,至少存在一個(gè)直接或間接地不斷由舊
30、值遞推出新值的變量,這個(gè)變量就是迭代變量。 (2)建立迭代關(guān)系式所謂迭代關(guān)系式,指如何從變量的前一個(gè)值推出其下一個(gè)值的公式(或關(guān)系)。迭代關(guān)系式的建立是解決迭代問題的關(guān)鍵,通??梢皂樛苹虻雇频姆椒▉硗瓿?。 (3)對迭代過程進(jìn)行控制在什么時(shí)候結(jié)束迭代過程?這是編寫迭代程序必須考慮的問題。不能讓迭代過程無休止地重復(fù)執(zhí)行下去。迭代過程的控制通??煞譃閮煞N情況:一種是所需的迭代次數(shù)是個(gè)確定的值,可以計(jì)算出來;另一種是所需的迭代次數(shù)無法確定。對于前一種情況,可以構(gòu)建一個(gè)固定次數(shù)的循環(huán)來實(shí)現(xiàn)對迭代過程的控制;對于后一種情況,需要進(jìn)一步分析出用來結(jié)束迭代過程的條件。實(shí)驗(yàn)過程:6.1.1.1 實(shí)驗(yàn)要求一的ga
31、uss實(shí)現(xiàn)程序如下:gauss消去法程序:function x=gaussong(n,r)a=hilb(n)b=a*ones(n,1)for i=1:4p=input(條件數(shù)對應(yīng)的范數(shù)是p-范數(shù):p=)pp=cond(a,p)endpausem,n=size(a);nb=n+1;ab=a br=input(請輸入是否為手動,手動輸入1,自動輸入0:r=)for i=1:n-1 if r=0 pivot,p=max(abs(ab(i:n,i); ip=p+i-1; if ip=i ab(i ip,:)=ab(ip i,:);disp(ab); pause end end if r=1 i=i i
32、p=input(輸入i列所選元素所處的行數(shù):ip=); ab(i ip,:)=ab(ip i,:);disp(ab); pause end pivot=ab(i,i); for k=i+1:n ab(k,i:nb)=ab(k,i:nb)-(ab(k,i)/pivot)*ab(i,i:nb); end disp(ab); pauseendx=zeros(n,1);x(n)=ab(n,nb)/ab(n,n);for i=n-1:-1:1 x(i)=(ab(i,nb)-ab(i,i+1:n)*x(i+1:n)/ab(i,i);end6.1.1.2實(shí)驗(yàn)要求一的gauss實(shí)現(xiàn)程序運(yùn)行結(jié)果如下:6.1.2
33、.1實(shí)驗(yàn)要求一的j程序如下:function n=jd(n)a=hilb(n);for i=1:n; a0(i)=1; x(i)=0;endb=a*a0; for i=1:100; y=x; for j=1:n; x(j)=b(j)/a(j,j); for k=1:j-1; x(j)=x(j)-a(j,k)*y(k)/a(j,j); endfor k=j+1:n; x(j)=x(j)-a(j,k)*y(k)/a(j,j);end endendx6.1.2.2實(shí)驗(yàn)要求一的j程序運(yùn)行結(jié)果如下:6.1.3.1實(shí)驗(yàn)要求一的gs程序如下:function n=gs(n)a2=hilb(n);for i=
34、1:n; a02(i)=1; x2(i)=0;endb2=a2*a02;for i=1:100000; for j=1:n; x2(j)=b2(j)/a2(j,j); for k=1:j-1; x2(j)=x2(j)-a2(j,k)*x2(k)/a2(j,j); endfor k=j+1:n; x2(j)=x2(j)-a2(j,k)*x2(k)/a2(j,j);end endendx26.1.3.2實(shí)驗(yàn)要求一的gs程序運(yùn)行結(jié)果如下:6.1.4.1實(shí)驗(yàn)要求一的sor程序如下:function n ss=sor(n,ss)a3=hilb(n);for i=1:n; a03(i)=1; x3(i)=
35、0;endb3=a3*a03;for i=1:100000; for j=1:n; rc=x3(j); x3(j)=b3(j)/a3(j,j); for k=1:j-1; x3(j)=x3(j)-a3(j,k)*x3(k)/a3(j,j); endfor k=j+1:n; x3(j)=x3(j)-a3(j,k)*x3(k)/a3(j,j);endx3(j)=(1-ss)*rc+ss*x3(j); endendx36.1.4.2實(shí)驗(yàn)要求一的sor程序運(yùn)行結(jié)果如下:(注意由于運(yùn)行結(jié)果迭代過程很長故不體現(xiàn)在實(shí)驗(yàn)報(bào)告中)6.2.1實(shí)驗(yàn)要求二的gauss程序運(yùn)行結(jié)果如下: x = 0 0 0 0 0 0
36、 0 0 0 0 0 0 0 0 0 0 0 0 0 0.99756.2.2實(shí)驗(yàn)要求二的j程序運(yùn)行結(jié)果如下:6.2.3實(shí)驗(yàn)要求二的gs程序運(yùn)行結(jié)果如下:6.2.4實(shí)驗(yàn)要求二的sor程序運(yùn)行結(jié)果如下:實(shí)驗(yàn)要求二的結(jié)果分析:選擇問題的維數(shù)為20時(shí):1. 用gauss消去法求得的解與精確解相差很大,說明能否得到優(yōu)秀的解取決于算法的穩(wěn)定性,如果算法不夠穩(wěn)定產(chǎn)生的結(jié)果將變的無法理喻。2. 取初始向量為0,用j迭代方法迭代發(fā)散,無法求解;3. 取初始向量為0,用gs迭代方法迭代不發(fā)散,能求得解,但收斂非常緩慢,而且迭代次數(shù)越多,與準(zhǔn)確解的偏差就越大,說明gs迭代適合迭代次數(shù)少的,但是通常我們無法得知需要迭
37、代的次數(shù)。4. 取初始向量為0,用sor迭代方法迭代不發(fā)散,能求得解,但同樣收斂非常緩慢??傊瑥纳厦娴慕Y(jié)果可以看出當(dāng)病態(tài)問題的階數(shù)升高時(shí)作為直接法的gauss消去法又能求解變成不能求解。而gs和sor迭代法在階數(shù)升高時(shí)仍能求解。但在階數(shù)較低時(shí)直接法能求得精確解而迭代發(fā)卻總存在一定的誤差??梢娭苯臃ㄅc迭代法各有各的優(yōu)勢與不足。關(guān)于病態(tài)問題的求解,主要的方法是對原方程作某些預(yù)處理,以降低系數(shù)矩陣的條件數(shù)??梢圆扇⑾禂?shù)矩陣a的每一行本別乘上適當(dāng)常數(shù)的方法。即找到可逆的對角陣和使方程組化為 理論上最好選擇對角陣滿足:。補(bǔ)充:本實(shí)驗(yàn)用到了gauss消去法、j迭代法、gs迭代法、sor迭代,故對其重新
38、理解學(xué)習(xí)了一下:gauss消去法:1 將其增廣矩陣化為行階梯形 2 若最后有形如0 0 . 0 a (a0)的行則無解3 若含有自由變量則有無窮組解 4 原方程有唯一解。采用回代求解。 至于有無窮組解的方程組的求解,需將其化為行最簡形矩陣,其方法稱為高斯-若爾當(dāng)消元法。j迭代法:一、算法理論迭代格式的引出是依據(jù)迭代法的基本思想:構(gòu)造一個(gè)向量系列,使其收斂至某個(gè)極限,則就是要求的方程組的準(zhǔn)確解。迭代將方程組: 在假設(shè),改寫成 如果引用系數(shù)矩陣,及向量方程組(1)和(2)分別可寫為:及,這樣就得到了迭代格式用迭代解方程組時(shí),就可任意取初值帶入迭代可知式,然后求。但是,比較大的時(shí)候,寫方程組(1)和
39、(2)是很麻煩的,如果直接由,能直接得到,就是矩陣與向量的運(yùn)算了,那么如何得到,呢實(shí)際上,如果引進(jìn)非奇異對角矩陣將分解成:要求的解,實(shí)質(zhì)上就有,而是非奇異的,所以存在,從而有我們在這里不妨令,就得到迭代格式:現(xiàn)在考慮迭代法的計(jì)算程序 float a33=10,-2,-1,-2,10,-1,-1,-2,-5;float b3=3,15,10;分別代表的系數(shù)和等號右邊的常數(shù)項(xiàng),即 先輸入方程,運(yùn)行main函數(shù),如果first不為null,則執(zhí)行if括號里的,否則執(zhí)行else里面的,最后會調(diào)用方法sum()。在sum()中sum=amn*xn+sum;y=(bm-sum)/amm,之后運(yùn)行for循環(huán)
40、,最后輸出結(jié)果,算法結(jié)束。二、算法框圖 調(diào)用方法 開始讀入輸出 結(jié)束gs迭代法:1.高斯 - 塞德爾迭代法 公式的矩陣形式 首先將高斯 - 塞德爾迭代法的公式表示為矩陣形式,為此設(shè) 這里 是系數(shù)矩陣的對角部分,是嚴(yán)格下三角部分,是嚴(yán)格上三角部分,則高斯 - 塞德爾迭代法的公式可表示為 用矩陣 乘等式兩邊得 再用矩陣 乘等式兩邊得 其中矩陣 稱為高斯塞德爾迭代矩陣。由此可見,高斯 - 塞德爾迭代法是一般迭代法中迭代矩陣為 的特殊情形。需要指出的是,由于矩陣 難于計(jì)算,所以式(2)多用在理論分析中。2. 高斯塞德爾迭代法計(jì)算框圖(見圖)高斯塞德爾迭代法計(jì)算框圖松弛法:其中相當(dāng)于在的基礎(chǔ)上加個(gè)余項(xiàng)生
41、成,下面令,希望通過選取來加速收斂,這就是松弛法。實(shí)驗(yàn)七 非線性方程求根實(shí)驗(yàn)7.1(迭代法、初始值與收斂性)實(shí)驗(yàn)?zāi)康模撼醪秸J(rèn)識非線性問題的迭代法與線性問題迭代法的差別,探討迭代法及初始值與迭代收斂性的關(guān)系。問題提出:迭代法是求解非線性方程的基本思想方法,與線性方程的情況一樣,其構(gòu)造方法可以有多種多樣,但關(guān)鍵是怎樣才能使迭代收斂且有較快的收斂速度。實(shí)驗(yàn)內(nèi)容:考慮一個(gè)簡單的代數(shù)方程針對上述方程,可以構(gòu)造多種迭代法,如 在實(shí)軸上取初始值x0,請分別用迭代(7.1)-(7.3)作實(shí)驗(yàn),記錄各算法的迭代過程。實(shí)驗(yàn)要求:(1)取定某個(gè)初始值,分別計(jì)算(7.1)-(7.3)迭代結(jié)果,它們的收斂性如何?重復(fù)選
42、取不同的初始值,反復(fù)實(shí)驗(yàn)。請自選設(shè)計(jì)一種比較形象的記錄方式(如利用matlab的圖形功能),分析三種迭代法的收斂性與初值選取的關(guān)系。(2)對三個(gè)迭代法中的某個(gè),取不同的初始值進(jìn)行迭代,結(jié)果如何?試分析迭代法對不同的初值是否有差異?(3)線性方程組迭代法的收斂性是不依賴初始值選取的。比較線性與非線性問題迭代的差異,有何結(jié)論和問題。實(shí)驗(yàn)過程:7.1程序:7.1.1 對于第一個(gè)迭代方程的程序:保存為:diedai71clearclca=-1.5;b=2.5; y00=0; x00=input(請輸入第一個(gè)函數(shù)的初值:x00=);x=linspace(a,b,80);y0=x; %計(jì)算直線y=xy1=
43、diedai7f1(x); %計(jì)算迭代函數(shù)y=f(x)clear y;y=y0;y1;plot(x,y,linewidth,1)legend(y=x,y=f1)title(x(n+1)=x(n)2-1) %輸出標(biāo)題hold onplot(a b,0,0,k-,0 0,a b,k-)axis(a,b,a,b) %畫坐標(biāo)軸z=;for i=1:15 %畫蛛網(wǎng)圖,迭代過程為n=15次 xt(1)=x00;yt(1)=y00; %決定始點(diǎn)坐標(biāo) xt(2)=diedai7f1(xt(1); %決定終點(diǎn)坐標(biāo) yt(2)=diedai7f1(xt(1); diedaiplot71(xt,yt,0.6); %
44、畫蛛網(wǎng)圖 if i=5 pause %按任意鍵逐次觀察前5次迭代的蛛網(wǎng)圖 end x00=xt(2);y00=yt(2); %將本次迭代的終點(diǎn)作為下次的始點(diǎn) z=z,xt(1); %保存迭代點(diǎn)end保存為:diedai7f1function y=diedai7f1(x)y=(x.*x-1);保存為:diedaiplot72function out=diedaiplot72(x,y,p)%畫一次迭代的蛛網(wǎng)圖,改變p調(diào)節(jié)箭頭的大小u(1)=0;v(1)=(y(2)-y(1); %畫出始點(diǎn)(x(1),y(1)終點(diǎn)(x(2),y(2)的有向折線段u(2)=eps;v(2)=eps;x=x(1) x(1
45、);y=y(1) y(2);h=quiver(x,y,u,v,p);set(h,color,red);hold onu(1)=(x(2)-x(1);v(1)=0;u(2)=eps;v(2)=eps;h=quiver(x(1) x(2),y(2) y(2),u,v,p);set(h,color,red);plot(x(1) x(1) x(2),y(1) y(2) y(2),r.-)7.1.1 對于第一個(gè)迭代方程的程序運(yùn)行結(jié)果:(注:由于可以估計(jì)出方程的根,故選取根附近的值開始迭代)當(dāng)x=1.5時(shí)程序運(yùn)行如下圖:當(dāng)x=-1時(shí)程序運(yùn)行如下圖:當(dāng)x=0.5時(shí)程序運(yùn)行如下圖:當(dāng)x=-0.5時(shí)程序運(yùn)行如下
46、圖:當(dāng)x=0時(shí)程序運(yùn)行如下圖:7.2.1 對于第二個(gè)迭代方程的程序:保存為diedai72:clearclca=0.1;b=6.5; y00=0; x00=input(請輸入第二個(gè)函數(shù)的初值:x00=);x=linspace(a,b,80);y0=x; %計(jì)算直線y=xy1=diedai7f2(x); %計(jì)算迭代函數(shù)y=f(x)clear y;y=y0;y1;plot(x,y,linewidth,1)legend(y=x,y=f1)title(x(n+1)=x(n)2-1) %輸出標(biāo)題hold onplot(a b,0,0,k-,0 0,a b,k-)axis(a,b,a,b) %畫坐標(biāo)軸z=
47、;for i=1:15 %畫蛛網(wǎng)圖,迭代過程為n=15次 xt(1)=x00;yt(1)=y00; %決定始點(diǎn)坐標(biāo) xt(2)=diedai7f2(xt(1); %決定終點(diǎn)坐標(biāo) yt(2)=diedai7f2(xt(1); diedaiplot72(xt,yt,0.6); %畫蛛網(wǎng)圖 if i=5 pause %按任意鍵逐次觀察前5次迭代的蛛網(wǎng)圖 end x00=xt(2);y00=yt(2); %將本次迭代的終點(diǎn)作為下次的始點(diǎn) z=z,xt(1); %保存迭代點(diǎn)end保存為迭代7f2:function y=diedai7f2(x)y=(1+1./x);保存為:diedaiplot72function out=diedaiplot72(x,y,p)%畫一次迭代的蛛網(wǎng)圖,改變p調(diào)節(jié)箭頭的大小u(1)=0;v(1)=(y(2)-y(1); %畫出始點(diǎn)(x(1),y(1)終點(diǎn)(x(2),y(2)的有向折線段u(2)=eps;v(2)=eps;x=x(1) x(1);y=y(1) y(2);h=quiver(x,y,u,v,p);set(h,color,red);hold onu(1)
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC 24741:2024 EN Information technology - Biometrics - Overview and application
- 【正版授權(quán)】 ISO 24322:2024 EN Timber structures - Methods of test for evaluation of long-term performance - Part 1: Wood-based products in bending
- 【正版授權(quán)】 ISO 5284:2025 EN Conveyor belts - List of equivalent terms
- 【正版授權(quán)】 ISO 22915-1:2024 EN Industrial trucks - Verification of stability - Part 1: General
- 2025年度高新技術(shù)產(chǎn)業(yè)園區(qū)運(yùn)營承包經(jīng)營合同
- 生物技術(shù)課程導(dǎo)入計(jì)劃
- 各行各業(yè)主管的共性與差異計(jì)劃
- 校外美術(shù)實(shí)踐基地建設(shè)計(jì)劃
- 老年醫(yī)學(xué)科醫(yī)生工作計(jì)劃
- 2025年灌裝機(jī)系列設(shè)備合作協(xié)議書
- 艾默生HipulseUPS操作手冊
- 愛心樹(繪本)
- NPI管理流程(精)
- 色卡 對照表 PANTONE-CMYK
- 深圳水管理體制改革的思考和建議
- 蘇教版六年級上冊計(jì)算題練習(xí)大全(經(jīng)典)
- 五金英語詞匯盤點(diǎn)
- 內(nèi)容講義說明案例nxt pop trainning
- 消毒供應(yīng)中心打包區(qū)教學(xué)要點(diǎn) ppt課件
- 現(xiàn)代科學(xué)技術(shù)概論復(fù)習(xí)重點(diǎn)
- 年“職工書屋”示范點(diǎn)申報(bào)材料(2篇總結(jié)匯報(bào)報(bào)告參考)
評論
0/150
提交評論