0

我正在尝试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

But if formula involves second derivatives I get a diff(0,r) in the result that won't go away even when using simplify:

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

(My actual formula is quite long involving first and second derivatives of two variables. I know that all derivatives with respect to a certain variable are 0 and I'd like to remove them).

4

1 回答 1

2

一种方法是将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是适合工作的工具,因此了解其中的区别很重要。

于 2015-09-10T05:15:14.760 回答