Bonjour!
J'ai un problème qui porte sur le temps d'exécution d'une routine matlab...
temps qui est bien trop long. La partie de code problématique est la suivante:
L'objectif est donc de déterminer la valeur mini de T. La valeur de Tmini peut variée de 1 à 100, suivant les paramètres d'entrées Ci et Cf (et il est impossible d'avoir une idée du résultat avant calcul).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Ci; % conditions initiales, matrice 3x3 Cf; % conditions finales, matrice 3x3 while (max(A) < Adispo) && (max(B) < Bdispo) <div style="margin-left:40px">T = T - dt; Results = fonction1(Ci,Cf,T); % Results matrice 9x(0:0.15:T) (A,B) = fonction2(Results); % A et B deux matrices 4x(0:0.15:T)</div> end Tmini = T;
Les fonctions 1 et 2 sont lourdes et je ne peux pas les modifier.
J'aurai souhaité remplacer cette boucle "while" par une fonction d'optimisation, mais pour l'instant je n'ai pas trouvé de solution adéquat à mon problème.
Sinon, en créant une sorte de dichotomie sur "dt", avec une suite de plusieurs boucles while j'ai pu améliorer le temps d'exécution, mais ce n'est tout de même pas terrible et vraiment pas élégant dans le code...
J'ai Tinit = 100, je commence la première boucle avec dt = 25, puis je diminue jusqu'à avoir une précision de 0,15 sur T.
Donc ce que je souhaiterai
- dans le meilleur des cas, trouver une fonction d'optimisation permettant d'éviter une succession de boucle while
- sinon, une manière élégante de faire une dichotomie pour converger rapidement vers le résultat
Voilà! Merci de votre aide!
vincent
Partager