Wolfram mathematica Mathematica求值控制与表达式
我正在使用的表达式太复杂,无法在这里完全输入,但我已经包含了一个简单的示例,突出了我遇到的问题。我希望有人有足够的编程毅力来帮助我解决这个问题。让我先说一下,我在编程方面基本上没有什么背景,但我知道Mathematica的基础知识。非常感谢您的任何帮助。假设我设置了以下功能:Wolfram mathematica Mathematica求值控制与表达式,wolfram-mathematica,controls,evaluation,expression,Wolfram Mathematica,Controls,Evaluation,Expression,我正在使用的表达式太复杂,无法在这里完全输入,但我已经包含了一个简单的示例,突出了我遇到的问题。我希望有人有足够的编程毅力来帮助我解决这个问题。让我先说一下,我在编程方面基本上没有什么背景,但我知道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]
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]的规则设置了一个[x,y,z],这样它就可以处理x,y,z==0的情况,也就是说,当x==0时,我希望A[x,y,z]中x为零的所有表达式或者被忽略,包括Log[x]。我定义了一个函数B[x,y,z],它包含a[x,y,z]的偏导数。现在,我想要结果,这样B[0,y,z]就可以产生
也就是说,基本上返回并生成一个[x,y,z]:=y[y]+z[z],但是我现在遇到了以下可以理解的错误:
Infinity::indet:遇到不确定表达式0-[Infinity]。>>
Mathematica一定有办法解决这个问题,我想知道它是否会涉及保持函数或其他相关的东西。谢谢大家的帮助。一种方法是在导数中使用虚拟变量,然后用实际值替换
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上的向上值,以便在原点处处理导数。目前我没有时间检查这一点。一种方法是在导数中使用虚拟变量,然后用实际值替换
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上定义upvalue来处理原点处的导数,我现在没有时间检查这个