M O D E L L I     D I F F E R E N Z I A L I    (vedi qui per una versione aggiornata)

(1)  L'equazione   D(f)(x) = Derf(x)   viene detta equazione differenziale in quanto in essa compare il simbolo di derivata.

D(f)(x) = Derf(x)  AND  f(x0)=y0    è vera se la funzione f che ha  Derf  come derivata e ha grafico passante per (x0,y0).

In questo caso, le soluzioni dell'equazione differenziale  D(f)(x) = Derf(x)   non sono altro che

 l'integrale indefinito  ∫ Derf(x) dx.  La condizione f(x0)=y0 individua una particolare f tra tutte le funzioni che hanno  Derf  come derivata.

Più in generale possiamo studiare problemi del tipo  D(f)(x) = g(x,f(x))  AND  f(x0)=y0  in cui la derivata di f in x dipende non solo da x ma anche dal valore f(x).

Spesso la funzione incognita viene indicata  x -> y(x). Si ottiene allora la formulazione:

y'(x) = g(x,y(x)) AND y(x0)=y0, spesso abbreviata in:

y' = g(x,y) AND y(x0)=y0

Vedi gli appunti di Calculus per approfondimenti. Vediamo un esempio.

(2) Un recipiente contiene 100 litri di una soluzione contenente 5 kg di sali.
Viene fatta entrare, con la portata di 1 litro/min, un'altra soluzione con una concentrazione di sali di 10 g/litro.
Il livello e' mantenuto costante mediante un'opportuna valvola.
Supponiamo che la portata sia costante e che il liquido sia costantemente mescolato.
Quanto sale rimane nel recipiente dopo un'ora?
Consideriamo:
# Sale(t): sale in kg presente al minuto t-esimo
# Sale(t)/100: concentrazione di sale all'istante t
# Flusso di sale in entrata: 10 g/litro * 1 litro/min = 10 g/min = 0.01 kg/min
# Flusso di sale in uscita: Sale(t)/100 kg/litro * 1 litro/min = Sale(t)/100 kg/min

     Sale(0)=5;  D(Sale)(t) = 0.01 - Sale(t)/100

Questo e' il MODELLO DIFFERNZIALE del fenomeno.

In questo caso siamo di fronte a una equazione del tipo  y' = g(y), in cui non compare la x ma solo la y.

(3)  Proviamo a risolvere il modello con tecniche simboliche.

Potremmo farlo a mano
separando le variabili (vedi), ma facciamo fare i conti a Maple (comando dsolve):

Potremmo usare anche il gratuito http://www.WolframAlpha.com, introducendo:
y'-0.01+y/100 = 0, y(0)=5

>   dsolve(diff(Sale(t),t) = 0.01-Sale(t)/100,Sale(t));

Sale(t) = 1+exp(-1/100*t)*_C1

 _C1 e' il parametro al variare del quale ho le soluzioni
sostituisco t=0 e Sale(0)=5

>   subs(t=0,Sale(0)=5,dsolve(diff(Sale(t),t)= 0.01-Sale(t)/100,Sale(t)));

5 = 1 + e0 _C1

>   solve(",_C1);   [o con % al posto di "]

4

# A questo punto metto t=60 e _C1=4 e ottengo:

>   subs(_C1=4,dsolve(diff(Sale(t),t)= 0.01-Sale(t)/100,Sale(t)));
subs(t=60,_C1=4,dsolve(diff(Sale(t),t)= 0.01-Sale(t)/100,Sale(t)));
evalf(subs(t=60,_C1=4,dsolve(diff(Sale(t),t)= 0.01-Sale(t)/100,Sale(t))));

Sale(t) = 1+4*exp(-1/100*t)

Sale(60) = 1+4*exp(-3/5)

Sale(60) = 3.195246544

Volendo posso mettere direttamente le condizioni iniziali nel comando dsolve:

>   dsolve({diff(Sale(t),t) = 0.01-Sale(t)/100,Sale(0)=5},Sale(t));

Sale(t) = 1+4*exp(-1/100*t)

1+4*exp(-1/100*t)

Qui Maple ha trovato la soluzione dell'equazioni, non ha definito Sale(.) come funzione. Non posso battere Sale(60) e ottenere il risultato. Posso fare in due modi:

## sostituire 60 a t, come gia' fatto sopra:

>   evalf(subs(t=60,dsolve({diff(Sale(t),t) = 0.01-Sale(t)/100,Sale(0)=5},Sale(t))));

Sale(60) = 3.195246544

