Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/12/2007, à 11:13

laroche1

pb de boucle matlab.

Bonjour à  tous ya t'il des petits genies de matlab sur le forum????

Voila en fait j'ai une idée mais n'etant pas une as de la programmation je voulais savoir si mon idée etait réalisable.

Je voudrais automatiser mon programme

Dans un vecteur E, je modifie les différentes valeurs proportionnellement entre elles et j'obtiens un fichier de sortie à  la fin. Or au bout d'un monde ça devient ennuyeux, j'ai pleins de fichiers de sortie à  traiter et je perds beaucoup de temps à  traiter mes fichiers un par un !!! le truc c'est que j'aimerais lui dire que:
que dans
E= [deltaUen  deltaVen   deltaSen   Wuc   Wvc  Wsc   Wuo  Wvo   Wso   deltaUdi  deltaVdi    deltaSdi]

tester differents valeurs pour deltaUen : test1=1000000 test2=100000 test3=10000 ......
de meme pour les autres avec deltaVen: test1=100000 ......
(et si ça marche pour E refaire  pareil pour X)
et avoir recuperer tous ces tests dans un meme fichier avec le numero de l'iteration (par ex que pour la premiere itération c'etait le test de 10000000....pour s'y retrouver)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                         %
%    Program for ideal orthopyroxene / symmetric clinopyroxene models     %
%                                                                         %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%clear;
M=DLMREAD('D:/prog/inversion-symsym/data1.txt','\t');			
j=size(M);
m=DLMREAD('D:/prog/inversion-symsym/data1.txt');
m = [m(1,:) m(2,:) m(3,:) m(4,:)]';
X0=[1E6 1E6 1E6 0 0 1E6 0 0 1E6 1E6	1E6 1E6 m']';	
e=DLMREAD('D:prog/inversion-symsym/error1.txt');	
e = [e(1,:) e(2,:) e(3,:) e(4,:)]';
E=[1E12;1E12;1E12;0;0;1E12;0;0;1E12;1E12;1E12;1E12;e];				
D=size(X0);								
C0=eye(D(1));								
for i=1:D(1)								
	C0(i,i)= E(i);	
end    
X=X0;											
a=[j(1,2)];
for h=1:50									
	p=[X(1)+X(12+1)*X(2)-X(12+a+1)*X(3)+8.314*X(12+a+1)*log((1-X(12+2*a+1))/(1-X(12+3*a+1)))+((X(12+2*a+1))^2)*(X(4)+X(12+1)*X(5)-X(6)*X(12+a+1))-((X(12+3*a+1))^2)*(X(7)+X(8)*X(12+1)-X(9)*X(12+a+1))];
	for b=14:a+12
		p=[p;X(1)+X(b)*X(2)-X(a+b)*X(3)+8.314*X(a+b)*log((1-X(2*a+b))/(1-X(3*a+b)))+((X(2*a+b))^2)*(X(4)+X(b)*X(5)-X(6)*X(a+b))-((X(3*a+b))^2)*(X(7)+X(8)*X(b)-X(9)*X(b+a))];
	end
	P1=[1 X(13) -X(12+a+1) (X(12+2*a+1))^2 (X(12+2*a+1))^2*X(13) -(X(12+2*a+1))^2*X(12+a+1) -(X(12+3*a+1))^2 -(X(12+3*a+1))^2*X(13) (X(12+3*a+1))^2*X(12+a+1)];
	for z=14:a+12
		P1=[P1;1 X(z) -X(z+a) (X(z+2*a))^2 (X(z+2*a))^2*X(z) -(X(z+2*a))^2*X(z+a) -(X(z+3*a))^2 -(X(z+3*a))^2*X(z) (X(z+3*a))^2*X(z+a)];
	end
	P2=zeros(a,3);	
	P3=eye(a);
	P4=eye(a);
	P5=eye(a);
	P6=eye(a);
	for y=1:a
		P3(y,y)=X(2)+(X(12+y+2*a))^2*X(5)-(X(12+y+3*a))^2*X(8);
		P4(y,y)=-X(3)+8.314*log((1-X(2*a+12+y))/(1-X(3*a+12+y)))-X(6)*(X(2*a+12+y))^2+X(9)*(X(3*a+12+y))^2;
		P5(y,y)=-8.314*X(12+a+y)/(1-X(2*a+12+y))+2*X(12+2*a+y)*(X(4)+X(12+y)*X(5)-X(12+a+y)*X(6));
		P6(y,y)=8.314*X(12+a+y)/(1-X(3*a+12+y))-2*X(12+3*a+y)*(X(7)+X(8)*X(12+y)-X(12+a+y)*X(9));
	end 
	P=[P1 P2 P3 P4 P5 P6];	
	f=[X(10)+X(12+1)*X(11)-X(a+12+1)*X(12)+8.314*X(12+a+1)*log(X(12+3*a+1)/X(12+2*a+1))-(1-X(12+2*a+1))^2*(X(4)+X(12+1)*X(5)-X(6)*X(12+1+a))+(1-X(12+3*a+1))^2*(X(7)+X(8)*X(12+1)-X(9)*X(12+a+1))];
	for b=14:a+12
		f=[f;X(10)+X(b)*X(11)-X(a+b)*X(12)+8.314*X(a+b)*log(X(3*a+b)/X(2*a+b))-(1-X(2*a+b))^2*(X(4)+X(b)*X(5)-X(6)*X(a+b))+(1-X(3*a+b))^2*(X(7)+X(8)*X(b)-X(9)*X(b+a))];
	end
	F2=[-(1-X(12+2*a+1))^2 -(1-X(12+2*a+1))^2*X(12+1) (1-X(12+1+2*a))^2*X(12+a+1) (1-X(12+3*a+1))^2 (1-X(12+3*a+1))^2*X(12+1) -(1-X(12+3*a+1))^2*X(12+a+1) 1 X(12+1) -X(12+a+1)];
	for z=14:a+12
		F2=[F2;-(1-X(z+2*a))^2 -(1-X(z+2*a))^2*X(z) (1-X(z+2*a))^2*X(z+a) (1-X(z+3*a)^2) (1-X(z+3*a))^2*X(z) -(1-X(z+3*a)^2)*X(z+a) 1 X(z) -X(z+a)];
	end
	F1=zeros(a,3);	
	F3=eye(a);
	F4=eye(a);
	F5=eye(a);
	F6=eye(a);
	for y=1:a
		F3(y,y)=X(11)-(1-X(12+y+2*a))^2*X(5)+(1-X(12+y+3*a))^2*X(8);
		F4(y,y)=-X(12)+8.314*log(X(3*a+12+y)/X(2*a+12+y))+X(6)*(1-X(2*a+12+y))^2-X(9)*(1-X(3*a+12+y))^2;
		F5(y,y)=-8.314*X(12+a+y)/X(2*a+12+y)+2*(1-X(12+2*a+y))*(X(4)+X(12+y)*X(5)-X(12+a+y)*X(6));
		F6(y,y)=8.314*X(12+a+y)/X(3*a+12+y)+2*(X(12+3*a+y)-1)*(X(7)+X(8)*X(12+y)-X(12+y+a)*X(9));
	end
  	F=[F1 F2 F3 F4 F5 F6];
	g=[p;f];  
	G=[P;F];	 
	X=X0+C0*G'*inv(G*C0*G')*(G*(X-X0)-g);
	R=[X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) X(10) X(11) X(12)]
  
