rot*_*ton 1 symbolic-math octave cumsum
我写了一个涉及cumsum符号向量的小八度脚本,我希望它可以工作,但不幸的是,它没有。这是代码:
pkg load symbolic
n = 3;
syms q x
q = sym('q', [n 1]);
x = sym('x', [n 1]);
cumsum(q - x)
Run Code Online (Sandbox Code Playgroud)
我得到的不是预期的结果:
错误:cumsum:错误的类型参数“类”
为什么会发生这种情况?它可以与 Matlab Symbolic Toolbox 一起使用吗?(不幸的是,我没有它,所以我无法测试。)
那只是因为cumsum如错误消息所示,符号元素不支持用 Octave 编写。您的代码在 MATLAB 中提供以下内容:
ans =
q1 - x1
q1 + q2 - x1 - x2
q1 + q2 + q3 - x1 - x2 - x3
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
t1 = q-x;
t2 = triu(ones(numel(t1)));
sum(repmat(t1,1,3).*t2).'
% repmat is necessary here because implicit expansion is also not
% supported for matrices of class sym in Octave
Run Code Online (Sandbox Code Playgroud)
Octave 和 MATLAB 中的上述代码分别给出了以下内容:
ans = (sym 3×1 matrix)
? q?? - x?? ?
? ?
? q?? + q?? - x?? - x?? ?
? ?
?q?? + q?? + q?? - x?? - x?? - x???
Run Code Online (Sandbox Code Playgroud)
ans =
q1 - x1
q1 + q2 - x1 - x2
q1 + q2 + q3 - x1 - x2 - x3
Run Code Online (Sandbox Code Playgroud)