Как заставить Mathematica включать пользовательские функции в Simplify и FullSimplify? - PullRequest
6 голосов
/ 07 мая 2011

Допустим, у меня есть отношение 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 ]

7 голосов
/ 07 мая 2011

Я полагаю, вы ищете TransformationFunctions .

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

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

(* Out=  r^2/(x y)  *)
2 голосов
/ 07 мая 2011

В приведенном вами примере

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

...