通常,mathematica总是假设最一般的情况,也就是说,如果我设置一个函数
a[s_]:={a1[s],a2[s],a3[s]}
并想要计算其规范
Norm[a[s]]
,例如,它将返回:Sqrt[Abs[a1[s]]^2 + Abs[a2[s]]^2 + Abs[a3[s]]^2]
但是,如果我知道所有
ai[s]
都是真实的,则可以调用:Assuming[{a1[s], a2[s], a3[s]} \[Element] Reals, Simplify[Norm[a[s]]]]
它将返回:
Sqrt[a1[s]^2 + a2[s]^2 + a3[s]^2]
这是我所期望的。
例如,尝试派生
a[s]
然后(注意D
)时发生问题:Assuming[{a1[s], a2[s], a3[s]} \[Element] Reals, Simplify[Norm[D[a[s],s]]]]
再次返回涉及绝对值的结果-来自数字可能是虚数的假设。
解决这个问题的方法是什么?我想定义一个实值函数,并像这样使用它。也就是说,例如,我希望其派生词是真实的。
最佳答案
我会改用自定义函数,例如
vecNorm[vec_?VectorQ] := Sqrt[ vec.vec ]
然后
In[20]:= vecNorm[D[{a1[s], a2[s], a3[s]}, s]]
Out[20]= Sqrt[
Derivative[1][a1][s]^2 + Derivative[1][a2][s]^2 +
Derivative[1][a3][s]^2]
关于wolfram-mathematica - 在Mathematica中使用实函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8355477/