Pages : 1
#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
Pages : 1