我们给学生一些练习,他们的解决方案是用maxima评估的。
答案涉及到单位步长函数。maxima中的计算似乎进行得很顺利,除了在unit_step函数上似乎缺少一些代数规则。
例如,is(unit_step(x)*unit_step(x) = unit_step(x))的计算结果为false。学生以这样的形式给出答案的可能性很小,但我们仍然不希望学生给出好答案的可能性被评估为不正确。
下面是我们尝试使用涉及unit_step函数(我们定义为u)的maxima进行评估的答案的屏幕截图:

发布于 2018-03-30 14:14:55
Maxima目前对unit_step了解不多(大约是Maxima 5.41)。这只是一个缺点,没有任何理由,除了没有人抽出时间来做这项工作。也就是说,取得一些进展并不太难。
乘法的简化程序将相同的项合并为幂:
(%i3) unit_step(x)*unit_step(x);
2
(%o3) unit_step (x)因此,让我们定义一个简化规则,它降低了unit_step的正幂。(我本来想说的是正整数幂,但稍加思考就会发现,非整数正幂也同样如此。)
(%i4) matchdeclare (aa, lambda ([e], e > 0)) $
(%i5) matchdeclare (xx, all) $
(%i6) tellsimpafter (unit_step(xx)^aa, unit_step(xx));
(%o6) [^rule1, simpexpt]让我们试一试。
(%i7) unit_step(x)*unit_step(x);
(%o7) unit_step(x)
(%i8) is (unit_step(x)*unit_step(x) = unit_step(x));
(%o8) true
(%i9) unit_step(t - 5)^(1/4);
(%o9) unit_step(t - 5)
(%i10) assume (m > 0);
(%o10) [m > 0]
(%i11) unit_step(2*u + 1)^m;
(%o11) unit_step(2 u + 1)到现在为止还好。当然,这只是一个身份,还有其他身份可能是有用的。由于此规则不是内置的,因此必须加载该定义才能使用它;如果您打算让其他人使用它,这将是一件麻烦的事情。
根据记录,我在Maxima源代码中找到的对集成的惟一简化是在share/contrib/ unit_step /abs_Integrate.mac中,其中包含一个应用identity unit_step(a)*unit_step(b) --> unit_step(min(a, b))的函数unit_step_mult_simp。
https://stackoverflow.com/questions/49530311
复制相似问题