尝试比较函数内的符号时“无法证明`expr`字面上......”错误

时间:2013-09-23 18:46:53

标签: matlab symbolic-math

我刚刚开始学习MATLAB,我正在尝试规范化由{/ p>给出的bump函数

function b = bump(x)
region1 = abs(x) < 1
b(region1) = (exp(-1./(1 - x(region1).^2)))
region2 = abs(x) >= 1
b(region2) = 0
end

要做到这一点,我需要将-1除以定积分。但是,当我输入

syms x;
int(bump(x), -1, 1)

我收到一条很长的错误消息,上面写着

  

使用symengine时出错(第58行)
    无法证明'abs(x)&lt; 1'字面意思。要以数学方式测试语句,请使用isAlways。

     

sym / subsindex中的错误(第1554行)
    X = find(mupadmex('symobj :: logical',A.s,9)) - 1;

     

sym&gt; privformat中的错误(第2357行)
    x = subsindex(x)+1;

     

sym / subsref中的错误(第1578行)
    [inds {k},refs {k}] = privformat(inds {k});

     

碰撞错误(第3行)
    b(region1)=(exp(-1 ./(1 - x(region1)。^ 2)))

我尝试将abs(x)<1替换为我认为建议的isAlways(abs(x)<1),并删除了错误,但它给出了错误的答案(它表示积分为零)。

我不明白错误信息的含义。

1 个答案:

答案 0 :(得分:2)

syms xx定义为符号变量,在x上调用符号计算。这可能不是你想要的。

相反,将x定义为某种输入矩阵,例如: x = zeros(3);。或者,要进行数值积分,请使用integral函数:

integral(@bump, -1, 1)