八度积分不评估带符号变量的定积分

问题描述

我正在尝试使用符号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