【问题标题】:How do I get maxima to simplify logs usefully如何获得最大值以有效地简化日志
【发布时间】:2020-09-16 13:40:06
【问题描述】:

我有一个生成术语的最大值脚本,在运行 logcontract 后,我​​得到一个包含许多类型术语的表达式

log((A^n)/(B^n))

其中 A 和 B 都是非平凡表达式

如何获得最大值以将其重新排列为n*log(A/B),以便我可以根据log(A/B) 执行变量替换和因子?

我明确需要log(A/B)而不是log(A)-log(B)的形式

A 和 B 可以假定为正数。

【问题讨论】:

    标签: maxima


    【解决方案1】:

    好的,拿两个。这是通过模式匹配的另一种方法。

    (%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) ...这没有错,但很不方便。可能与参数匹配的顺序有关;我没有调查。

    【讨论】:

    • 那行得通。 log(aa^nn/bb^nn) 与 log(bb^nn/aa^nn) 似乎是表达式 A 和 B 的函数,但之后可以用另一个替换来处理。
    【解决方案2】:

    我发现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
    

    【讨论】:

    • 嗯,刚试过,它适用于一般情况n,但是如果n是整数,它会恢复到不希望的行为
    • 嗯,是的,你是对的。根据logcontract 的文档,这正是它应该做的;它为n 工作只是一个快乐的意外。我尝试了logconcoeffp 选项,但无法正常工作。在这一点上,我认为模式匹配解决方案(通过tellsimptellsimpafterdefruledefmatch)是可能的。让我考虑一下。
    猜你喜欢
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2015-07-03
    相关资源
    最近更新 更多