如何强制Mathematica在Simplify和FullSimplify中包含用户定义的函数?

时间:2011-05-07 00:39:05

标签: wolfram-mathematica simplify

假设我有一个关系r ^ 2 = x ^ 2 + y ^ 2。现在假设在计算之后得到x和y的复杂输出,但理论上可以通过使用上述关系简化很多。我如何告诉Mathematica这样做?

我指的是替换规则x ^ 2 + y ^ 2 - >的情况。 r ^ 2并使用Simplify / FullSimplify with Assumptions将不起作用,例如如果输出为x / y + y / x =(x ^ 2 + y ^ 2)/(xy)= r ^ 2 /(xy)。

简化适用于内置函数,但不适用于用户定义的函数!所以基本上我希望我的函数像内置函数一样对待!

2 个答案:

答案 0 :(得分:7)

我相信您正在寻找TransformationFunctions

f = # /. x^2 + y^2 -> r^2 &;

Simplify[x/y + y/x, TransformationFunctions -> {Automatic, f}]

(* Out=  r^2/(x y)  *)

答案 1 :(得分:2)

在你给出的例子中

(x/y + y/x // Together) /. {x^2 + y^2 -> r^2}

==> r^2/(x y)

的工作原理。但我了解到,在很多情况下,这样的替代品不起作用。我曾经得到的一个提示是用一个更简单的LHS替换这个替换,例如:x^2 -> r^2-y^2(如果你知道x和y的值允许这样的话,甚至x->Sqrt[r^2-y^2]。)