如何解决如何获得最大值以有效地简化日志
我有一个最大值脚本,该脚本会生成条件,在运行logcontract后,我会得到一个包含许多类型的条件的表达式
log((A^n)/(B^n))
其中A和B都是非平凡的表达式
如何获取最大值以将其重新排列为n*log(A/B)
,以便随后可以根据log(A/B)
进行变量替换和分解?
我明确地以log(A/B)
而不是log(A)-log(B)
的形式使用它
A和B可以假定为正。
解决方法
好,请两个。这是通过模式匹配的另一种方法。
(%i1) matchdeclare ([aa,bb,nn],all);
(%o1) done
(%i2) defrule (mylogrule,log((bb^nn)/(aa^nn)),nn*log(bb/aa));
nn
bb bb
(%o2) mylogrule : log(----) -> log(--) nn
nn aa
aa
(%i3) log(A^4/B^4);
4
A
(%o3) log(--)
4
B
(%i4) apply1 (%o3,mylogrule);
A
(%o4) 4 log(-)
B
(%i5) log(A^k/B^k);
k
A
(%o5) log(--)
k
B
(%i6) apply1 (%o5,mylogrule);
A
(%o6) log(-) k
B
请注意,apply1
会找到log(...)
个表达式,甚至在复杂的表达式(不仅是顶级运算符为log
的表达式)中都应用规则。
我将规则写为log(bb^nn/aa^nn)
是因为log(aa^nn/bb^nn)
是以-nn*log(bb/aa)
的形式出现的...没错,但是很不方便。可能与参数匹配的顺序有关;我没有调查。
我发现_
(带有logexpand
选项)和super
的以下组合似乎可以完成工作。
logcontract
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。