matlab!!!??? Input argument "f" is undefined. Error in ==> agui_bisect at 3 fa=feval(f,a);

functionx=agui_bisect(f,a,b,e)fa=feval(f,a);fb=feval(f,b);iffa*fb>0error('两端函数值为同号');... function x=agui_bisect(f,a,b,e)

fa=feval(f,a);
fb=feval(f,b);
if fa*fb>0
error('两端函数值为同号');
end
k=0
x=(a+b)/2
while(b-a)>(2*e)
fx=feval(f,x);
if fa*fx<0
b=x;
fb=fx;
else
a=x;
fa=fx;
end
k=k+1;
x=(a+b)/2;
end
展开
 我来答
tianxiawulang
2013-10-15 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2631万
展开全部

从功能上看,这个是二分法求根的程序。程序自身没有太大问题,楼主遇到的错误是因为直接从编辑器里面点运行了吧?

 

这个程序必须要提供具体的输入参数才可以:第一个参数是待求根的函数,第二、三个是根的区间,第四个是精度。

 

示例(求函数f(x)=1-x^2在0-3区间的根,程序保存为文件agui_bisect.m):

>> f=inline('1-x^2');
>> agui_bisect(f,0,3,1e-6)
ans =
         0.999999761581421

 

但需要注意,这个函数有个BUG,如果区间的中点刚好就是函数的根,则算法没有终止,继续计算下去而得到错误的结果:

>> f=inline('1-x^2');
>> agui_bisect(f,0,2,1e-6)
ans =
          1.99999904632568

 

要改正这个BUG,加入一行代码即可:

function x=agui_bisect(f,a,b,e)
fa=feval(f,a);
fb=feval(f,b);
if fa*fb>0
    error('两端函数值为同号');
end
k=0;
x=(a+b)/2;
while(b-a)>(2*e)
    fx=feval(f,x);
    if abs(fx) <= eps, break, end
    if fa*fx<0
        b=x;
        fb=fx;
    else
        a=x;
        fa=fx;
    end
    k=k+1;
    x=(a+b)/2;
end

此时求解就没问题了:

>> f=inline('1-x^2');
>> agui_bisect(f,0,2,1e-6)
ans =
     1
>> agui_bisect(f,0,3,1e-6)
ans =
         0.999999761581421
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式