二分法简单迭代法的matlab代码实现Word格式.docx
《二分法简单迭代法的matlab代码实现Word格式.docx》由会员分享,可在线阅读,更多相关《二分法简单迭代法的matlab代码实现Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
%xa解区间上限
%xb解区间下限
%n最多循环步数,防止死循环。
%delta为允许误差
x=xa;
fa=eval(fx);
x=xb;
fb=eval(fx);
disp('
[nxaxbxcfc]'
);
fori=1:
n
xc=(xa+xb)/2;
x=xc;
fc=eval(fx);
X=[i,xa,xb,xc,fc];
disp(X),
iffc*fa<
xb=xc;
elsexa=xc;
end
if(xb-xa)<
delta,break,end
end
〔二〕、简单迭代法程序:
function[x0,k]=iterate(f,x0,eps,N)
ifnargin<
4
N=500;
3
ep=1e-12;
x=x0;
x0=x+2*eps;
k=0;
whileabs(x-x0)>
eps&
k<
N
x0=x;
x=feval(f,x0);
k=k+1;
ifk==N
解:
a、g(x)=x5-3x3-2x2+2
二分法求方程:
〔1〕、在matlab的命令窗口中输入命令:
>
>
fplot('
[x^5-3*x^3-2*x^2+2]'
[-3,3]);
grid
得如下图:
由上图可得知:
方程在[-3,3]区间有根。
〔2〕、二分法输出结果
f='
x^5-3*x^3-2*x^2+2'
f=
x^5-3*x^3-2*x^2+2
bisect(f,-3,3,20,10^(-12))
2、迭代法求方程:
迭代法输出结果:
f=inline('
[x0,k]=iterate(fun1,2)
x0=
2
k=
1
[x0,k]=iterate(fun1,1.5)
NaN
6
[x0,k]=iterate(fun1,2.5)
5
〔3〕、误差分析:
由二分法和迭代法输出结果可知,通过定点迭代法得出方程的解误差比二分法大,而利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。
b、g(x)=cos(sin(x))
[cos(sin(x))]'
[-4,4]);
方程在[-4,4]区间无根。
f='
cos(sin(x))'
cos(sin(x))
bisect(f,-4,4,20,10^(-12))
[x0,k]=iterate(f,0.5)
15
[x0,k]=iterate(f,1)
[x0,k]=iterate(f,1.5)
16
[x0,k]=iterate(f,2)
[x0,k]=iterate(f,2.5)
14
(3)、由于该方程无解,所以无法比拟误差。
c、g(x)=x2-sin(x+0.15)
[x^2-sin(x+0.15)]'
[-10,10]);
x^2-sin(x+0.15)'
x^2-sin(x+0.15)
bisect(f,-3,3,30,10^(-12))
[x0,k]=iterate(f,1.96)
12
[x0,k]=iterate(f,0,2)
[x0,k]=iterate(f,0.2)
500
[x0,k]=iterate(f,0.3)
[x0,k]=iterate(f,0.001)
(3)、误差分析:
由二分法和迭代法输出结果可知,利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。
d、g(x)=xx-cos(x)
[x^(x-cos(x))]'
[-1,1]);
方程在[-1,1]区间有根。
x^(x-cos(x))'
x^(x-cos(x))
bisect(f,-0.1,0.1,20,10^(-12))
1.0000-0.10000.10000Inf
1.0e+002*
1.0e+003*
1.0e+004*
1.0e+005*
1.0e+006*
[x0,k]=iterate(f,0.01)
[x0,k]=iterate(f,0.81)
[x0,k]=iterate(f,0.61)