數值計算方法實驗

2021-03-18 06:09:04 字數 5309 閱讀 7040

實驗一非線性方程的數值解法

10信計1班楊家博 201002044046

一、 實驗目的

熟悉二分法和簡單跌點法的實現

二、 實驗內容

教材p40 2.1.5

三、 實驗要求

1. 根據實驗內容編寫二分法簡單迭代的演算法程式

2. 簡單比較分析兩種演算法的誤差

3. 試構造不同的迭代格式,分析比較其收斂性

正文:1、源**

實驗採用matlab作為開發工具,以下為二分法及簡單迭代法的相關.m檔案的源**:

1.二分法源**程式:

以下為bisectm.m檔案

function [c,err,yc]=bisectm(f,a,b,delta)

% c為所求近似解

% err是c的誤差估計

% f為方程 f(x)=0中的f(x)

% a和b分別為有根區間的左右限

% delta是允許的誤差界

ya=f(a);

yb=f(b);

if ya*yb > 0,return,end %表示無解,結束

max1=1+round((log(b-a)-log(delta))/log(2)); %從誤差表示式得到最小等分次數n

for k=1:max1

c=(a+b)/2; %取區間中點

yc=f(c);

if yc==0

a=c;

b=c; %解找到

elseif yb*yc>0

b=c; %區間減半

yb=yc;

else

a=c;

ya=yc;

endif b-a < delta, break,end

endc=(a+b)/2;

fprintf(1,'%.12f\n',c);

err=abs(b-a);

yc=f(c);

2.簡單迭代法源**程式:

建立fixpt.m的檔案,源**如下:

function[p,k,err,p]=fixpt(f1021,p0,tol,max1)

% f1021是給定的迭代函式。

% p0是給定的初始值

% tol是給定的誤差界。

% max1是所允許的最大迭代次數。

% k是所進行的迭代次數加1。

% p是不動點的近似值。

% err是誤差。

% p =

p(1) = p0;

for k = 2:max1

p(k) = feval('f1021', p(k-1));

k, err = abs(p(k) - p(k-1))

p = p(k);

if(err break;

endif k == max1

disp('maximum number of iterations exceeded');

endendp=p;

二、實驗步驟及其結果

(a)為了對比計算結果我們作出函式圖,函式的圖形經過matlab多次區間的選取後:

選取區間(-2,2.5)的大致圖形,見下圖:

相關指令:

>>x=[-2:0.05:

2.5];y=x.^5-3*x.

^3-2*x.^2+2;z=x;plot(x,y);hold on;plot(x,z);grid on

根據matlab大致草圖,我們a,b的取值有以下3個區間,具體如下:

[1.5,2.5]、[0.5,1]、[-2,-1.5]

(1)二分法

在matlab中建立二分法的bisectm.m的檔案。

1)在區間[1.5,2.5]

在命令視窗中輸入:

>> f=inline('x.^5-3*x.^3-2*x^2-x+2');

>> [c,err,yc]=bisectm(f,1.5,2.5,0.000000000001)

得出結果:

2.000000000000

c =2

err =0

yc =0

則: =2.000000000000

2)區間[0.5,1]

在命令視窗中輸入:

>> f=inline('x.^5-3*x.^3-2*x^2-x+2');

>> [c,err,yc]=bisectm(f,0.5,1,0.000000000001)

得出結果:

0.618033988750

c = 0.6180

err = 9.0949e-013

yc = -1.1751e-012

則: =0.618033988750

3)區間[-2,-1.5]

在命令視窗中輸入:

>> f=inline('x.^5-3*x.^3-2*x^2-x+2');

[c,err,yc]=bisectm(f,-2,-1.5,0.000000000001)

得出結果:

-1.618033988750

c = -1.6180

err =9.0949e-013

yc =-3.0758e-012

則: =-1.618033988750

(2)簡單迭代法

構造的迭代函式是:y=(x+3*x^3+2*x^2-2).^(1/5) ,初始值取1.5

先建立fixpt.m的檔案,簡單迭代的**見上文。

然後建立f1021.m的檔案,存放需要迭代的函式,源**如下:

function y = f1021(x)

y=(x+3*x^3+2*x^2-2).^(1/5)

最後建立 prog1021.m檔案

clcclear all

fixpt('f1021',1.5,10^(-12),20)

在視窗執行prog1021即可

執行結果:

y =1.6982

k =2 err =0.1982y =1.8235

k =3 err =0.1252y =1.8985

