【问题标题】:How to tell maple that derivative of zero is zero when substituting?替换时如何告诉maple零的导数为零?
【发布时间】:2015-12-06 01:37:26
【问题描述】:

我正在尝试在 maple 中使用 subs 将较长公式中的导数替换为 0:

subs(diff(u(r),r) = 0, formula);

似乎如果formula 只涉及u(r) 的一阶导数,这就像我预期的那样工作。例如,

formula := diff(u(r),r);
subs(diff(u(r),r) = 0, formula);
                                        0

但如果formula 涉及二阶导数,我会在结果中得到diff(0,r),即使使用simplify 也不会消失:

formula := diff(u(r),r,r);
subs(diff(u(r),r) = 0, formula);
                                         d
                                         -- 0
                                         dr

(我的实际formula 很长,涉及两个变量的一阶和二阶导数。我知道某个变量的所有导数都是 0,我想删除它们)。

【问题讨论】:

    标签: substitution symbolic-math maple simplification symbolic-computation


    【解决方案1】:

    一种方法是将simplify 命令与所谓的侧关系一起使用。

    formula := diff(u(r),r,r) + 3*cos(diff(u(r),r,r))
               + diff(u(r),r) + x*(4 - diff(u(r),r,r,r)):
    
    simplify( formula, { diff(u(r),r) = 0 } );
    
                                   3 + 4 x
    
    formula2 := diff(u(r,s),s,s) + 3*cos(diff(u(r,s),r,r))
                + diff(u(r,s),r) + x*(4 - diff(u(r,s),r,s,r,r)):
    
    simplify( formula2, { diff(u(r,s),r) = 0 } );
    
                              /  2         \      
                              | d          |      
                          3 + |---- u(r, s)| + 4 x
                              |   2        |      
                              \ ds         /      
    

    [编辑] 我忘了回答你之前为什么得到d/dr 0 的附加问题。答案是因为您使用了 subs 而不是 2-argument eval。前者进行纯粹的句法替换,并且不评估结果。后者是人们经常需要的,在不知情的情况下,会“在(特定)点进行评估”。

    formulaA := diff(u(r),r,r):
    
    subs(diff(u(r),r) = 0, formulaA);
    
                              d   
                             --- 0
                              dr  
    
    %; # does an evaluation
    
                               0
    
    eval(formulaA, diff(u(r),r) = 0);
    
                               0
    
    formulaB := diff(u(r,s),s,r,r,s):
    
    eval(formulaB, diff(u(r,s),r) = 0);
    
                               0
    

    您可以看到,对这些 d/dr 0 对象的任何评估都会产生 0。但使用 2 参数 eval 通常比使用 eval(subs(...)) 更好。人们使用subs 是因为它听起来像是“替代”,我猜,或者他们看到其他人使用它。有时subs 是适合工作的工具,因此了解其中的区别很重要。

    【讨论】:

    • 这对我有用。我仍然想知道 d/dr 0 的论文从何而来,以及我将如何 摆脱它们。
    • 好的,我添加了一个关于subs的注释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2016-12-05
    • 2021-10-25
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多