二分法又称对分法,是求非线性方程根的最简单方法,他的求解基本思想是由介值定理得到的。
Pavel学数值分析时的课程设计是用Matlab编程实现这个功能
具体的算法大家课本上都有了,就把M文件的内容和大家分享一下吧!
function [c,err,yc]=bisect(f,a,b,delta)
%f是要求解的函数
%a和b分别是有根区间的左右限
%delta是允许的误差界
%c为所求近似解
%yc为函数f在c的误差估计
if nargin<4 delta=1e-5;end
ya=feval('f',a);
yb=feval('f',b);
if yb==0,c=b,return,end
if ya*yb>0
disp('(a,b)不是有根区间');
return,end
max1=1+round((log(b-a)-log(delta))/log(2));
for k=1:max1
c=(a+b)/2;
ye=feval('f',c);
if yc==0 a=c;b=c;break,
elseif yb*yc>0
b=c;yb=yc;
else
a=c;ya=c;
end
if(b-a)
end
k,c=(a+b)/2,err=abs(b-a),yc=feval('f',c)
例如,要求f(x)=x3-x-1=0在区间[1,2]内的根
先在命令窗口中输入:
>>fplot('[x^4-x-1,0]',[1 2]);grid
回车后输出曲线图
现在再编写所求的非线性函数,输入:
f=inline('x^4-x-1');
bisect(f,1,2)
敲回车就能得到你想要的了,呵呵
Pavel祝你好运!