IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Aide pour créer une boucle


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 62
    Points : 26
    Points
    26
    Par défaut Aide pour créer une boucle
    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)

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %                                                                         %
    %    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/essai1.txt',R,'\t')
    %j'extrais la diagonale de la matrice de covariance
    dlmwrite('D:/prog/inversion-symsym/essai.txt',diag(W)','\t')
    dlmwrite('D:/prog/inversion-symsym/rcomp-test6.txt',K,'\t')
    Voila je remercie par avance

    ps: le code n'a pas été crée par moi . J'ai recupéré ce code.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    salut,

    j'ai pas bien compris ton code mais bon,

    A mon avi , essaye de créer un objet de dimension plus grande pour stocker les resultats: par exemple une matrice si l'objet que tu veux stocker est un vecteur (en general dimension d+1 si tu veux stocker d).

    Attention, si tu veux faire varier 2 variables il te faut creer un objet de dimension d+2.....

    il te reste juste cree une boucle, et a enregister dans ton objet de stokage les resultats.

    apres ta boucle (resultats reccupérés j'éspére) tu tiens ton objet, et tu peux le manipuler comme tu veux (ajouter le nombre d'iteration....) en même temps que tu l'enregistre dans un fichier.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 62
    Points : 26
    Points
    26
    Par défaut Au secours
    Bonjour, merci pour la réponse

    En fait je me pose une question.
    Est ce qu'il y a des personnes super fortes en algo??

    voila j'ai un gros probleme j'ai recuperé ce code or la personne n'a pas indiqué son algo ni meme quelques commentaires donc j'essaye de comprendre ce qu'elle a pu faire .
    Or à un endroit je doute , il y a une boucle sur h (for h = 1: 50 ) , et a la fin le vecteur resultat soit R est inclu dans la boucle. Mais n'écrase-t il pas à chaque fois les données??? de plus G' est inclu dedans la boucle h pour X puis on reutilise G' pour definir C hors de la boucle !!! je comprends plus car W c'est ma matrice finale ...donc ça devrait être pareil pour R ?? non???

    Merci beaucoup d'avance !

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/11/2006, 17h36
  2. aide pour créer une base
    Par irnbru dans le forum Débuter
    Réponses: 3
    Dernier message: 19/09/2006, 18h03
  3. aide pour créer une faq sur inno setup
    Par fsx999 dans le forum Langage
    Réponses: 3
    Dernier message: 12/06/2006, 20h16
  4. [VBA-E]besoin d'aide pour faire une boucle
    Par mikazounette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/04/2006, 14h04
  5. [FLASH MX2004] Aide pour créer une animation
    Par SnakeTales dans le forum Flash
    Réponses: 5
    Dernier message: 04/08/2005, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo