如何让maxima有效简化日志
我有一个生成术语的maxima脚本,在运行logcontract之后,我会得到一个表达式,其中包含许多类型的术语如何让maxima有效简化日志,maxima,Maxima,我有一个生成术语的maxima脚本,在运行logcontract之后,我会得到一个表达式,其中包含许多类型的术语 log((A^n)/(B^n)) 其中A和B都是非平凡表达式 如何让maxima将其重新排列为n*log(A/B),以便我可以根据log(A/B)执行变量替换和因子 我明确地需要它的形式是log(A/B),而不是log(A)-log(B) A和B可能被假定为正。我发现以下logexpand(带有super选项)和logcontract的组合似乎可以完成这项工作 (%i1) log(
log((A^n)/(B^n))
其中A和B都是非平凡表达式
如何让maxima将其重新排列为n*log(A/B)
,以便我可以根据log(A/B)
执行变量替换和因子
我明确地需要它的形式是log(A/B)
,而不是log(A)-log(B)
A和B可能被假定为正。我发现以下
logexpand
(带有super
选项)和logcontract
的组合似乎可以完成这项工作
(%i1) log((A^n)/(B^n)), logexpand=super;
(%o1) log(A) n - log(B) n
(%i2) %, logcontract;
A
(%o2) log(-) n
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)
。。。这没有错,但很不方便。可能与参数匹配的顺序有关;我没有调查。嗯,只是尝试了一下,它适用于一般情况n,但是如果n是一个整数,它会恢复到不希望出现的行为,嗯,是的,你是对的。根据logcontract
的文档,这正是它应该做的;它为n
工作只是一个愉快的意外。我尝试了logconcoeffp
选项,但什么都没用。此时,我认为模式匹配解决方案(通过tellsimp
,tellsimpafter
,defrule
或defmatch
)是可能的。让我想想,这很有效。log(aa^nn/bb^nn)vs log(bb^nn/aa^nn)似乎是表达式a和B的函数,但这可以在后面用另一个替换来处理。