我对Mathematica了解不多,所以我只能帮助你(部分)了解Matlab部分。
使用Matlab进行卷积转换函数意味着您可以用数字方式进行卷积。你对积分定义的意思是你想象征性地做它。为此,您需要Matlab Symbolic Toolbox。这本质上是Matlab的Maple插件。所以你想知道的是它在Maple中是如何工作的。
您可能会发现此链接有用(wikibooks),以便在Matlab中对MuPad进行介绍。
我尝试将你的盒子函数实现为Matlab中的函数
t = sym('t')
f = (t > -1) + (t < 1) - 1
但是当t是ob符号类型Function 'gt' is not implemented for MuPAD symbolic objects时,这不起作用。
您可以将f声明为分段函数,请参阅(matlab online help),但这在我的Matlab中不起作用。这些示例都是Maple语法,因此它们可以直接在Maple中使用。
为了避免这种情况,我使用了
t = sym('t')
s = sym('s')
f = @(t) heaviside(t + 1) - heaviside(t - 1)
不幸的是,这不成功
I = int(f(s)*f(t-s),s, 0, t)
给出
Warning: Explicit integral could not be found.
并未提供明确的结果。您仍然可以评估此表达式,例如
>> subs(I, t, 1.5)
ans =
1/2
但Matlab / MuPad未能根据t给你和明确表达。这并不是意料之外的,因为函数f是不连续的。对于符号计算来说,这并不容易。
现在我会去帮助计算机,幸运的是,你问的答案非常简单。您的示例中的卷积只是int_0^t BoxFunction(s) * BoxFunction(t - s) ds。整数BoxFunction(s) * BoxFunction(t - s)也是一个盒子函数,不是从[-1,1]开始的,而是一个较小的间隔(取决于t)。然后,您只需要在这个较小的时间间隔内集成函数f(x)=1。
首先需要手动完成其中的一些步骤,然后您可以尝试将它们重新输入Matlab。你甚至根本不需要计算机代数程序来得到答案。
也许Matematica或Maple实际上可以解决这个问题,请记住,Matlab附带的MuPad只是Maple的精简版本。也许以上可能仍然可以帮助你,它应该让你了解事情是如何协同工作的。尝试为f添加更好的功能,例如一个多项式,你应该让它工作。