2011-01-27 11 views
5

Ho un problema di base in Mathematica che mi ha perplesso per un po '. Voglio prendere il derivato m'di x*Exp[t*x], quindi valutare questo a x=0. Ma quanto segue non funziona correttamente. Per favore condividi i tuoi pensieri.Problema durante la sostituzione di un derivato multiplo

D[x*Exp[t*x], {x, m}] /. x -> 0 

Anche ciò che fa l'errore medio

General::ivar: 0 is not a valid variable. 

Edit: mio precedente esempio (D[Exp[t*x], {x, m}] /. x -> 0) è stato banale. Quindi l'ho reso più difficile. :) La mia domanda è: come forzarla a fare la valutazione derivativa prima, poi fare la sostituzione.

+0

Mathematica valuta la derivata senza la sostituzione? – Cascabel

+0

Sembra che Mathematica non sappia come fare quella derivata, quindi non si può forzare la valutazione derivativa –

+0

@ Yaroslav: è vero? Conosco una soluzione a forma chiusa di D [Exp [x^2], {x, m}] /. X-> 0. Anche la mamma non sarebbe in grado di farlo? Se è così, qual è il modo per favore? –

risposta

4

Come sottolineato da altri, (in generale) Mathematica non sa come prendere la derivata un numero arbitrario di volte, anche se si specifica che il numero è un numero intero positivo. Ciò significa che il comando D[expr,{x,m}] rimane non valutato e quindi quando si imposta x->0, ora sta tentando di prendere la derivata rispetto a una costante, che restituisce il messaggio di errore.

In generale, ciò che si desidera è la derivata m della funzione valutata a zero. Questo può essere scritto come

Derivative[m][Function[x,x Exp[t x]]][0] 

o

Derivative[m][# Exp[t #]&][0] 

È quindi ottenere la tabella dei coefficienti

In[2]:= Table[%, {m, 1, 10}] 
Out[2]= {1, 2 t, 3 t^2, 4 t^3, 5 t^4, 6 t^5, 7 t^6, 8 t^7, 9 t^8, 10 t^9} 

ma un po 'più spettacoli di pensiero che si vuole veramente solo il m'th termine della serie, quindi SeriesCoefficient fa quello che vuoi:

In[3]:= SeriesCoefficient[x*Exp[t*x], {x, 0, m}] 
Out[3]= Piecewise[{{t^(-1 + m)/(-1 + m)!, m >= 1}}, 0] 

L'output finale è la forma generale della derivata m'th. Lo PieceWise non è realmente necessario, poiché l'espressione vale per tutti gli interi non negativi.

1

Suppongo che si desideri la derivata parziale di tale funzione w.r.t. X. La variabile t suggerisce che potrebbe essere una seconda variabile indipendente.

E 'abbastanza facile da fare senza Mathematica: D [Exp [t * x], {x, m}] = t^m Exp [t * x]

E se si valuta il limite quando x tende zero, ottieni t^m, poiché lim (Exp [t * x]) = 1. Giusto?


Aggiornamento: Proviamo per x * exp (t * x)

il mese parziale w.r.t. derivato x è facilmente avuto da Wolfram Alpha:

t^(m-1) * exp (t * x) (t * x + m)

Quindi, se x = 0 si ottiene m * t^(m- 1).

Q.E.D.

+0

@duffymo: vedere questo nuovo esempio. –

+0

Penso che la mia risposta sia ancora valida. Non so come chiedere a Mathematica di farlo, ma so che la matematica è implicata. La mia risposta è valida. – duffymo

+0

@duffymo: come sta la tua risposta nell'esempio aggiornato? –

1

Grazie al tuo aggiornamento, è chiaro cosa sta succedendo qui. Mathematica in realtà non calcola la derivata; È quindi sostituire x con 0, e si finisce per guardare a questo:

D[Exp[t*0],{0,m}] 

che ovviamente sta per incorrere in problemi, dato che 0 non è una variabile.

+0

quindi come forzarlo a fare prima la valutazione derivativa, poi la sostituzione? –

0

Vediamo cosa sta accadendo con un po 'più in dettaglio:

Quando si scrive:

D[Sin[x], {x, 1}] 

si ottiene un espressione con x in esso

Cos[x] 

Questo perché x nella {x, 1} parte corrisponde allo x nella parte Sin [x] e quindi Mma comprende che si desidera creare la derivata per quel simbolo.
Ma questo x, non agisce come una variabileblocco per questa affermazione, isolando il suo significato da qualsiasi altra x avete nel vostro programma, in modo che abilita la regola della catena. Ad esempio:

In[85]:= z=x^2; 
D[Sin[z],{x,1}] 
Out[86]= 2 x Cos[x^2] 

Vedere? È perfetto! Ma c'è un prezzo.

Il prezzo è che i simboli all'interno della derivata vengono valutati quando viene presa la derivata e ciò sta rovinando il codice.

Naturalmente ci sono un sacco di trucchi per aggirare questo. Alcuni sono già stati menzionati. Dal mio punto di vista, un modo chiaro per undertand ciò che sta accadendo è:

f[x_] := x*Exp[t*x]; 
g[y_, m_] := D[f[x], {x, m}] /. x -> y; 
{g[p, 2], g[0, 1]} 

Out:

{2 E^(p t) t + E^(p t) p t^2, 1} 

HTH!

Problemi correlati