使用mathematica中的实际函数

时间:2011-12-02 11:13:12

标签: wolfram-mathematica

通常,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]]]]

再次返回涉及绝对值的结果 - 来自假设数字可能是虚数。

克服这个问题的方法是什么?我想定义一个实值函数,并使用它。也就是说,例如,我希望它的衍生物是真实的。

4 个答案:

答案 0 :(得分:7)

我会改用自定义函数,例如

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]

答案 1 :(得分:6)

警告:我对此没有多少实际经验,所以下面的例子没有经过全面测试(即我不知道是否有太多一般的假设可以打破我没想过的任何事情的)。


您可以使用$Assumptions来定义永久性假设:

我们可以说所有a1[s], a2[s], a3[s]都是实物:

$Assumptions = {(a1[s] | a2[s] | a3[s]) \[Element] Reals}

但如果你有例如a1[x](不是a1[s]),那么它将无效。所以我们可以使用模式对其进行一些改进:

$Assumptions = {(a1[_] | a2[_] | a3[_]) \[Element] Reals}

或者只是说a[_]的所有值都是真实的:

$Assumptions = {a[_] \[Element] Reals}

甚至大胆地说一切都是真实的:

$Assumptions = {_ \[Element] Reals}

(我不知道这会破坏什么)

AppendTo对于添加$Assumptions并保留以前的假设非常有用。

Assuming一样,此功能仅适用于SimplifyIntegrate等具有Assumtpions选项的功能。 D不是这样的功能。


ReduceFindInstance等某些函数可以选择仅在Reals,Integers等域上工作,这些函数假定它们使用的所有表达式和子表达式都是真实的。


ComplexExpand[],有时FunctionExpand[]在类似情况下也可能有用(但不是真的在这里)。示例:ComplexExpand[Abs[z]^2, TargetFunctions -> {Sign}]FunctionExpand[Abs'[x], Assumptions -> {x \[Element] Reals}]


一般,据我所知,没有数学方式告诉Mathematica变量是真的。只能使用模式以正式方式执行此操作,并且仅对具有Assumptions选项的某些函数执行此操作。 “正式”是指如果你告诉它a[x]是真实的,它将不会自动知道a'[x]也是真实的。

答案 2 :(得分:2)

在这种情况下,您可以使用ComplexExpand,但需要解决方法。例如

ComplexExpand[Norm[a'[s], t]] /. t -> 2

返回

Sqrt[Derivative[1][a1][s]^2 + Derivative[1][a2][s]^2 + Derivative[1][a3][s]^2]

请注意,执行类似ComplexExpand[Norm[a'[s], 2]](或ComplexExpand[Norm[a'[s], p]] p其中{{1}}为理性数字)的内容由于某种原因无效。

答案 3 :(得分:2)

对于较旧的Mathematica版本,曾经有一个附加软件包RealOnly,它将Mathematica置于仅实数模式。在更高版本和online中提供了一个版本,其兼容性升级最少。它将许多情况简化为纯粹的解决方案,但不适用于Norm案例:

enter image description here