如何获得最大值以有效地简化日志

问题描述

我有一个最大值脚本,该脚本会生成条件,在运行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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...