二分法MATLAB实现在书上看见一个关于二分法的MATLAB程序,按照书上程序却无法计算.总是显示程序错误,请高手看看这个程序是不是有问题.function [c,err,yc]=bisect(f,a,b,delta)% f是所要求解的函数% a和
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/02 23:25:05
二分法MATLAB实现在书上看见一个关于二分法的MATLAB程序,按照书上程序却无法计算.总是显示程序错误,请高手看看这个程序是不是有问题.function [c,err,yc]=bisect(f,a,b,delta)% f是所要求解的函数% a和
二分法MATLAB实现
在书上看见一个关于二分法的MATLAB程序,按照书上程序却无法计算.总是显示程序错误,请高手看看这个程序是不是有问题.
function [c,err,yc]=bisect(f,a,b,delta)
% f是所要求解的函数
% a和b分别为有根区间左右限
% delta是所允许的误差界
% c为所求近似解
% yc为函数f在c上的值
% err是c的误差估计
if nargin0,
disp('(a,b)不是有根区间');
return,end
max1=1+round((log(b-a)-log(delta))/log(2))
for k=1:max1
c=(a+b)/2;
yc=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)
二分法MATLAB实现在书上看见一个关于二分法的MATLAB程序,按照书上程序却无法计算.总是显示程序错误,请高手看看这个程序是不是有问题.function [c,err,yc]=bisect(f,a,b,delta)% f是所要求解的函数% a和
>> f=inline('x^2-x-2');
>> [c,err,yc]=bisect(f,0,3,0.01)
c =
2.0010
err =
0.0059
yc =
0.0029
-----------
%使用二分法 求解上面超越方程
%下面是二分法的函数文件,你直接设置输入参数就可以了
function [c,err,yc]=bisect(f,a,b,delta)
%Input - f is the function
% - a and b are the left and right endpoints
% - delta is the tolerance
%Output - c is the zero
% - yc= f(c)
% - err is the error estimate for c
%If f is defined as an M-file function use the @ notation
% call [c,err,yc]=bisect(@f,a,b,delta).
%If f is defined as an anonymous function use the
% call [c,err,yc]=bisect(f,a,b,delta).
% NUMERICAL METHODS: Matlab Programs
% (c) 2004 by John H. Mathews and Kurtis D. Fink
% Complementary Software to accompany the textbook:
% NUMERICAL METHODS: Using Matlab, Fourth Edition
% ISBN: 0-13-065248-2
% Prentice-Hall Pub. Inc.
% One Lake Street
% Upper Saddle River, NJ 07458
ya=f(a);
yb=f(b);
if ya*yb > 0,return,end
max1=1+round((log(b-a)-log(delta))/log(2));
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;
end
if b-a < delta, break,end
end
c=(a+b)/2;
err=abs(b-a);
yc=f(c);