牛顿法和割线法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

作业十(第五章):1. 在区间(0,1.5)上分别用二分法、牛顿法和割线法编程求下面的函数的零点,精度要求10-10。

22

()=cos(2)

f x x x

二分法

function [X]=bisection(fx,xa,xb,n,delta)

% 二分法解方程

% fx是由方程转化的关于x的函数,有fx=0。

% xa 解区间上限

% xb 解区间下限

%解区间人为判断输入

% n 最多循环步数,防止死循环。

%delta 为允许误差

x=xa;fa=eval(fx);

x=xb;fb=eval(fx);

for i=1:n

xc=(xa+xb)/2;x=xc;fc=eval(fx);

X=[i,xc,fc];

if fc*fa<0

xb=xc;

else xa=xc;

end

if (xb-xa)

二分法结果:

迭代34次,xc=0.5149

牛顿法

function [X]=newton(fx,e,x0,m) x=x0;k=0;

F=eval(fx);

if abs(F)<=e

X=[x F];

disp(X);

return

end

while k<=m

x=x0;g=eval(diff(fx));

x1=x0-F/g;

x=x1;F=eval(fx);k=k+1;

if abs(F)<=e

X=[x1 F k];return

end

if k>m

fprintf('牛顿法迭代M次没有找到方程的根')

return

end

x0=x1;

end

fprintf('\n%s%.4f\t%s%d','X=',X,'k=',k) %输出结果牛顿法结果:

迭代5次结果0.5149

割线法:function [X]=gx9(fx,x0,x1,m,e)

x=x0;f0=eval(fx);

x=x1;f1=eval(fx);

if abs(f0)<=e

X=[x0,f0];

end

for k=2:m

if abs(f0)

b=x0;x0=x1;x1=b;

b=f0;f0=f1;f1=b;

end

t=(x1-x0)/(f1-f0);x0=x1;f0=f1; x1=x1-t*f1;

x=x1;f1=eval(fx);

if abs(f1)<=e

X=[x1,f1,k]

return

end

End

割线法结果:

迭代7次结果0.5149

2.编程求下面的函数在区间[0,13]上的所有零点,精度要求10-10。提示:先扫描得到解所在区间,再用迭代法

求解。

()=2-cos

x

f x x

function [X]=scan(a,b,fx)

x=a;y0=eval(fx);m=100000;e=10^-10; for k=0:0.01:13

x=x+k;

y1=eval(fx);

if y1==0

X=x;disp(X);

return

end

if y0*y1>0

y0=y1;continue

end

x0=x-k;x1=x;

[X]=gx9(fx,x0,x1,m,e);%割线法

if x>b

X=x;disp(X);

end

y0=y1;

end

%%%%%%%%%%%%%%%%

function [X]=gx9(fx,x0,x1,m,e)

x=x0;f0=eval(fx);

x=x1;f1=eval(fx);

if abs(f0)<=e

X=[x0,f0];

end

for k=2:m

if abs(f0)

b=x0;x0=x1;x1=b;

b=f0;f0=f1;f1=b;

end

t=(x1-x0)/(f1-f0);x0=x1;f0=f1; x1=x1-t*f1;

x=x1;f1=eval(fx);

if abs(f1)<=e

X=[x,f1,k]

end

End

扫描法结果:

相关文档
最新文档