## Definire una funzione x->Sal(x) copiando col mouse la parte a destra di Sale(t):

>   Sal:=t->1+4*exp(-1/100*t);

Sal := proc (t) options operator, arrow; 1+4*exp(-1/100*t) end proc

Invece di fare questa cosa a mano, potrei estrarre con il comando op il secondo termine di Sale(t)= ...:

>   Sal:=t-> op(2, dsolve({diff(Sale(t),t) = 0.01-Sale(t)/100,Sale(0)=5},Sale(t)) );

Sal := proc (t) options operator, arrow; op(2,dsolve({Sale(0) = 5, diff(Sale(t),t) = .1e-1-1/100*Sale(t)},Sale(t))) end proc

>   Sal(t);  # ecco il valore di Sal(t):

1+4*exp(-1/100*t)

>   evalf(Sal(60));

3.195246544

---------------------------------------------------------

#Circuito RL  L*D(ic)(t)+R*ic-V(t)=0 (L induttanza in Henry, R resistenza in Hom, ic intensita' corrente in Ampere, V tensione in Volt)
# L=1, R=2, V(t)=6, i0=3, i0=2, i0=4; V(t)=6*cos(2t), i0=0, i0=2

>   L:=1: R:=2: V:= t -> 6: i0:=3: 'L*diff(ic(t),t)+R*ic(t)=V(t)';
dsolve({L*diff(ic(t),t)+R*ic(t)=V(t), ic(0)=i0}, ic(t));
plot (op(2,%),t=0..10,-1..4);
[o " al posto di %]

L*diff(ic(t),t)+R*ic(t) = V(t)

ic(t) = 3

[Maple Plot]

Per i0=3 (ossia y0=3) si e' a regime costante: la derivata in 0 risulta essere -2*3+6 = 0. Proviamo con i0=2

>   L:=1: R:=2: V:= t -> 6: i0:=2:
dsolve({L*diff(ic(t),t)+R*ic(t)=V(t), ic(0)=i0}, ic(t));
plot (op(2,%),t=0..10,-1..4);
[o " al posto di %]

ic(t) = 3-exp(-2*t)

[Maple Plot]

Asintoticamente tende a 3. Cambiamo V:

>   L:=1: R:=2: V:= t-> 6*cos(2*t): i0:=0:
dsolve( {L*diff(ic(t),t)+R*ic(t)=V(t), ic(0)=i0}, ic(t));
plot (op(2,%),t=0..20,-3..3);
[o " al posto di %]

ic(t) = 3/2*cos(2*t)+3/2*sin(2*t)-3/2*exp(-2*t)

[Maple Plot]

>   L:=1: R:=2: V:= t-> 6*cos(2*t): i0:=2.5:
dsolve( {L*diff(ic(t),t)+R*ic(t)=V(t), ic(0)=i0}, ic(t));
plot (op(2,%),t=0..20,-3..3);
[o " al posto di %]

ic(t) = 3/2*cos(2*t)+3/2*sin(2*t)+exp(-2*t)

[Maple Plot]

Indipendentemente dal valore iniziale il fenomeno tende ad essere periodico, con lo stesso periodo di V. Si puo' verificare (variando anche L) che tale curva ha uno sfasamento rispetto a quello della tensione che cresce con L.
-----------------------------------------------------
In una reazione chimica i reagenti R1 e R2 combinano due loro singole molecole formando una molecola del prodotto P. La velocita' della reazione e' proporzionale secondo un fattore K al prodotto delle concentrazioni di R1 e R2. Siano C1 e C2 le concentrazioni  iniziali (in molecole/cm^3) di, rispettivamente, R1 e R2. Vogliamo esprimere in funzione del tempo t la concentrazione C di P

>   dsolve({diff(C(t),t) = K*(C1-C(t))*(C2-C(t)),C(0)=0},C(t));

C(t) = (-C1+C2*exp(-t*K*C2+t*K*C1-ln(C1/C2)/(-C2+C1)*C2+ln(C1/C2)/(-C2+C1)*C1))/(exp(-t*K*C2+t*K*C1-ln(C1/C2)/(-C2+C1)*C2+ln(C1/C2)/(-C2+C1)*C1)-1)

>   simplify(dsolve({diff(C(t),t) = K*(C1-C(t))*(C2-C(t)),C(0)=0},C(t)));

C(t) = C1*(-1+exp(t*K*(-C2+C1)))*C2/(C1*exp(t*K*(-C2+C1))-C2)

>   # Provare a risolverla nel caso in cui C1=..., C2= ... e a tracciarne i grafici

-------------------------------------------------------------

Esercizio. Risolvere con Maple le equazioni differenziali del primo ordine considerate nelle dispense di Calculus e confronatare le soluzioni ottenute con le soluzioni e i grafici presentati nelle dispense.
-------------------------------------------------------------

(4)  Il tracciamento del campo direzionale consente di individuare facilmente i casi critici in cui non esiste un'unica soluzione, oltre che avere un'idea di come, al variare delle condizioni inziali, varia la forma delle soluzioni.
La seguente PROCEDURA (sottoprogramma), che useremo a scatola nera, permette di tracciare il CAMPO delle DIREZIONI delle soluzioni di una equazione differenziale del primo ordine. Prova a usarlo per riottenere quelli tracciati nelle dispense di Calculus.

>   CampoDir := proc(f,xsin,xdes,ygiu,ysu)
local Df, Nx, Ny, hx, hy, i, x, y, A, j, rap, T:
Df:=(x,y)->f(x,y): Nx:=22 : Ny:=15: hx:=(xdes-xsin)/Nx: hy:=(ysu-ygiu)/Ny: for i from 1 to Nx do x[i]:=xsin+hx*(i-.5) od : for i from 1 to Ny do y[i]:=ygiu+hy*(i-.5) od: A := array(1..Nx*Ny):for i from 1 to Nx do for j from 1 to Ny do
if abs(Df(x[i],y[j]))>abs(hy) then rap:= hy/(Df(x[i],y[j])*hx) else rap:=1 fi: rap:=rap*0.7: A[i+Nx*(j-1)] :=[[x[i]-hx/2*rap,y[j]-Df(x[i],y[j])*hx/2*rap],[x[i]+hx/2*rap,y[j]+Df(x[i],y[j])*hx/2*rap]] od  od: T:=convert(A,list): plot(T ,color=blue,scaling=constrained)
end:

Se copi e incolli le righe precedenti in un folgio di Mapple e poi definisci una funzione (con nome f o un altro) e richiami la procedure nel modo seguente, ottieni il campo direzionale.
Ecco il campo direzionale di y'(x) = 1+x/(y(x)^2+1):

>   f:=(x,y)->1+x/(y^2+1) : CampoDir(f,-8,4,-4,4);

[Maple Plot]

-----------------------------------------------------------------------

(5)  Equazione differenziale del secondo ordine. Esempio: moto con accelerazione costante = 10 (m/s^2).
Voglio usare x(t). Ho gia' usato x(). Cancello le assegnazioni gia' fatte.

>   x := 'x';

x := 'x'

>   diff(x(t),t,t)=10;

diff(x(t),`$`(t,2)) = 10

>   dsolve(diff(x(t),t,t)=10,x(t));

x(t) = 5*t^2+_C1*t+_C2

Ora ho due parametri da cui dipende la soluzione. Posso ad es. fissare la velocita' e la posizione in un dato istante, ad es. porre che all'istante 2 la velocita' sia 5 e la posizione sia 3. Posso trovare c1 e c2 sostituendo e risolvendo il sistema ottenuto. Oppure direttamente con Maple:

>   dsolve({diff(x(t),t,t)=10, x(2)=3, D(x)(2)=5},x(t));

x(t) = 5*t^2-15*t+13

x=tempo, y= posizione di oggetto di massa M sottoposto a una forza di -K*y (ad es. esercitata da una molla) con K/M =4 e a una una
da F=-k*y(t),  F=m*y"(t) ho:

>   y:='y': diff(y(x),x,x) = - k/m*y(x);

diff(y(x),`$`(x,2)) = -4*y(x)

>   k:=4: m:=1: dsolve(diff(y(x),x,x) = - k/m*y(x),y(x));

y(x) = _C1*sin(2*x)+_C2*cos(2*x)

Inseirisco una posizione inziale e una velocita' iniziale

>   dsolve({ diff(y(x),x,x) = - k/m*y(x), y(0)=2, D(y)(0)=0}, y(x));
plot (op(2,%),x=0..10,-2..2);
[o " al posto di %]

y(x) = 2*cos(2*x)

[Maple Plot]

y" = -(k/m)*y + F/m*cos(omega*t) (oscillazioni forzate, con forza oscillante esterna, del tipo F*cos(omega*t)
F=2, omega=0.5

>   dsolve({ diff(y(x),x,x) = - k/m*y(x) + 2*cos(0.5*x), y(0)=2, D(y)(0)=0}, y(x));
plot (op(2,%),x=0..40,-2..2);
[o " al posto di %]

y(x) = 22/15*cos(2*x)+8/15*cos(1/2*x)

[Maple Plot]

F=1, omega=2           -           risonanza

>   dsolve({ diff(y(x),x,x) = - k/m*y(x) + cos(2*x), y(0)=2, D(y)(0)=0}, y(x));
plot (op(2,%),x=0..40);
[o " al posto di %]

y(x) = 2*cos(2*x)+1/4*sin(2*x)*x

[Maple Plot]

y" = -(k/m)*y - k1*y' (oscillazioni smorzate, con forza attrito proporzionale a velocita'
con k1:=1

>   dsolve({ diff(y(x),x,x) = - k/m*y(x) - diff(y(x),x), y(0)=2, D(y)(0)=0}, y(x));
plot (op(2,%),x=0..10);
[o " al posto di %]

y(x) = 2/15*15^(1/2)*exp(-1/2*x)*sin(1/2*15^(1/2)*x)+2*exp(-1/2*x)*cos(1/2*15^(1/2)*x)

[Maple Plot]

con k1:=10 (non ci sono neanche oscillazioni):

>   dsolve({ diff(y(x),x,x) = - k/m*y(x) - 10*diff(y(x),x), y(0)=2, D(y)(0)=0}, y(x));
plot (op(2,%),x=0..10);
[o " al posto di %]

y(x) = (5/21*21^(1/2)+1)*exp((-5+21^(1/2))*x)+(-5/21*21^(1/2)+1)*exp(-(5+21^(1/2))*x)

[Maple Plot]

Traccio anche la curva  (y(x),y'(x)) che rappresenta la relazione tra y e la sua velocita' (diagramma di fase). In questo caso ottengo una ellisse. Il fatto che sia una curva chiusa e' legato al fatto che la soluzione è periodica.

>   diff(y(x),x,x) = - k/m*y(x);
dsolve({ %, y(0)=2, D(y)(0)=0}, y(x));
yx := op(2,%):
plot (yx,x=0..10,-2..2); plot ([yx,diff(yx,x),x=0..10]);
[o " al posto di %]

diff(y(x),`$`(x,2)) = -4*y(x)

y(x) = 2*cos(2*x)

[Maple Plot]

[Maple Plot]

Nel caso dello smorzamento:

>   diff(y(x),x,x) =  - k/m*y(x) - diff(y(x),x);
dsolve({ %, y(0)=2, D(y)(0)=0}, y(x));
yx := op(2,%):
plot (yx,x=0..20,-2..2); plot ([yx,diff(yx,x),x=0..20]);
[o " al posto di %]

diff(y(x),`$`(x,2)) = -4*y(x)-diff(y(x),x)

y(x) = 2/15*15^(1/2)*exp(-1/2*x)*sin(1/2*15^(1/2)*x)+2*exp(-1/2*x)*cos(1/2*15^(1/2)*x)

[Maple Plot]

[Maple Plot]

Nel caso della risonanza:

>   diff(y(x),x,x) = - k/m*y(x) + cos(2*x);
dsolve({ %, y(0)=2, D(y)(0)=0}, y(x));
yx := op(2,%):
plot (yx,x=0..20); plot ([yx,diff(yx,x),x=0..20]);
[o " al posto di %]

diff(y(x),`$`(x,2)) = -4*y(x)+cos(2*x)

y(x) = 2*cos(2*x)+1/4*sin(2*x)*x

[Maple Plot]

[Maple Plot]

----------------------------------------------

(6)  EQUAZIONI A DERIVATE PARZIALI

Le equazione differenziali a derivate parziali (ossia che coinvolgono le derivate parziali della funzione incognita rispetto a piu' di una variabile), a differenza di quelle ordinarie, hanno soluzioni che non dipendono da costanti arbitrarie ma da funzioni arbitrarie.

Vediamo un primo es. di eq. a derivate parziali (l'incognita e' f):

[facciamo un restart per annullare precedenti assegnazioni]

>   restart: D[2](f(x,y))=x;

D[2](f(x,y)) = x

che puo' essere scritta anche:

>   diff(f(x,y),y)=x;

diff(f(x,y),y) = x

Siamo in grado di risoverla direttamente: la derivata rispetto a y di z e' x se z e' del tipo x*y; ma si puo' addizionare un qualunque termine che non contenga y, in quanto la sua derivata rispetto a y e' zero. Quindi le soluzioni sono del tipo:  x*y+g(x) con g(x) funzione arbitraria.
Verifichiamo la cosa con Maple; il comando e', a seconda delle versioni di Maple, pdesolve o pdsolve (ParzialDiffentialEquation):

>   pdsolve(diff(f(x,y),y)=x,f(x,y));

f(x,y) = x*y+_F1(x)

 OK.  Altro es.

>   diff(f(x,y),y,y)=x;

diff(f(x,y),`$`(y,2)) = x

x*y^2/2 e' evidentemente una soluzione. Ma lo rimane se si aggiunge qualcosa che derivato due volte rispetto a y da' 0:
 x*y^2 + g(x) + h(x)*y.   Verifichiamolo con Maple:

>   pdsolve(diff(f(x,y),y,y)=x,f(x,y));

f(x,y) = 1/2*x*y^2+_F1(x)*y+_F2(x)

OK.

Risolvi ("ragionando", e poi con Maple):

>   diff(f(x,y),x,y)=0;pdsolve(diff(f(x,y),x,y)=0,f(x,y));

diff(f(x,y),x,y) = 0

f(x,y) = _F2(x)+_F1(y)

Ci soffermeremo su solo alcune eq. differenziali a derivate parziali del secondo ordine che si impiegano spesso per modellizzare fenomeni di tipo fisico e tecnologico.

>   diff(f(x,y),x,x)+diff(f(x,y),y,y)=0;

diff(f(x,y),`$`(x,2))+diff(f(x,y),`$`(y,2)) = 0

E' la cosiddetta EQUAZIONE DI LAPLACE (o DEL POTENZIALE) in 2 dimensioni. Una funzione (continua con le sue derivate prime e seconde) che la soddisfa viene chiamata "armonica" (la cosa è legata a collegamenti con le serie di Fourier che non esploriamo). Proviamo a trovarne qualcuna: un'idea puo' essere quella di far entrare la funzione esponenziale (che ha se' stessa come derivata) e le funzioni seno e coseno (che hanno il proprio opposto come derivata seconda). In particolare proviamo con  (x,y) -> e^(kx)*cos(ky):

>   g:=(x,y) -> exp(k*x)*cos(k*y);

g := proc (x, y) options operator, arrow; exp(k*x)*cos(k*y) end proc

>   diff(g(x,y),x,x)+diff(g(x,y),y,y);

0

OK. Proviamo anche con:

>   g:=(x,y) -> exp(k*x)*sin(k*y);

g := proc (x, y) options operator, arrow; exp(k*x)*sin(k*y) end proc

>   diff(g(x,y),x,x)+diff(g(x,y),y,y);

0

OK.

ESERCIZIO. Verificare con Maple che sono armoniche nelle regioni piane indicate:

>   g:=(x,y) -> 3*x^2*y-y^3; #nel piano

g := proc (x, y) options operator, arrow; 3*x^2*y-y^3 end proc

>   g:=(x,y) -> h*(x^2-y^2)+k*x*y; #nel piano

g := proc (x, y) options operator, arrow; h*(x^2-y^2)+k*x*y end proc

>   g:=(x,y) -> x/(x^2+y^2); # in (x,y)<>(0,0)

g := proc (x, y) options operator, arrow; x/(x^2+y^2) end proc

>   g:=(x,y) -> log(x^2+y^2); # in (x,y)<>(0,0)

g := proc (x, y) options operator, arrow; log(x^2+y^2) end proc

Risolviamo con Maple:

>   pdsolve(diff(f(x,y),x,x)+diff(f(x,y),y,y)=0,f(x,y));

f(x,y) = _F1(y+x*I)+_F2(y-I*x)

Facciamo delle prove (in modo che sparisca l'unità immaginaria) per vedere alcune soluzioni:

>   a:=x->x^2: b:=x->x^2: g:=(x,y)->a(y+I*x)+b(y-I*x); g(x,y)=simplify(g(x,y));

g := proc (x, y) options operator, arrow; a(y+x*I)+b(y-I*x) end proc

(y+x*I)^2+(y-I*x)^2 = 2*y^2-2*x^2

>   a:=x->x^2+I*x: b:=x->x^2-I*x: g:=(x,y)->a(y+I*x)+b(y-I*x); g(x,y)=simplify(g(x,y));

g := proc (x, y) options operator, arrow; a(y+x*I)+b(y-I*x) end proc

(y+x*I)^2+(y+x*I)*I+(y-I*x)^2-I*(y-I*x) = 2*y^2-2*x^2-2*x

>   a:=x->exp(x): b:=x->exp(x): g:=(x,y)->a(y+I*x)+b(y-I*x); g(x,y)=simplify(g(x,y));

g := proc (x, y) options operator, arrow; a(y+x*I)+b(y-I*x) end proc

exp(y+x*I)+exp(y-I*x) = 2*exp(y)*cos(x)

La semplificazione è stata ottenuta usando la formula di Eulero che lega l'esponenziale e le funzioni circolari nel campo complesso:

exp(x) = 1+x+x^2/2+x^3/6+x^4/24+x^5/120 +...   sostituendo I*x  a  x:  
exp(x*I) = 1+I*x-x^2/2-I/6*x^3+x^4/24+I/120*x^5 + ...= (1-x^2/2+x^4/24 + ...) + I(x-x^3/6 + ...) = cos(x) + I sin(x)          

Infatti da questa relazione ho:
exp(y+x*I) = exp(y)*exp(xI) = exp(y)*(cos(x)+I sin(x))
exp(y-x*I) = exp(y)*exp(-xI) = exp(y)*(cos(x)+I sin(-x)) = exp(y)*(cos(x) - I sin(x))
da cui, sommando:  
exp(y+x*I)+exp(y-I*x) = 2*exp(y)*cos(x) 

Le armoniche hanno la caratteristica di assumere valori massimo e minimo solo sul contorno del loro dominio; inoltre se si annullano sul contorno del dominio allora si annullano in tutto il dominio.
La seguente equazione e' detta EQUAZIONE DELLE ONDE (in una dimensione).

>   diff(f(x,t),t,t)=k^2*diff(f(x,t),x,x);

diff(f(x,t),`$`(t,2)) = k^2*diff(f(x,t),`$`(x,2))

>   pdsolve(diff(f(x,t),t,t)=k^2*diff(f(x,t),x,x),f(x,t));

f(x,t) = _F1(k*t+x)+_F2(k*t-x)

E' facile verificare direttamente che questa (al variare di _F1 e _F2) e' una soluzione.
Se la variabile t indica il tempo, _F2(t*k-x) rappresenta una forma d'onda che si propaga lungo l'asse x con velocita' k; _F1(t*k+x) ne rappresenta una che si sposta verso sinistra.

Quella che segue e' l'EQUAZIONE DEL CALORE (in 1 dimensione). Se f(x,t) e' la temperatura nella posizione x di un'asta all'istante t, l'eq. rappresenta la diffusione del calore in un'asta isolata.

Idea:
un piccolo oggetto posto in un'ambiente a temperatura costante T ha temperatura f(t) che varia con velocita' proporzionale alla differenza di temperatura dall'ambiente:
d f(t) / dt = k(T-f(t)). La soluzione e' una esponenziale negativa.
Nel caso della nostra asta solo un estremo e' a contatto con la sorgente di calore.

>   diff(f(x,t),t)=diff(f(x,t),x,x);

>   pdsolve(diff(f(x,t),t)=diff(f(x,t),x,x),f(x,t));

`&where`(f(x,t) = _F1(x)*_F2(t),[{diff(_F2(t),t) = _c[1]*_F2(t), diff(_F1(x),`$`(x,2)) = _c[1]*_F1(x)}])

>   g:=(x,t)->t^(-1/2)*exp(-x^2/(4*t)); # verifichiamo che e' una soluzione

g := proc (x, t) options operator, arrow; 1/t^(1/2)*exp(-1/4*x^2/t) end proc

>   diff(g(x,t),t);diff(g(x,t),x,x);

-1/2*1/t^(3/2)*exp(-1/4*x^2/t)+1/4*1/t^(5/2)*x^2*exp(-1/4*x^2/t)

-1/2*1/t^(3/2)*exp(-1/4*x^2/t)+1/4*1/t^(5/2)*x^2*exp(-1/4*x^2/t)

Eq. del calore in 2 dimensioni (diffusione del calore nel piano):

>   diff(f(x,y,t),t)=diff(f(x,y,t),x,x)+diff(f(x,y,t),y,y);

diff(f(x,y,t),t) = diff(f(x,y,t),`$`(x,2))+diff(f(x,y,t),`$`(y,2))

>   g:=(x,y,t)->t^(-1)*exp(-(x^2+y^2)/(4*t)); # verifica che e' una soluzione

g := proc (x, y, t) options operator, arrow; 1/t*exp(-1/4*(x^2+y^2)/t) end proc