首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >is(unit_step(x)*unit_step(x) = unit_step(x))计算为false

is(unit_step(x)*unit_step(x) = unit_step(x))计算为false
EN

Stack Overflow用户
提问于 2018-03-28 17:04:27
回答 1查看 85关注 0票数 1

我们给学生一些练习,他们的解决方案是用maxima评估的。

答案涉及到单位步长函数。maxima中的计算似乎进行得很顺利,除了在unit_step函数上似乎缺少一些代数规则。

例如,is(unit_step(x)*unit_step(x) = unit_step(x))的计算结果为false。学生以这样的形式给出答案的可能性很小,但我们仍然不希望学生给出好答案的可能性被评估为不正确。

下面是我们尝试使用涉及unit_step函数(我们定义为u)的maxima进行评估的答案的屏幕截图:

EN

回答 1

Stack Overflow用户

发布于 2018-03-30 14:14:55

Maxima目前对unit_step了解不多(大约是Maxima 5.41)。这只是一个缺点,没有任何理由,除了没有人抽出时间来做这项工作。也就是说,取得一些进展并不太难。

乘法的简化程序将相同的项合并为幂:

代码语言:javascript
复制
(%i3) unit_step(x)*unit_step(x);
                                   2
(%o3)                     unit_step (x)

因此,让我们定义一个简化规则,它降低了unit_step的正幂。(我本来想说的是正整数幂,但稍加思考就会发现,非整数正幂也同样如此。)

代码语言:javascript
复制
(%i4) matchdeclare (aa, lambda ([e], e > 0)) $
(%i5) matchdeclare (xx, all) $
(%i6) tellsimpafter (unit_step(xx)^aa, unit_step(xx));
(%o6)                  [^rule1, simpexpt]

让我们试一试。

代码语言:javascript
复制
(%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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49530311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档