【问题标题】:Mathematica Evaluation Control and ExpressionsMathematica 求值控制和表达式
【发布时间】:2012-01-07 20:43:09
【问题描述】:

我正在使用的表达式过于复杂,无法在此处完全输入,但我提供了一个简单的示例来突出我遇到的问题。我希望有人有足够的编程毅力来帮助我解决这个问题。让我先说我在一般编程方面几乎没有背景,但我知道 Mathematica 的基础知识。非常感谢任何和所有帮助。假设我设置了以下功能:

X[x_] := x Log[x]
X[0] := 0
Y[y_] := y Log[y]
Y[0] := 0
Z[z_] := z Log[z]
A[x_, y_, z_] := X[x] + Y[y] + Z[z]

In[7]:= A[x, y, z]

Out[7]= x Log[x] + y Log[y] + z Log[z]

In[8]:= B[x_, y_, z_] := 
 Evaluate[A[x, y, z] - x*D[A[x, y, z], x] - y*D[A[x, y, z], y] - 
   z*D[A[x, y, z], z]]

In[9]:= B[x, y, z]

Out[9]= x Log[x] - x (1 + Log[x]) + y Log[y] - y (1 + Log[y]) + 
 z Log[z] - z (1 + Log[z])

我已经使用X[x]Y[y]Z[z] 的规则设置了A[x,y,z],以便它可以处理x,y,z == 0 的情况,即x == 0 我想要@987654328 中的所有表达式@ 和 x 归零或被忽略,包括 Log[x]。我定义了一个函数B[x,y,z],它涉及A[x,y,z] 的偏导数。现在,我想要结果,以便B[0,y,z] 产生

yLog[y]-y(1+Log[y])+zLog[z]-z(1+Log[z])

那基本上是返回并制作A[x,y,z]:= Y[y]+Z[z],但我目前遇到了以下可以理解的错误:

Infinity::indet:遇到不确定的表达式 0 (-[Infinity])。 >>

Mathematica 一定有办法解决这个问题,我想知道它是否会涉及 Hold 函数或相关的东西。谢谢大家的帮助。

【问题讨论】:

    标签: wolfram-mathematica controls evaluation expression


    【解决方案1】:

    一种方法是在导数中使用虚拟变量,然后用实际值替换。

    Clear[X, Y, Z];
    X[x_] := x Log[x]
    X[0]   = 0;
    Y[y_] := y Log[y]
    Y[0]   = 0;
    Z[z_] := z Log[z]
    Z[0]   = 0;
    
    A[x_, y_, z_] := X[x] + Y[y] + Z[z]    
    B[x_, y_, z_] := 
     Module[{xx, yy, zz}, 
      A[x, y, z] - x*D[A[xx, y, z], xx] - y*D[A[x, yy, z], yy] - 
        z*D[A[x, y, zz], zz] /. {xx -> x, yy -> y, zz -> z}]
    
    B[0, y, z]
    
    (* Output: y Log[y] - y (1 + Log[y]) + z Log[z] - z (1 + Log[z]) *)
    

    之所以有效,是因为每个导数的因子为 0。更通用的解决方案可能涉及在 X, Y, Z 上定义 UpValues 以处理原点的导数(我目前没有时间检查这个)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      相关资源
      最近更新 更多