實驗一非線性方程的數值解法
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式代入中點公式有 則從截斷誤差...