數值實驗題1
實驗1.1 病態問題
實驗目的:
演算法有「優」與「劣」之分,問題也有「好」與「壞」之別。對數值方法的研究而言,所謂壞問題是指問題本身對擾動敏感,反之屬於好問題。本實驗通過對乙個高次多項式方程的求解,初步認識病態問題。
實驗內容:
考慮乙個高次的代數多項式
e.1.1)
顯然該多項式的全部根為1,2,…,20,共計20個,且每個根都是單重的(也稱為簡單的)。現考慮該多項式的乙個擾動e.1.2)
其中,ε是乙個非常小的數。這相當於是對方程(e.1.
1)中x19的係數作乙個小的擾動。比較方程(e.1.
1)和方程(e.1.2)根的差別,從而分析方程(e.
1.1)的解對擾動的敏感性。
實驗步驟與結果分析:
(一) 實驗源程式
function t_charpt1_1
% 數值實驗1.1病態問題
% 輸入:[0 20]之間的擾動項及小的擾動常數
% 輸出:加擾動後得到的全部根
clcresult=inputdlg(,'charpt 1_1',1,);
numb=str2num(char(result));
if((numb>20)|(numb<0))errordlg('請輸入正確的擾動項:[0 20]之間的整數!');return;end
result=inputdlg(,'charpt 1_1',1,);
ess=str2num(char(result));
ve=zeros(1,21);
ve(21-numb)=ess;
root=roots(poly(1:20)+ve);
x0=real(root); y0=imag(root);
plot(x0',y0', '*');
disp(['對擾動項 ',num2str(numb),'加擾動',num2str(ess),'得到的全部根為:']);
disp(num2str(root));
(二)實驗結果分析
(1) 對於x19項的擾動ess,不同的取值對應的結果如下所示。
● 對擾動項 19加擾動1e-010得到的全部根為:
19.9961,19.0257,17.
9085,17.1508,15.7982,15.
181,13.8995,13.0571,11.
9753,11.0109,9.99608,9.
00111,7.99978,7.00003,6,5,4,3,2,1。
● 對擾動項 19加擾動1e-009得到的全部根為:
19.952,19.2293,17.
6573+0.692896i,17.6573-0.
692896i,15.4524+0.875524i,15.
4524-0.875524i,13.3527+0.
486992i,13.3527-0.486992i,11.
8578,11.0427,9.9916,9.
00201,7.99952,7.00009,5.
99999,5,4,3,2,1。
● 對擾動項 19加擾動1e-007得到的全部根為:
20.422+0.999203i,20.
422-0.999203i,18.1572+2.
4702i,18.1572-2.4702i,15.
3149+2.69865i,15.3149-2.
69865i,12.8466+2.06246i,12.
8466-2.06246i,10.9216+1.
10366i,10.9216-1.10366i,9.
56629,9.11508,7.99387,7.
00027,6,5,4,3,2,1。
● 對擾動項 19加擾動1e-005得到的全部根為:
22.5961+2.3083i,22.
5961-2.3083i,18.8972+5.
00563i,18.8972-5.00563i,14.
9123+4.95848i,14.9123-4.
95848i,12.0289+3.73551i,12.
0289-3.73551i,10.059+2.
33021i,10.059-2.33021i,8.
63828+1.0564i,8.63828-1.
0564i,7.70896,7.028,5.
99942,5.00001,4,3,2,1。
根在復平面上的位置如圖所示:
圖 ess=1e-010圖 ess=1e-009
圖 ess= 1e-007圖 ess=1e-005
從實驗的圖形中可以看出,當ess充分小時,方程e.1.1和方程e.
1.2的解相差很小,當ess逐漸增大時,方程的解就出現了病態解,這些解都呈現復共軛性質。並且,病態解首先出現在x=16這個解附近,如ess=1e-009時,x=20,19,12,11,…,2,1的解基本誤差不大。
在x=16附近,擾動後的解偏離實軸程度較嚴重,隨著ess的增大,擾動對解的影響從x=16附近開始向兩邊波及,並且偏離實軸的幅度越來越大。x=0,1,2,3,4,5這些階次較小的解對x19上的擾動最不敏感。
(2)將擾動項加到x18上後,ess=1e-009時方程的解都比較準確,沒有出現復共軛現象。
ess=1e-008時誤差與x19(ess=1e-009)時相當,即擾動加到x18上比加到x19小乙個數量級。
對x8的擾動ess=1000時沒有出現復共軛,誤差很小;對x的擾動ess=10e10時沒有出現復共軛,誤差很小。因此,擾動作用到xn上時,n越小,擾動引起的誤差越小。
(3)令e.3.1)
的零點均為ε的函式,分別它們記為, 顯然有。研究關於ε的變化情況,將表示為
e.3.2)
關於ε的變化或敏感程度可以用其導數表示,故在(e.3.2)兩邊關於ε求導:
e.3.3)
為了知道原方程的根是如何受擾動ε的影響,需要知道。在(e.3.3)兩邊令ε,得到
e.3.4)
在令,則得,即
e.3.5)
由於,故e.3.6)
計算表明,對根1,此導數的絕對值只有,極其微小;但從第7個根起,此導數的絕對值就從開始,最大直到,非常大!所以必定造成病態。這就是根源。
現在來估計擾動對根的影響。對根的影響,由(e.3.5)可得條件數
e.3.7)
經過計算發現,擾動對的影響最大,對的影響最小,與實際計算結果一致。
實驗1.2 誤差傳播與演算法穩定性
實驗目的:
體會穩定性在選擇演算法中的地位。誤差擴張的演算法是不穩定的,是我們所不期望的;誤差衰竭的演算法是穩定的,是我們努力尋求的。
實驗內容:
考慮乙個由積分定義的序列 (e.1.4)
顯然en>0,n=1,2,…當n=1時,利用部分積分得e1=1/e。
而對n≥2,經分部積分可得遞推關係 en=1-nen-1, n=2,3,… (e.1.5)
由式(e.1.4)得 en≤1/(n+1)。
由遞推關係式(e.1.5),可得計算式(e.1.4)積分序列的兩種演算法。其一為式(e.1.5)的直接應用,即
e1=1/e, en= 1 – nen-1, n=2, 3, … (e.1.7)
另一種演算法則是利用式(e.1.5)變形得到
en=0,en-1=(1- en)/n, n= n-1, n-2, …, 3, 2. (e.1.8)
實驗步驟及結果分析:
(一)實驗源程式
function t_charpt1_2
% 數值實驗1.2:誤差傳播與演算法穩定性
% 輸入:遞推式選擇及遞推步數
% 輸出:各步遞推值及誤差結果,以及遞推值和誤差與遞推步數的關係圖
clcpromps=;
result=inputdlg(promps,'charpt 1_2',1,);
nb = str2num(char(result));
if((nb~=1)&(nb~=2)) errordlg('請選擇遞推關係式,若選e.1.7,請輸入1,否則輸入2!');return;end
result=inputdlg(,'charpt 1_2',1,);
steps=str2num(char(result));
if(steps<1)errordlg('遞推步數錯誤!');return;end
result=zeros(1,steps); err=result;
if(nb==1)
n=1; result(n)=1/exp(1);
while(n result(n+1)=1-n*result(n);
err(n+1)=abs(result(n+1)-func(n+1));
n=n+1;
endelseif(nb==2)
n=steps;
err(n)=abs(result(n)-func(n));
while(n>1)
result(n-1)=(1-result(n))/n;
err(n-1)=abs(result(n-1)-func(n-1));
n=n-1;
endenddisp(['遞推值:',num2str(result)]);
disp(['誤差:',num2str(err)]);
plot([1:steps],result,'-');
grid on
hold on;
plot([1:steps],err,'r--');
xlabel('n'); ylabel('en- and errn--');
text(2,err(2),'\uparrow err(n)');
text(4,result(4),'\downarrow en');
function en=func(n)
% 計算en的精確值
if(n==1)
en=1/exp(1);
else
en=1-n*func(n-1);
數值分析實驗報告
實驗一題目一 已知函式表如下 試用三次lagrange插值多項式求x 0.5635時的函式值。解 lagrange插值法公式 程式框圖如下 本題中n 4 分析設計思想 設計思路如上面的流程圖所示,用我們學過的c語言程式設計實現。程式清單 include include include float l...
數值分析實驗報告
數值分析 課程設計實驗報告模板 常微分方程資料值解 用龍格 庫塔法分析lorenz方程的特性 一 考慮著名的lorenz方程 其中s,r,b為變化區域內有一定限制的實引數,該方程形式簡單,表面上看並無驚人之處,但由該方程揭示出的許多現象,促使 混沌 成為數學研究的嶄新領域,在實際應用中產生了巨大的影...
數值分析實驗報告
實驗專案 a 列主元高斯消去法 b 矩陣直接三角分解法 c 雅可比迭代法 d 高斯 賽德爾迭代法 e sor迭代法 f 冪法求最大特徵值 實驗名稱 列主元高斯消去法 實驗目的 熟悉了解高斯消去法的原理,並知道如何用高斯消去法求方程組的解 實驗所用的軟體 win tc 版本 1.9.0.0 例項用高斯...