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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
y = Euler(@(y) OdeFunc([],y),y(1),dt,Niter+1);
Voici le détail de mes différents codes:

Le programme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.