Bonjour à tous,
Tout d'abord, j'aimerai dire que ce site est génial, c'est une vrai mine d'or. Malheureusement je n'ai pas réussi à trouver le filon qui m'intéresse.
Je me permets donc d'ouvrir une nouvelle discussion.
Je dispose de 4 matrices de 3 dimensions : M1(i,j,2) ; M2(k,l,2) ; M3(m,n,2) et M4(o,p,2).
J'aimerai pour chaque combinaison possible vérifier certaines conditions. Si ces conditions sont remplies, j'aimerai enregistrer les indices matriciels correspondants (i,j,k,l,m,n,o et p) afin d'être capable d'aller chercher les valeurs correspondantes dans les matrices.
Il y a au total donc i*j*k*l*m*n*o*p combinaisons.
J'ai dans un premier temps pensé à faire la méthode "bourrin" en codant ceci avec des boucles for.
deux problèmes se posent à moi:
1) La matrice de résultat "solution" dans laquelle j'aimerais stocker les indices vérifiant les conditions, pour limiter le temps de calcul, doit être prédéfini. Or, si j'ai 4 matrices de tailles (50,50,2) il me faudrait pré-créer une matrice de taille (50^8,8). Et le genre de fonctions zeros(50^8,8) dépasse la limite autorisée par Matlab.
2) Le temps de calcul est extrêmement long. Ma boucle a pris 3h ce matin pour arriver à terme...
Je me demande donc s'il existe des fonctions dans Matlab permettant de simplifier/optimiser mon algorithme, en évitant au maximum les boucles qui sont chronophages.
Merci beaucoup pour votre aide.
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 sol=0; for i=1:imax for j=1:jmax for k=1:kmax for l=1:lmax for m=1:mmax for n=1:nmax for o=1:omax for p=1:pmax if (M1(i,j,1)+M2(k,l,1)+M3(m,n,1)+M4(o,p,1))>=(-(FX_ENV-precision_X)) ... % condition sur la limite inférieure de FXenv && (M1(i,j,1)+M2(k,l,1)+M3(m,n,1)+M4(o,p,1))<=(-(FX_ENV+precision_X)) ... % condition sur la limite supérieure de FXenv && (M1(i,j,2)+M2(k,l,2)+M3(m,n,2)+M4(o,p,2))>=(-(FY_ENV-precision_Y)) ... % condition sur la limite inférieure de FYenv && (M1(i,j,2)+M2(k,l,2)+M3(m,n,2)+M4(o,p,2))<=(-(FY_ENV+precision_Y)) ... % condition sur la limite inférieure de FYenv && (((X1*M1(i,j,2)-Y1*M1(i,j,1))+(X2*M2(k,l,2)-Y2*M2(k,l,1))+(X3*M3(m,n,2)-Y3*M3(m,n,1))+(X4*M4(o,p,2)-Y4*M4(o,p,1)))>=(-(MZ_ENV-precision_M)))... % condition sur la limite inférieure de MZenv && (((X1*M1(i,j,2)-Y1*M1(i,j,1))+(X2*M2(k,l,2)-Y2*M2(k,l,1))+(X3*M3(m,n,2)-Y3*M3(m,n,1))+(X4*M4(o,p,2)-Y4*M4(o,p,1)))<=(-(MZ_ENV+precision_M))) % condition sur la limite supérieure de MZenv % si les critères sur les efforts et moment % sont validés alors on note les indices des % solutions correspondants sol=sol+1; solution(sol,:)=[i,j,k,l,m,n,o,p]; end end end end end end end end end
Je suis ouvert à toute proposition qui m'aiderait à avancer sur ce sujet et n’hésitez pas à me demander quoique ce soit si je ne suis pas clair.
Bien cordialement,
Jérémie.
Partager