Expertos;¿Cómo decirle a Mathematica que reemplace 0 por potencia 0 por 1?
Dado
f = (#1^#2) &
¿Hay una manera de definir 'f' por encima de tal manera que si # 1 y # 2 son ambos cero, entonces el valor de la función pura 'f' debe ser de 1?
de manera que cuando escribo
f[0,0]
devolverá 1 y no indeterminado?
por cierto, sé que puedo escribir
f = (If[#1 == 0 && #2 == 0, 1, #1^#2]) &
pero quería una regla general o patrón, así que no tiene que escribir estos controles, ya que la función pura puede ser más complicado (muchos # en ella) y no quiero hacer muchas de estas comprobaciones 'si entonces no' para cada posible 0^0 que pueda aparecer.
gracias
Actualización:
Puede ser Debo aclarar más por qué estoy haciendo esto.
Tengo un usuario que selecciona una función de un menú. La función es
a x^n0 + b y^n1 + c x^n2 y^n3
Cuando en lo anterior, los parámetros 'n0', 'n1', 'n2' y 'n3' también se pueden seleccionar a partir de controles deslizantes, y estos pueden ser cero.
Ahora, 'x' y 'y' son coordenadas, y estas también pueden ser cero.
Por lo tanto, es posible que 0^0 pueda encontrarse al evaluar la función anterior.
Hay muchos casos para verificar, al hacerlo yo mismo. Por ejemplo 'y^n3' puede ser 0^0 y no el otro, y^n1 puede ser 0^0 y no el otro, x^n2 y^n3 pueden ser tanto 0^0 como no los demás, etc. , y entonces tengo que definir muchos casos diferentes. (16 posibles casos, creo).
Y estoy tratando de evitar esto. Si puedo decirle a Mathematica que reemplace 0^0 por 1 en un nivel inferior, entonces la vida será más simple.
Actualización 12/7/11 Gracias por las respuestas y los comentarios de todos, todos son muy útiles y resuelven mi problema y he aprendido de ellos.
He seleccionado la respuesta de Leonid, ya que me permitió resolver mi problema con la menor cantidad de codificación adicional.
He aquí un pequeño ejemplo
Manipulate[Row[{format[x, n], "=", eval[x, n]}],
{{x, 0.0, "x="}, 0, 1, .1, Appearance -> "Labeled"},
{{n, 0.0, "n="}, 0, 1, .1, Appearance -> "Labeled"},
Initialization :>
(
format[x_, n_] := HoldForm["(" x ")"^n];
eval = Unevaluated[#1^#2] /. HoldPattern[0.0^0.0] :> 0.0 &
)
]
utilizo números reales en todas partes de mi código (que es un solucionador de PDE numérica), así que por eso utilicé 0.0 en lo anterior y no 0^0 para encajar con lo que estoy haciendo
¿Estás seguro de que quieres evaluar esto para 1 y no para 0? La notación hace que parezca que estás evaluando polinomios donde los exponentes son enteros no negativos o quizás reales. Las consideraciones de continuidad indicarían que un valor de 0 podría ser preferible en ese escenario. –
@DanielLichtblau, Ok, gracias, consideraré 0^0 reemplazado por 0 en lugar de 1. Pero en cualquier caso, si utilizo IF THEN ELSE (o su equivalente funcional definiendo muchas firmas diferentes para cada posible caso), hay todavía 16 casos diferentes. Estaba esperando que haya una forma de cortocircuitar esto, pero decirle a Mathematica que reemplace 0^0 por X, donde X es la elección correcta (0 o 1 como podría ser). – Nasser
Consulte también este debate de mathgroup: http://mathforum.org/kb/message.jspa?messageID=6577581&tstart=0 y esta pregunta sobre los programadores SE: http://programmers.stackexchange.com/questions/9788/how- does-language-x-handle-indeterminate-forms-like-00 –