bonsoir à vous tous,
j'ai fait un petit programme en MatLab qui marche bien mais il y a le problème de temps d'exécution(très lent) à cause des boucles imbriquées.
Je veux l'optimiser et je ne sais pas comment le faire.aidez moi svp
MERCI
bonsoir à vous tous,
j'ai fait un petit programme en MatLab qui marche bien mais il y a le problème de temps d'exécution(très lent) à cause des boucles imbriquées.
Je veux l'optimiser et je ne sais pas comment le faire.aidez moi svp
MERCI
Sans le code on ne peut pas trop t'aider!
mais tout ce que je peux te dire c'est que matlab n'aime pas trop les boucles, il faut "vectoriser" tes boucles (matlab c'est du calcul matriciel)
![]()
salut,desolé pour le retard.
voici 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 %5 points 2 dimensions x=[0 0;1 0;0 1;1 1;.5 .5]; plot(x(1,1),x(1,2),'o') grid on hold on,plot(x(2,1),x(2,2),'o') hold on,plot(x(3,1),x(3,2),'o') hold on,plot(x(4,1),x(4,2),'o') hold on,plot(x(5,1),x(5,2),'or') u=[1 1 1 1 -1]; max=0; for s=0:.1:3 for t=0:.1:1 for m=0:.1:1 for n=0:.1:1.5 l=(-s*u(1)-t*u(2)-m*u(3)-n*u(4))/u(5) if l<0 l=0 end a=[s t m n l] f=0 g=0 for i=1:1:5 for j=1:1:5 g=g+a(i)*a(j)*u(i)*u(j).*(x(i,:)*x(j,:)'+1)^3 end f=f+a(i) end G=f-1/2*g if G>max max=G,a1=s,a2=t,a3=m,a4=n,a5=l; end end end end end a=[a1 a2 a3 a4 a5] b=u(5)-x(5,:)*(u(1)*a1.*x(1,:)+u(2)*a2.*x(2,:)+u(3)*a3.*x(3,:)+u(4)*a4.*x(4,:)+u(5)*a5.*x(5,:))' A=0 B=0 C=0 D=0 for h=0:.25:1 for i=1:1:5 A=A+a(i)*u(i)*x(i,2)^3 B=B+a(i)*u(i)*3*(h*x(i,1)+1)*x(i,2)^2 C=C+a(i)*u(i)*3*(h*x(i,1)+1)^2*x(i,2) D=D+a(i)*u(i)*(h*x(i,1)+1)^3 end D=D+b P=[A B C D] r=roots(P) hold on plot(h,r,'og') end
je veux l'optimiser pour l'appliquer sur une image;
merci.
Commence déjà par mettre un point-virgule ";" à la fin de la plupart des lignes (sauf celles qui commences par FOR, IF ,END...) afin d'éviter que MATLAB perde du temps à afficher les résultats intermédiaires dans le Command Window
Vectoriser, en gros, c'est se débarasser des boucle for en traitant le vecteur (ou la matrice) dans son ensemble, plutôt que les éléments un par un.
Ce que je veux dire par vectoriser c'est comme le dit dam2227 eviter de faire le traitement élélment par élément ( matlab est fait pour le calcul matriciel)
ex :
peut s'écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for j=1:1:5 g=g+a(i)*a(j)*u(i)*u(j).*(x(i,:)*x(j,:)'+1)^3 end
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 j=[1:5]; g=g+a(i)*a(j)*u(i)*u(j).*(x(i,:)*x(j,:)'+1)^3;![]()
Partager