【问题标题】:How do I force Mathematica to include user defined functions in Simplify and FullSimplify?如何强制 Mathematica 在 Simplify 和 FullSimplify 中包含用户定义的函数?
【发布时间】:2011-05-07 00:39:05
【问题描述】:

假设我有一个关系 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)。

简化对内置函数非常有效,但不适用于用户定义函数!所以基本上我希望我的函数被视为内置函数!

【问题讨论】:

  • 欢迎来到 StackOverflow。如果您对该网站有任何疑问,请联系this FAQ

标签: wolfram-mathematica simplify


【解决方案1】:

我相信你正在寻找TransformationFunctions

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

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

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

【讨论】:

  • @Super,请注意TransformationFunctions,使您能够纠正违反数学规则的替换规则。因此,在使用之前请仔细考虑转换。
  • @rcollyer 或者强加一些琐碎的假设来禁用整个解决方案系列(分母 NEQ 0 是经典示例)
【解决方案2】:

在你给出的例子中

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

==> r^2/(x y)

有效。但我了解到,在很多情况下,像这样的替换是行不通的。我曾经得到的一个提示是将这个替换替换为具有更简单 LHS 的替换,例如:x^2 -> r^2-y^2(或者甚至 x->Sqrt[r^2-y^2],如果您知道 x 和 y 的值允许这样做)。

【讨论】:

  • 我认为 Mma 盒子应该带有一个大红色外科医生的警告:“不要指望这个软件像你一样写公式”。很多挫折是可以避免的。
  • @Sjeord,这正是因为Together 使分子x^2 + y^2 不存在任何其他术语。如果它们是其他术语,那么它工作的可能性就会下降很多。说实话,我不知道巫师先生给的TransformationFunction在这种情况下是否有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多