2011-05-07 16 views
6

Digamos que tengo una relación r^2 = x^2 + y^2. Ahora supongamos que después de un cálculo obtengo una salida complicada de xey, pero que en teoría podría simplificarse mucho utilizando la relación anterior. ¿Cómo le digo a Mathematica que haga eso?¿Cómo obligo a Mathematica a incluir funciones definidas por el usuario en Simplify y FullSimplify?

Me refiero a las situaciones donde las reglas de reemplazo x^2 + y^2 -> r^2 y el uso de Simplify/FullSimplify with Assumptions no funcionarán, p. si la salida es x/y + y/x = (x^2 + y^2)/(xy) = r^2/(xy).

La simplificación funciona muy bien con funciones incorporadas pero no con funciones definidas por el usuario. ¡Entonces, esencialmente, me gustaría que mis funciones sean tratadas como las funciones integradas!

+0

Bienvenido a StackOverflow. Consulte [estas preguntas frecuentes] (http://meta.stackexchange.com/questions/7931/faq-for-stack-exchange-sites) si tiene preguntas sobre el sitio. –

Respuesta

7

Creo que está buscando TransformationFunctions.

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

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

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

@Super, una palabra de advertencia sobre 'TransformationFunctions', le permite corregir las reglas de reemplazo que violan las reglas matemáticas. Por lo tanto, considere la transformación cuidadosamente antes de usarla. – rcollyer

+0

@rcollyer O imponer suposiciones triviales que deshabilitan toda una familia de soluciones (el denominador NEQ 0 es el ejemplo clásico) –

2

En el ejemplo que dan

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

==> r^2/(x y) 

obras. Pero aprendí que en muchas ocasiones los reemplazos como este no funcionan. Una sugerencia que obtuve una vez fue reemplazar este reemplazo por uno que tenga un LHS más simple como: x^2 -> r^2-y^2 (o incluso x->Sqrt[r^2-y^2] si sabe que los valores de xey lo permiten).

+0

Creo que el cuadro Mma debe venir con una advertencia del gran cirujano rojo: "No espere que este software escriba fórmulas como tú lo haces". Mucha frustración podría evitarse. –

+0

@Sjeord, que funciona precisamente porque 'Together' hace que el numerador' x^2 + y^2' sin ningún otro término presente. Si hay otros términos presentes, la probabilidad de que funcione disminuya un poco. A decir verdad, no sé si la 'TransformationFunction' dada por el Sr. Wizard funcionaría en ese caso. – rcollyer

Cuestiones relacionadas