數值分析實驗報告

2022-05-13 12:27:02 字數 4941 閱讀 2894

數值實驗題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 例項用高斯...