Как заставить Mathematica включать пользовательские функции в Simplify и FullSimplify?

предположим, у меня есть отношение r^2 = x^2 + y^2. Теперь предположим, что после вычисления я получаю сложный вывод x и y, но который теоретически можно было бы значительно упростить, используя приведенное выше соотношение. Как мне сказать Mathematica сделать это?

Я имею в виду ситуации, когда правила замены x^2+y^2 -> r^2 и использование Simplify/FullSimplify с предположениями не будут работать, например, если выход x/y + y/x = (x^2+y^2)/(xy) = r^2/(xy).

упрощение работает очень хорошо со встроенными функциями, но не с пользовательскими функциями! Поэтому, по сути, я хотел бы, чтобы мои функции рассматривались как встроенные функции!

2 ответов


Я считаю, что вы ищете TransformationFunctions.

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

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

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

в Примере, который вы даете

(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 позволяют это).