mscripts - MATLAB Scripts

Méthode d'Euler - Equations du 1er ordre

%-----------------------------------------------------
%% Exemple 1 : $(2y) y' = 1-t $
%-----------------------------------------------------
clear
clc
z = dsolve('2*y*Dy=1-t','y(0)=1');
z = simple(z(1))
n=10
a=0;
b=3;
y0=1
dx=(b-a)/n;
x(1) = a;
ye(1) = y0; % explicite
yi(1) = y0; % implicite
ys(1) = y0; % second ordre

fe = @(x,y) y + dx*(1-x)/(2*y);
fi = @(x,y) 0.5*(y + sqrt(y^2 + 2*dx*(1-x)));
fs = @(x,y) fe(x,y)-0.5*(dx^2)*( 1/(2*y) + ((1-x)^2)/(4*y^3));

for i=1:n
    x(i+1) = x(i) + dx; 
    ye(i+1) = fe(x(i),ye(i));
    yi(i+1) = fi(x(i+1),yi(i));
    ys(i+1) = fs(x(i),ys(i));
end
ezplot(z(1),[a,b])

hold on
plot(x,ye,'k -.')
plot(x,yi,'k --')
plot(x,ys,'k -.o')
plot(x,0.5*(yi+ye),'k -.+')


Méthode d'Euler - Système de 2 équations

clear
clc
a=0;
b=30;
y0=1
dy0=-1

f = inline('[y(2);-.2*y(2)-sin(y(1))+sin(t)]','t','y');
[T Z] = ode45(f,[a b],[y0;dy0]);
%plot(T,Z(:,1),'r',T,Z(:,2))
plot(T,Z(:,1),'r')

%%
n=500;
dx=(b-a)/n;
x(1) = a;
Y = [y0 dy0];

Fe = @(t,V) V + dx*[ V(2);
                    -.2*V(2)-sin(V(1))+sin(t)];


for i=1:n
    x(i+1) = x(i) + dx; 
    Y(i+1,:) = Fe(x(i),Y(i,:)');
end
plot(x,Y(:,1),'k -.',T,Z(:,1))



Méthode d'accélération moyenne constante (MAMC)

%---------------------------------------
function Ut = MAMC(M,C,K,F,Acc,dt)
%---------------------------------------

 K = K + 4*M/dt^2 + 2*C/dt ;
 C = 2*C + 4*M/dt;

 N = length(Acc);
 U = full(0*F);
 V = U;
 A = U;

 Ut(:,1) = U;

 for i = 1:N-1
     dP = F * (Acc(i+1)-Acc(i));
     dP = dP + C * V + 2*M * A;
    
     dU = K\dP;
     dA = 4*dU/dt^2 - 4*V/dt - 2*A;

     dV = 2*dU/dt   - 2*V;
         
     U = U + dU;
     V = V + dV;
     A = A + dA;
    
     Ut(:,i+1) = U;
    
 end
return


Méthode de Différences Finies Centrées (DFC)