Esperti;Come dire a Mathematica di sostituire 0 per alimentare 0 per 1?
Dato
f = (#1^#2) &
C'è un modo per definire 'f' sopra tale che se # 1 e # 2 sono entrambi pari a zero, allora il valore della funzione pura 'f' dovrebbe essere 1?
in modo che quando scrivo
f[0,0]
tornerà 1 e non indeterminato?
btw, so che posso scrivere
f = (If[#1 == 0 && #2 == 0, 1, #1^#2]) &
Ma volevo una regola generale o modello, quindi non c'è bisogno di scrivere queste verifiche, in quanto la funzione di pura può essere più complicato (molti # in esso) e non voglio eseguire molti di questi controlli "se non altro" per ogni possibile 0^0 che potrebbe apparire.
grazie
Aggiornamento:
Può essere Vorrei chiarire di più perché sto facendo questo.
Ho un utente seleziona una funzione da un menu. La funzione è
a x^n0 + b y^n1 + c x^n2 y^n3
Dove in quanto sopra, i parametri 'n0', 'n1', 'n2' e 'n3' può anche essere scelti tra cursori, e questi possono essere zero.
Ora, 'x' e 'y' sono coordinate, e anche queste possono essere zero.
Pertanto, è possibile che si verifichi 0^0 durante la valutazione della funzione precedente.
Ci sono molti casi da controllare, quando lo faccio da solo. Ad esempio 'y^n3' può essere 0^0 e non l'altro, y^n1 può essere 0^0 e non l'altro, x^n2 y^n3 può essere sia 0^0 che non gli altri, ecc. e quindi devo definire molti casi diversi. (16 possibili casi penso).
E sto cercando di evitarlo. Se posso dire a Mathematica di sostituire 0^0 per 1 a un livello inferiore, la vita sarà più semplice.
Aggiornamento 12/7/11 Grazie per le risposte e i commenti di tutti, sono tutti molto utili e risolvono il mio problema e ho imparato da loro.
Ho selezionato la risposta di Leonid in quanto mi ha consentito di risolvere il problema con una quantità minima di codice aggiuntivo.
Ecco un piccolo esempio
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 &
)
]
Io uso i numeri reali in tutto il mondo nel mio codice (si tratta di un PDE risolutore numerico), così che è il motivo per cui ho usato 0.0 in quanto sopra e non 0^0 per adattarsi con quello che sto facendo.
Sei sicuro di voler eseguire l'eval a 1 e non 0? La notazione fa sembrare che stiate valutando polinomi dove gli esponenti sono inte gretti o forse reali. Considerazioni sulla continuità indicano che un valore di 0 potrebbe essere preferibile in tale scenario. –
@DanielLichtblau, Ok, grazie, cercherò 0^0 essere sostituito da 0 invece di 1. Ma in entrambi i casi, se uso IF THEN ELSE (o il suo equivalente funzionale definendo molte firme diverse per ogni possibile caso), ci sono ancora 16 casi diversi. Speravo che ci fosse un modo per cortocircuitarlo, ma dire a Mathematica di sostituire 0^0 con X dove X è la scelta giusta (0 o 1 come potrebbe essere). – Nasser
Vedere anche questa discussione in mathgroup: http://mathforum.org/kb/message.jspa?messageID=6577581&tstart=0 e questa domanda sui programmatori SE: http://programmers.stackexchange.com/questions/9788/how- does-language-x-handle-indeterminate-forms-like-00 –