Equazioni differenziali test

I seguenti esempi possono essere utilizzare come test per algoritmi per ODE (equazioni differenziali ordinarie).

Il codice è scritto in Matlab, ma dovrebbe essere semplicemente traducibile in altri linguaggi di programmazione.

Per ogni esempio è riportata la soluzione analitica (se disponibile), il numero di equazioni (dim=...), maggiore di uno se si tratta di un sistema, e un intervallo di prova con relativa condizione iniziale.


%	ODE, soluzione: problema dei due corpi
%	dim = 2
function zp = f( t, z)
m1 = 1;
m2 = 0;
r3 = ((z(3)-z(1))^2 + (z(4)-z(2))^2)^(3/2);
zp = [z(5:8);
	m2 * (z(3) - z(1)) / r3;
	m2 * (z(4) - z(2)) / r3;
	m1 * (z(1) - z(3)) / r3;
	m1 * (z(2) - z(4)) / r3];

%	ODE, soluzione: y=atan(exp(x)), y(0)=atan(1), x in [0,10]
%	dim = 1
function yp = f( x, y)
yp = exp(x) .* cos(y) .* cos(y);

%	ODE, soluzione: y=exp(x), y(0)=1
%	dim = 1
function yp = f( x, y)
yp = y;

%	ODE, soluzione: y=exp(x.^2/2), y(-2)=exp(2), x in [-2,2]
%	dim = 1
function yp = f( x, y)
yp = x .* y;

%	ODE, soluzione: y=exp(-20*x)+sin(x), y(0)=1, x in [0,2.5]
%	dim = 1
%	esempio che mette in crisi difcen (x in (0,a), a>.5)
function yp = f( x, y)
yp = -20*y+20*sin(x)+cos(x);

%	ODE, soluzione: y=exp(-100*x)+1, y(0)=2, x in [0,1]
%	dim = 1
function yp = f( x, y)
yp = -100*y + 100;

%	ODE, soluzione: y=exp(-x), y(0)=1
%	dim = 1
function yp = f( x, y)
yp = -y;

%	ODE, soluzione: y=exp(-x.^2), y(-3)=exp(-9), x in [-3,3]
%	dim = 1
function yp = f(x,y)
yp = -2 * x .* y;

%	ODE, soluzione: y=1./(1+x.^2), y(-5)=1/26, x in [-5,5]
%	dim = 1
%	la soluzione e' la funzione di Runge
function yp = f( x, y)
yp = -2*x.*y.*y;

%	ODE, soluzione: y=expm(x*A)*y0, y(0)=[1;1]
%	dim = 2
%	equazione stiff: prova Eulero in [0,10] con 495, 500, 501, 505 punti
function yp = f( x, y)
A = [-100 1;0 -1/10];
yp = A*y;

%	ODE, soluzione: y=x.*cos(x), y(0)=0, x in [0,12]
%	dim = 1
function yp = f( t, y)
yp = y./t - t.*sin(t);

%	ODE, soluzione: y=[x.*sin(x); y1'], y(0)=[0;0], x in [0,20]
%	dim = 2
%	sistema associato alla equazione del second'ordine
%		y" = -y + 2*cos(x)
function yp = f( t, y)
yp = [y(2); -y(1)+2*cos(t)];

%	ODE, soluzione: y=?, y(0)=1
%	dim = 1
%	
%	eulero e' stabile solo per h<1/50
function yp = f( x, y)
yp = -100*y + exp(-x);

Giuseppe Rodriguez
rodriguez@unica.it