Bonjour,
J'essaye de rendre un calcul de résolution d'équations différentielles avec un schéma numérique un peu plus robuste (au sens où j'utilise des fonctions).
Dans mon code, j'ai la ligne suivante :
y = Euler(@(y) OdeFunc([],y),y(1),dt,Niter+1);
Voici le détail de mes différents codes:
Le programme :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| %% Initialisation de la feuille de calcul
clear all
close all
%% Résolution de l'équation différentielle
% Initialisation
y(1)=1;
temps(1)=0;
% Paramètres
Niter=200;
dt=1/Niter;
temps_simu=1;
nbreiteration = round(temps_simu/dt)+1;
temps = 0:dt:temps_simu;
y = Euler(@(y) OdeFunc([],y),y(1),dt,Niter+1);
%% Affichage de la solution
figure(1)
grid on
hold on
plot(temps,y) |
La fonction Euler :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function Y = Euler(fct,Y0,dt,nbreiteration)
% EULER Cette fonction permet d'appliquer le schéma numérique d'Euler.
% fct :
% Y0 : point de départ (celà peut être un scalaire ou un vecteur)
% dt : pas de temps
% nbreiteration : nombre d'itérations
Y(:,1) = Y0;
temps = 0;
for iIter = 1:nbreiteration-1
temps = temps + dt;
Y(:,iIter+1) = Y(:,iIter) + dt*fct(Y(:,iIter));
end |
La fonction OdeFunc :
1 2 3 4 5 6 7 8 9 10 11 12 13
| function yp = OdeFunc(t,y)
%ODEFUNC Définition d'une équation différentielle sous la forme d'une
%représenation d'état
yp = f(t,y);
function yp = f(t,y)
yp = -y^3+2;
end
end |
Elle permet d'appliquer le schéma numérique d'Euler sur une équation différentielle définie dans la fonction OdeFunc. Je vous joins en copie le code.
Par contre, je ne comprends plus pourquoi il est nécessaire de mettre les crochets [] au niveau de la variable du temps. Celà ne fonctionne pas si je mets t à la place de [].
Pouvez-vous m'expliquer à quoi servent ces crochets ?
Je vous remercie d'avance pour votre aide.
Partager