2012-09-21 18 views
6

Come posso definire una funzione generale senza l'espressione esatta in Mathematica? Ad esempio, non ho bisogno di questo:Come definire una funzione generale in mathematica?

a[x_, y_]:= 2x + 3y, 

devo lavorare con un parametro generale a (x, y) invece:

a[x_, y_]:= a[x, y]. 

Naturalmente, questa linea non funziona troppo bene.

Edit1:

Beh, io sto usando il parametro in un'altra funzione sconosciuta (sconosciuto perché è definito solo nel pacchetto), che funziona sostanzialmente come un derivato, vale a dire si tratta di un molto complicato mix di prima e seconda derivati.

Questa linea

a[x_, y_]:= a[x, y], 

effettivamente funziona (tipo di), perché il parametro 'sopravvive' il pacchetto come una funzione, se non in uscita ottengo il fastidioso "Hold[a[x,y]]" invece di a[x,y], e io non può più usare il risultato come una funzione.

+1

Quale sarebbe il tuo prossimo passo? Cosa faresti con un parametro generale a (x, y)? –

risposta

6

Il modo per "definire" una funzione senza specificare un'espressione è non definirlo. Basta usarlo.

Esempio:

D[f[x] g[x],x] 
(* 
==> g[x] f'[x] + f[x] g'[x] 
*) 

Come potete vedere, non mi definisco f o g, eppure Mathematica non ha problemi di calcolo con loro.

Si noti che è anche possibile creare definizioni utilizzando tali funzioni. Ad esempio:

modify[a[x_,y_]]:=a[y,x+y] 
modify[a[2,3]] 
(* 
==> a[3, 5] 
*) 

È anche possibile definire operazioni aritmetiche su di essi. Ad esempio, è possibile definire una funzione exp per calcolare simbolicamente con esponenziali (notare il minuscolo, perché Exp è già incorporata in funzione esponenziale), e quindi definire

exp/: exp[a_] exp[b_] := exp[a+b] 
exp/: exp[a_]^n_Integer := exp[n a] 

e poi scrivere

expression = 3 exp[x] exp[y+z]^3 
(* 
==> 3 exp[x + 3 (y + z)] 
*) 
+0

Grazie, celtschk, questo ha risolto il problema per me. – Dee

Problemi correlati