帮助!我不明白这里发生了什么。
我的代码:
function y = bisection(TOL, a, b, f)
pm = (a+b)/2;
fprintf('\t--- METODO de Biseccion ---\n\tFuncion: "%s"\n', char(f));
fprintf('\tIntervalo: [%f,%f]\n',a,b);
fprintf('\t----a----\t----b----\t----pm---\t---f(a)---\t---f(b)---\t---f(pm)---\n');
while (abs(a-b) >= TOL) && (abs(subs(f,pm)+0)>= TOL)
pm = (a+b)/2;
fa = subs(f,a);
fb = subs(f,b);
fpm = subs(f,pm);
fprintf('\t%f,\t%f,\t%f,\t%f,\t%f,\t%f\n',a,b,pm,fa,fb,fpm);
if (fa*fb >= 0 )
error('ERROR, no hay raiz');
end
if ( fpm * fa < 0)
b = pm;
else
if ( fpm * fb <0 )
a = pm;
end
end
end
%disp(pm);
fprintf('\tRaiz: %f\n',pm);
y = pm;
return;
end
我正在用这个函数调用这个函数
g = x ^ 2-4 * x + 4 - (log(x));
p =二分(10 ^ -2,1,2,g);
我认为这与对数有关
答案 0 :(得分:1)
我要猜测 - 总是包括错误消息逐字和上下文代码以获得更好的帮助。
我认为您已将g
创建为sym
类型。您不能将>=
或ge
与syms
一起使用,因为作为符号,它们不是可比较的数字。
您可以使用assume
设置f
上的边界,但我认为这不适用于您的应用。
不要使x
符号化,而是使g
成为匿名函数。
g = @(x) x^2-4*x+4 -(log(x));
p = bisection(10^-2,1,2,g);
然后,在您的函数中,您需要替换所有出现的
subs(f, a);
使用
f(a)
将评估值a
的匿名函数。
>> g(2.3)
ans =
-0.7429