符号数学工具箱中的symsum()函数问题

时间:2015-04-25 22:27:57

标签: matlab math symbolic-math toolbox

在MATLAB的Symbolic Math Toolbox中使用symsum函数时遇到了一些问题。我的代码应该返回:

ans = sin(x) + x*cos(x) - x^2 / 2 * sin(x)

我认为它与符号变量有关,但我是MATLAB的新手,所以我们将不胜感激。

这是我的代码:

syms x i;
f(x) = sin(x);

symsum(x^i/factorial(i)*diff(f,x,i), i, 0, 2)

返回0而不是上面指出的正确结果。

1 个答案:

答案 0 :(得分:2)

这是因为diff(f,x,i)的计算结果为零。使用symsum时,您需要注意,与任何Matlab函数一样,输入参数将在传入之前进行评估。只需使用for循环(sym/diff未向量化在第三个论点 - 见下文):

syms x y;
f(x) = sin(x);
n = 0:2;
y = 0;
for i = n
    y = y+x^i/factorial(i)*diff(f,x,i);
end

或者,您可以尝试这种形式(在这种情况下,只有三个索引,上面的内容可能更有效):

syms x y;
f(x) = sin(x);
n = 0:2; % Increasing orders of differentiation
y = diff(f,x,n(1));
yi = [y(x) zeros(1,length(n)-1)]; % To index into array, yi cannot be symfun
for i = 2:length(n)
    % Calculate next derivative from previous
    yi(i) = diff(yi(i-1),x,n(i)-n(i-1));
end
% Convert yi back to symfun so output is symfun
y = sum(x.^n./factorial(n).*symfun(yi,x));


为什么diff(f,x,i)评估为零,即使i是符号的?来自sym/diff的文档:

  

diff (S,n),对于正整数n,区分S n次。
    diff (S,'v',n)和 diff (S,n,'v')也可以接受。

换句话说,该函数不支持符号变量来指定积分的顺序。订单n(或代码中的i)也仅限于标量。不幸的是,MuPAD的相关功能也有类似的限制。

在我看来,sym/diff如果有此限制而不是返回垃圾,则应该抛出错误。我建议您{MathWorks的file a service request报告此问题。您还可以请求更新函数以处理集成输入顺序的符号变量。