Bonjour à tous.
En ce moment, je code en poo avec matlab.

J'aimerais stocker une liste d'objet.

Au départ j'utilisais une structure du type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
for i=1:n
     C(i)= monObjet;
end
mais à chaque itération de la boucle, l'affectation prenait de plus en plus de temps (observé grâce à tic et toc). Je me suis alors interessé à la pré allocation de mémoire étant donné que je connais à l'avance la taille de mon vecteur C.

1er pb : Ne sachant pas comment pré allouer de l'espace pour un vecteur/matrice de taille(1,n), j'ai utilisé les cell Arrays:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
C = cell(1,n)
for i=1:n
     C{i} = monObjet;
end
mais j'ai chronometré et cela me prend autant de temps que de ne pas initialiser la cell C avant de rentrer dans la boucle.

En effet, testez :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
classdef Objet < handle
    properties
        attribut
    end 
 
    methods
         function obj = Objet(attribut)
              obj.attribut = attribut;
    end
end
avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
clear;
tic;
for i=1:1000
    C{i}=Objet(attribut);
end
toc
 
tic
C = cell(1, 1000);
for i=1:1000
    C{i}=Objet(attribut);
end
toc
et vous obtiendrez le même temps à peu de chose.
Alors que pour un nombre classique, initialiser la cell à cell(1,n) avant la boucle est effectivement avantageux :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
clear;
tic;
for i=1:1000
    C{i}=i;
end
toc
 
tic
C = cell(1, 1000);
for i=1:1000
     C{i}=i;
end
toc
Cela viendrait donc de l'instanciation d'objet.
Pourquoi instancier un objet prendrait-il de plus en plus de temps au fur et a mesure que la boucle s'execute?
Voyez-vous une explication à cela ?
Avez-vous une solution pour réduire le temps de calcul ?

Clem