功能或方法' ge'对于类型' sym'的输入参数

时间:2015-08-27 04:28:10

标签: matlab

帮助!我不明白这里发生了什么。

我的代码:

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);

  

我认为这与对数有关

1 个答案:

答案 0 :(得分:1)

我要猜测 - 总是包括错误消息逐字和上下文代码以获得更好的帮助。

我认为您已将g创建为sym类型。您不能将>=gesyms一起使用,因为作为符号,它们不是可比较的数字。

您可以使用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