2012-09-21 12 views
6

Jak zdefiniować funkcję ogólną bez dokładnego wyrażenia w Mathematica? Na przykład, nie muszę tego:Jak zdefiniować ogólną funkcję w matematyce?

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

muszę pracować z ogólnym parametru a (x, y) zamiast:

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

Oczywiście, ta linia nie działa zbyt dobrze.

Edit1:

Dobrze, używam parametr w innej nieznanej funkcji (nie wiadomo, ponieważ jest zdefiniowana tylko w pakiecie), który działa w zasadzie jak pochodna, to znaczy, że jest to bardzo skomplikowana mieszanka pierwszego i drugiego pochodne.

Linia ta

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

faktycznie działa (niby), ponieważ parametr „przeżyje” pakiet w funkcji, z wyjątkiem wyjścia otrzymuję przykry „Hold[a[x,y]]” zamiast po prostu a[x,y], a ja nie może już używać wyniku jako funkcji.

+1

Jaki byłby twój następny krok? Co byś zrobił z takim ogólnym parametrem a (x, y)? –

Odpowiedz

6

Sposób definiowania funkcji bez określania wyrażenia to , a nie zdefiniować. Po prostu go używaj.

Przykład:

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

Jak widać, nie definiują fg lub Mathematica, a jednak nie ma problemów obliczanie z nimi.

Należy pamiętać, że można również definiować za pomocą tych funkcji. Na przykład:

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

Można na nich nawet zdefiniować operacje arytmetyczne. Na przykład, można zdefiniować funkcję exp symbolicznie obliczyć z exponentials (uwaga na małe litery, ponieważ Exp jest już wbudowany w funkcji wykładniczej), a następnie zdefiniować

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

a następnie napisać

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

Dziękuję, Celtschk, to rozwiązało problem dla mnie. – Dee