MATLAB:无法从sym转换为逻辑

时间:2013-06-02 22:43:15

标签: matlab newtons-method

我遇到了我在这里构建的用户定义函数的问题。我想要做的是将值替换为符号函数,然后将该数字答案用于各种目的。具体在这里:

x = xo;
subst = subs(f,x);
while((n>i) && (subst > eps))

运行我的程序,我收到以下错误:

>> sym_newtonRaphson(f,fdiff,1,1e-8,10)
Conversion to logical from sym is not possible.

Error in sym_newtonRaphson (line 8)

我尝试使用double(subs(f,x))无济于事。我似乎得到了与MuPAD(DOUBLE cannot convert the input expression into a double array.

有关的完全不同的错误

以下是整个计划:

function [output] = sym_newtonRaphson(f,fdiff,xo,eps,n)

i = 0;
%initial iteration
x = xo;
subst = subs(f,x);

  while((n>i) && (subst > eps))
     x = x - (subs(f,x))/fdiff;
     i = i+1;
     subst = subs(f,x);
     %fprintf('%f\t%f\t%f\t%f\t%f\t%f',i,alpha,f(
  end
  output = x;
end

我很欣赏一些关于我做错事的指示;祝一切顺利。

1 个答案:

答案 0 :(得分:1)

您尝试对while表达式执行的操作等同于logical(f),其中f是符号函数(而不是符号值)。 logical(sym('exp(1)') > 0)很好,但logical(sym('exp(f)') > 0)通常不会出现(参见assume)。 Matlab无法将符号变量转换为逻辑(真和假)变量。它尝试执行此操作,因为符号变量不支持short circuit AND operator&&。例如

a = 1.5;
syms x;

% All of these will not generate errors
y1 = x > 1;
y2 = x > 1 & x < 2;
y3 = x > 1 & x < 2;
y4 = x > 1 & a < 2;
y5 = x > 1 & a > 2;

% These will result in errors
y2 = x > 1 && x < 2;
y3 = x > 1 && x < 2;
y4 = x > 1 && a < 2;
y5 = x > 1 && a > 2;

你应该打印出subst并确保它是一个符号值或一个不包含任何变量的函数(如果argnames(subst)返回一个空的符号矩阵,那么你应该没问题)。当您调用double时出现第二个错误这一事实似乎暗示subst实际上是一个仍然包含未知变量的表达式。如果是这种情况,那么您需要替换其他变量或使用假设(see here)才能进行逻辑比较。