Symbolic Math Toolbox 中 symsum() 函数的问题
Problems with symsum() function in Symbolic Math Toolbox
我在 MATLAB 的符号数学工具箱中使用 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)
which returns 0
而不是上面指出的正确结果。
这是因为 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), for a positive integer n, differentiates S n times.
diff(S,'v',n) and diff(S,n,'v') are also acceptable.
换句话说,该函数不支持符号变量来指定积分顺序。订单 n
(或代码中的 i
)也仅限于标量。不幸的是,MuPAD 的相关功能也有类似的局限性。
在我看来,如果 sym/diff
有此限制,它应该抛出错误而不是返回垃圾。我建议您 file a service request 与 MathWorks 一起报告此问题。您还可以请求更新函数以处理积分输入顺序的符号变量。
我在 MATLAB 的符号数学工具箱中使用 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)
which returns 0
而不是上面指出的正确结果。
这是因为 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), for a positive integer n, differentiates S n times.
diff(S,'v',n) and diff(S,n,'v') are also acceptable.
换句话说,该函数不支持符号变量来指定积分顺序。订单 n
(或代码中的 i
)也仅限于标量。不幸的是,MuPAD 的相关功能也有类似的局限性。
在我看来,如果 sym/diff
有此限制,它应该抛出错误而不是返回垃圾。我建议您 file a service request 与 MathWorks 一起报告此问题。您还可以请求更新函数以处理积分输入顺序的符号变量。