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 展开
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 展开
展开全部
从功能上看,这个是二分法求根的程序。程序自身没有太大问题,楼主遇到的错误是因为直接从编辑器里面点运行了吧?
这个程序必须要提供具体的输入参数才可以:第一个参数是待求根的函数,第二、三个是根的区间,第四个是精度。
示例(求函数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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询