end
C=C0-C0*G'*inv(G*C0*G')*G*C0;
W=[C(1,1) C(1,2) C(1,3) C(1,4) C(1,5) C(1,6) C(1,7) C(1,8) C(1,9) C(1,10) C(1,11) C(1,12)];
for v=2:12
	W=[W; C(v,1) C(v,2) C(v,3) C(v,4) C(v,5) C(v,6) C(v,7) C(v,8) C(v,9) C(v,10) C(v,11) C(v,12)];
end
D=[E(1) E(2) E(3) E(4) E(5) E(6) E(7) E(8) E(9) E(10) E(11) E(12)];
Q=[D;R;W];
for i=1:a
	ka(i)=[X(i+12)];
	kb(i)=[X(i+12+a)];
	kc(i)=[X(i+12+2*a)];
	kd(i)=[X(i+12+3*a)];
end
K=[ka;kb;kc;kd];

dlmwrite('D:/prog/inversion-symsym/resl-symsym1.txt',Q,'\t')
dlmwrite('D:/prog/inversion-symsym/rcomp-test6.txt',K,'\t')

Voila je vous remercie d'avance.

Dernière modification par laroche1 (Le 03/12/2007, à 11:14)

Hors ligne

#2 Le 04/12/2007, à 11:29

bertrand0

Re : pb de boucle matlab.

J'imagine que tu peux ajouter une boucle for pour cela:
EM=[1E12 1E12 1E12 0 0 1E12 0 0 1E12 1E12 1E12 1E12 e';
       test11 test12 test13 ...;
       test21 test22 test23 ... ]';
for E=EM
...
end

Ainsi chaque colonne de la matrice EM représente un vecteur E à  tester à  l'intérieur de la boucle.
Il faudra aussi adapter les dlmwrite, soit pour tout enregistrer à  la fin, soit pour qu'il enregistrent en mode ajout plutà´t que remplacement.

Pour ce qui est de X, par quel critère considère-tu que ça a marché ?

Dernière modification par bertrand0 (Le 04/12/2007, à 11:31)


Ceux qui écrivent comme ils parlent, quoiqu'ils parlent très bien, écrivent mal.
                                                            Buffon, Discours sur le style

Hors ligne

#3 Le 04/12/2007, à 15:30

laroche1

Re : pb de boucle matlab.

Merci pour ta réponse en fait je n'avais pas pensé à  cela directement (je vais tester)aussi mais le truc c'est que je dois rentrer à  chaque fois les valeurs de E.

en fait je pensais à  un truc du genre

E= [ 10000 10000 10000.....] que je fixe une valeur initiale (1er terme pareil pour les autres) 10000 et qu'apres suivant un certain pas  j'ai en test2 E=[1000 ...], test3 E=[100...], test4 E=[10..] ....ça donne :
E1=[10000 10000 10000...]
E2=[1000 .....]
E3=[100 .....].......

(au lieu de tout taper..)
Mais c'est peut etre pas réalisable.

Pour X c'est pas la peine.
Merci

pS: si quelqu'un est super fort en algo est ce qu'il n'y aurait pas une erreur pour la boucle h (la fermeture de cette boucle me semble ne pas être au bon endroit?

J'ai un soucis pour mon vecteur resultat R ; ce dernier est dans la boucle or il rapelle ce vecteur hors de la boucle mais il ne prend donc que la derniere valeur??? non??? surtout que apres ma matrice W finale ne correspondant plus au resulltat vu qu'elle est definie hors de la boucle?? je ne comprends plus rien

Dernière modification par laroche1 (Le 05/12/2007, à 11:01)

Hors ligne