我试图使用符号int((函数来计算卷积积分,我的程序没有返回有用的答案,而是返回积分本身。这是我的代码
clc; clear;
pkg load symbolic
syms t tau Wn % Declare symbolic variables
f = tau^2 * sin( Wn *(t-tau) );
convolution = int( f, tau, [0 t] ); % Specify tau as the integration variable
% and integration limits are from 0 to t
pretty(convolution)
代码运行,但不会返回有用的内容。它没有返回答案,而是返回以下内容:
t
⌠
⎮ 2
⎮ τ ⋅sin(Wn⋅t - Wn⋅τ) dτ
⌡
0
即具有其内部函数的原始积分
我已经尝试通过以下方式排除问题:
- 从Octave int((帮助页面复制/粘贴示例代码,这样可以计算定积分
- 将集成语法从0,t更改为[0,t]这不会改变任何内容
- 生成变量f并将函数存储在那里,而不是函数位于int((内部。这不会改变任何内容
我知道符号包正在工作,因为示例代码返回了正确的定积分。
谢谢。
您可以使用eval
来"评估";(duh(积分。例如,使用上面的代码,我得到:
octave:9> eval( convolution )
ans = (sym)
⎧ 2
⎪t 2⋅cos(Wn⋅t) 2
⎪── + ─────────── - ─── for Wn > -∞ ∧ Wn < ∞ ∧ Wn ≠ 0
⎨Wn 3 3
⎪ Wn Wn
⎪
⎩ 0 otherwise
注意,如果你真的在工作空间上"定义"了一些符号,那么这些符号就会被考虑在内:
octave:10> Wn = 1; % or preferably `sym('1')` ...
octave:11> eval( convolution )
ans = (sym)
2
t + 2⋅cos(t) - 2