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

#wolfram-mathematica #simplify

#wolfram-mathematica #упростить

Вопрос:

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

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

Комментарии:

1. Добро пожаловать в StackOverflow. Пожалуйста, ознакомьтесь с этим FAQ , если у вас есть вопросы о сайте.

Ответ №1:

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

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

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

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

Комментарии:

1. @Super, предостережение по поводу TransformationFunctions , позволяющих вам исправлять правила замены, которые нарушают математические правила. Итак, внимательно рассмотрите преобразование, прежде чем использовать его.

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

Комментарии:

1. Я думаю, что в окне Mma должно быть большое красное предупреждение главного хирурга: «Не ожидайте, что это программное обеспечение будет писать формулы, как вы». Можно было бы избежать многих разочарований.

2. @Sjeord, это работает именно потому, что Together делает числитель x^2 y^2 без каких-либо других присутствующих терминов. Если они присутствуют в других терминах, вероятность того, что это сработает, значительно снижается. Честно говоря, я не знаю, будет ли в этом случае работать TransformationFunction , данное мистером Уизардом.