#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
, данное мистером Уизардом.