文档详情

牛顿法和割线法.docx

发布:2017-05-27约字共11页下载文档
文本预览下载声明
作业十(第五章):1. 在区间(0,1.5)上分别用二分法、牛顿法和割线法编程求下面的函数的零点,精度要求10-10。二分法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*fa0 xb=xc;else xa=xc;endif (xb-xa)delta,break,endEnd二分法结果:迭代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);returnendwhile 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];returnendif km fprintf(牛顿法迭代M次没有找到方程的根) returnend x0=x1;endfprintf(\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];endfor k=2:mif abs(f0)abs(f1) 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]returnendEnd割线法结果:迭代7次 结果0.51492.编程求下面的函数在区间[0,13]上的所有零点,精度要求10-10。提示:先扫描得到解所在区间,再用迭代法求解。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);returnendif y0*y10 y0=y1;continueend x0=x-k;x1=x; [X]=gx9(fx,x0,x1,m,e);%割线法if xb X=x;disp(X);returnend 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];endfor k=2:mif abs(f0)abs(f1) 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]returnendEnd扫描法结果:
显示全部
相似文档