k =4 err =0.0750y =1.9422

k =5 err =0.0437y =1.9673

k =6 err =0.0251y =1.9815

k =7 err =0.0143y =1.9896

k =8 err =0.0081y = 1.9941

k =9 err =0.0046y =1.9967

k =10 err =0.0026y =1.9981

k =11 err =0.0014y = 1.9990

k =12 err =8.1336e-004 y =1.9994

k =13 err =4.5767e-004 y = 1.9997

k =14 err =2.5749e-004 y =1.9998

k =15 err =1.4485e-004 y =1.9999

k =16 err =8.1485e-005 y = 1.9999

k =17 err =4.5837e-005 y = 2.0000

k =18 err =2.5784e-005 y =2.0000

k =19 err =1.4504e-005 y = 2.0000

k =20 err = 8.1583e-006

maximum number of iterations exceeded

ans =2.0000

當建構函式是:y=y=((x.^5-2*x.^2+2-x)/3).^(1/3);

執行結果是:

當迭代20次後:

ans =0.6195

(b)相關步驟如1,在matlab上大致草圖如下:

matlab的**:

x=[-100:0.05:100];y=cos(sin(x));plot(x,y)

(1)二分法

根據草圖,取區間[0,1]

>> f=inline('cos(sin(x))-x');

>> bisectm(f,0.5,1.5,0.01)

結果:0.769531250000

ans =0.7695

則: =0.769531250000

(2)簡單迭代法

步驟如上:

構造迭代格式為:y=cos(sin(x)) 初始值為:0.9

經過20次迭代後,得到結果為:

ans =0.7682

(c)草圖**:

>> x=[-3:0.001:3];

y=x.^2-sin(x+0.15)-x;

z=x;

plot(x,y);hold on ;plot(x,z);grid on

(1)二分法

根據草圖,可以去區間[-0.5,0.5]

>> f=inline('x.^2-sin(x+0.15)-x');

bisectm(f,-0.5,0.5,0.000000000001)

結果:-0.072344148965

ans =-0.0723

則: =-0.072344148965

(2)簡單迭代法

構造迭代函式是:y=(sin(x+0.15)+x).^(1/2) 初始值為:1

經過20次迭代後,得出結果為:

ans =1.6100

(d)在區間[-1,2]時,草圖如下:

經過多次放大後,可以取區間為:[-1,-0.2][0.1,2],則:

在區間[-1,-0.2]草圖如下:

>> x=[-1:0.001:-0.2];

y=x.^(x-cos(x))-x;z=x;

plot(x,y);hold on ;plot(x,z);grid on

取區間[-0.6,-0.4]

>> f=inline('x.^(x-cos(x))-x');

bisectm(f,-0.6,-0.4,0.001)

結果:-0.400390625000

ans = -0.4004

則: =-0.400390625000

在區間[-1,-0.2]草圖如下:

>> x=[0.1:0.001:2];

y=x.^(x-cos(x))-x;

z=x;

plot(x,y);hold on ;plot(x,z);grid on

(1)二分法

如圖有兩個交點則區間取:[0.4,1][1,2]

現代數值計算方法實驗一

實驗報告 實驗一線性方程組迭代法實驗 一 實驗目的 1 通過本實驗學習線性方程組的迭代解法。掌握高斯 賽德爾迭代法 雅可比迭代法 sor迭代法的程式設計與應用,對比分析在不同條件下三種迭代法的收斂情況並得出一般結論。2 培養程式設計與上機除錯能力。二 實驗題目 1 迭代法的收斂速度 實驗題目 用迭代...

數值計算方法實驗報告jrh

一 實驗的性質 目的和任務 本實驗是與本專業基礎課 數值計算方法 相配套的,旨在鞏固專業課內容和學生程式設計的能力。通過實驗加強對數值方法的理解和掌握,編制出適用的程式。同時,在理論教學的基礎上,注意方法處理的技巧及其與計算機的結合,其次要通過例子,學習使用各種數值方法解決實際計算問題。要求學生應用...

數值計算方法教案 數值微分

第四章數值微分 一 中點公式 1.導數定義及數值微分的含義 向前公式 向後公式 中心公式 但當f x 不能或很難直接求導,或f x 並沒有解析表示式,只是乙個數表,此時如何計算呢?中點微分公式 用來替代f x 在a點的導數值 2.中點公式的誤差分析 作泰勒展開 把以上2式代入中點公式有 則從截斷誤差...