1

我刚开始学习 MATLAB,我正在尝试规范化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 到 1 的定积分。但是,当我输入

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

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

使用 symengine 时出错(第 58 行)
无法从字面上证明 'abs(x) < 1'。要以数学方式测试该语句,请使用 isAlways。

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

sym>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)替换,这消除了错误,尽管它给出了错误的答案(它说积分为零)。

我不明白错误消息是什么意思。

4

1 回答 1

2

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

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

integral(@bump, -1, 1)
于 2013-09-23T19:03:09.760 回答