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 24/10/2007, à 15:22

laroche1

précision resultat matlab

Bonjour

Voila j'ai une petite question : est ce que la précision des résultats peut changer suivant les versions de matlab ( par ex entre une version 5.3 et 6.5)??

Merci

Hors ligne

#2 Le 24/10/2007, à 18:22

mfc_alpha

Re : précision resultat matlab

Wouha! Ca c de la question!
Ha priori ca peut dependre des fonctions que tu utilise, si elles ont ete ameliorer entre temps, c'est possible!

Hors ligne

#3 Le 24/10/2007, à 22:07

Le Farfadet Spatial

Re : précision resultat matlab

Salut à tous !

   Que veux-tu dire par la précision ? Si c'est le nombre de chiffres à l'affichage, c'est paramétrable. Si tu parles de la précision intrinsèque des calculs, c'est-à-dire que tu parles des erreurs d'arrondis, cela appelle une réponse un peu plus fine :

   Tout d'abord, cela dépend de l'ensemble utilisé pour faire les calculs --- typiquement virgule flottante, décimaux ou précision arbitraire, --- quoique ce ne soit pas vraiment l'essentiel.

   Ensuite, cela va dépendre pour chaque fonction, vu qu'une façon de faire des calculs peut changer la propagation des erreurs et ce changement peut-être vraiment radical. Donc, si une fonction a été réécrite, sa précision peut avoir changé. Par contre, les opérations de bases --- addition, soustraction, multiplication et division --- ne peuvent pas avoir vu leur précision s'améliorer, vu que ce sont celles du processeurs.

   Enfin, les calculs de types développements limités peuvent voir leur précision changer d'une version à l'autre, mais ce serait vraiment exceptionnel. Dans certain cas, c'est paramétrable.

   Pour finir, sache que des méthodes pour maîtriser les erreurs de calcul (typiquement intervalles et approche stochastique) ont été développées pour Matlab.

   Donc, si la précision dont tu parles c'est celle intrinsèque du calcul, la réponse est globalement non, mais ponctuellement sur certaines fonctions c'est possible.

   Je ne sais pas si ça peut t'aider, mais tu pourras trouver une analyse de la propagation des erreurs de calcul sur ordinateur et une présentation des méthodes utilisées pour les contrôler dans mon rapport de master, que tu peux trouver à cette adresse : http://www.legos.obs-mip.fr/~lebars/publications

   Voilà, j'ai essayé de répondre au mieux en fonction des éléments que j'avais. J'espère que cela t'aidera.

   À bientôt.

                                                                                                         Le Farfadet Spatial

Hors ligne

#4 Le 24/10/2007, à 23:37

Le Farfadet Spatial

Re : précision resultat matlab

Re-salut à tous !

   Ah ! Petite précision, pour le cas où tu te perdrais dans mon impressionnante bibliographie scientifique : le titre de mon mémoire est « Implémentation de la méthode CESTAC dans la bibliothèque BLAS. »

   À bientôt.

                                                                                                         Le Farfadet Spatial

Hors ligne

#5 Le 25/10/2007, à 10:12

laroche1

Re : précision resultat matlab

Bonjour, Quand je parlais de précision de calcul

je parlais de ceci

mes résultats (version6.5)

27132.315	483.1681	12.1576	-13.1959	-5.7039	0	0	-23.6157	40952.7182	1659.7886	28.337

resultats obtenus avec version 5.3

27383,78	487,51	12,33	-13,14	-5,77	-23,62	41033,52	1660,56	28,4

J'utilise les memes données (à priori)

Voila merci

Hors ligne

#6 Le 25/10/2007, à 15:14

kkneo

Re : précision resultat matlab

Tu parles de précision à l'affichage là.

Il me semble que Matlab utilise le flottant double précision par défault donc si tu t'intéresse à 3 chiffres après la virgule tu as de la marge ne t'inquiète pas donc un encodage sur 64 bits.

Si tu n'est pas trop au fait de tout ça regardes là :
http://fr.wikipedia.org/wiki/Nombre_flottant
Pour ce qui est de l'affichage, un petit

format long

devrai t'aider voilà le help :
http://www.mathworks.com/access/helpdes … cher&meta=

Dernière modification par kkneo (Le 25/10/2007, à 15:15)

Hors ligne

#7 Le 25/10/2007, à 19:36

Le Farfadet Spatial

Re : précision resultat matlab

Salut à tous !

kkneo a écrit :

Tu parles de précision à l'affichage là.

Ben, à lire son message précédent, je ne crois pas... En effet :

      -- 27132,315 arrondi à la deuxième décimale donne 27132,32 et non pas 27383,78 ;

      -- 483,1681 arrondi à la deuxième décimale donne 483,17 et non pas 487,51 ;

      -- et ainsi de suite, vu qu'il y a le même genre d'erreur à chaque chiffre.

   Donc, ce n'est pas qu'une question d'affichage. Cela peut en effet venir d'un problème de précision des calculs. Toutefois, avant d'être catégorique, j'aimerais un peu savoir comment Laroche1 obtient ces résultats.

   À bientôt.

                                                                                                        Le Farfadet Spatial

Hors ligne

#8 Le 25/10/2007, à 23:52

kkneo

Re : précision resultat matlab

Le Farfadet Spatial a écrit :

Salut à tous !

kkneo a écrit :

Tu parles de précision à l'affichage là.

Ben, à lire son message précédent, je ne crois pas... En effet :

      -- 27132,315 arrondi à la deuxième décimale donne 27132,32 et non pas 27383,78 ;

      -- 483,1681 arrondi à la deuxième décimale donne 483,17 et non pas 487,51 ;

      -- et ainsi de suite, vu qu'il y a le même genre d'erreur à chaque chiffre.

   Donc, ce n'est pas qu'une question d'affichage. Cela peut en effet venir d'un problème de précision des calculs. Toutefois, avant d'être catégorique, j'aimerais un peu savoir comment Laroche1 obtient ces résultats.

   À bientôt.

                                                                                                        Le Farfadet Spatial

En effet, pour tout avouer j'ai survolé le message et je me suis concentré sur le nombre de chiffre après la virgule tongue

Désolé, un peu surbooké en ce moment big_smile
Sinon je dis peut être un truc bête mais j'ai des vieux souvenirs avec une histoire de précision numérique relative qui varie en fonction de la machine sur laquelle matlab est installé ... je crois que c'est la constante eps qui donne ça ... il peu peut être essayer de voir si cette constante est la même d'une version à l'autre ... peut être aussi que ce n'est pas lié à la version de matlab mais plus à la machine sur laquelle matlab est installé? Il a les 2 versions sur la même machine là?

Dernière modification par kkneo (Le 26/10/2007, à 00:02)

Hors ligne

#9 Le 26/10/2007, à 08:51

laroche1

Re : précision resultat matlab

Bonjour à tous
en fait je n'ai qu'une version matlab installé
J'ai testé sur différentes et je n'obtiens jamais le meme resultat !!! c'est du n'importe quoi j'ai bien le meme fichier data et error.txt je vais devenir dingue....

avec version 5.3

36061.7575	638.5522	19.3896			-11.7031				59311.6443	2524.1463	21.687

avec version 6.5

36061.4769	638.5272	19.4119	0	0	-11.7029	0	0	0	59311.6068	2524.1508	21.687

et la version qui a été initialement utilisé par l'auteur du code

version inconnue

36061,0357	638,4909	19,4097	-11,7032	59311,2555	2524,1382	21,6867

Voila si vous avez des idées ....
Merci

Hors ligne

#10 Le 26/10/2007, à 08:56

Chessangel

Re : précision resultat matlab

Hello laroche !

Petite question quant à ces approximations :

-Est-ce que les résultats sont générés par une méthode de simulation (genre Monte Carlo) ?
-Est-ce qu'une fonction de solveur est utilisée ?


Une commission d'enquête pour être efficace, ne doit compter que trois membres, dont deux sont absents. G. Clémenceau

Hors ligne

#11 Le 26/10/2007, à 09:14

laroche1

Re : précision resultat matlab

Bonjour

Premiere question
Oui il s'agit d'une simulation genre monte carlo (mais plus developpé je crois )

Deuxieme question :

C'est quoi une fonction de solveur??? (par rapport à l'utilisation d'excel??)

Dernière modification par laroche1 (Le 26/10/2007, à 09:17)

Hors ligne

#12 Le 26/10/2007, à 09:19

Le Farfadet Spatial

Re : précision resultat matlab

Salut à tous !

   Laroche1, pour que nous puissions t'aider davantage, il faut que tu nous dises comment tu obtiens ces résultats. Là, tu nous montres des suites de chiffres, sans nous dire ce que c'est, d'où ça vient et ainsi de suite... Pour l'instant, la seule chose que nous pouvons dire, c'est que ce n'est pas pareil.

   Comment obtiens-tu ces résultats ?

   À bientôt.

                                                                                       Le Farfadet Spatial

Hors ligne

#13 Le 26/10/2007, à 09:27

Chessangel

Re : précision resultat matlab

1. S'il s'agit d'une simulation Monte-Carlo, il est logique de ne pas obtenir les mêmes résultats :
- Matlab utilise des nombres générés de manière aléatoire, et cette génération a sans doute changé de version en version.
Pour tester si c'est le cas, fixe-toi sur une version et entre la commande :

rand('state', sum(clock));

puis relance ta procédure. Tu devrais alors obtenir encore un résultat différent de ceux que tu mentionnes.
Explication : la ligne demande à Matlab de passer en algorithme de génération de nombres aléatoires 'state', avec comme paramètre la somme des nombres de l'horloge (qui est pseude-aléatoire).

2. En ce qui concerne le solveur, il existe quelques fonctions du même genre que le solveur d'Excel : fsolve, linsolve.

Dernière modification par Chessangel (Le 26/10/2007, à 09:27)


Une commission d'enquête pour être efficace, ne doit compter que trois membres, dont deux sont absents. G. Clémenceau

Hors ligne

#14 Le 26/10/2007, à 09:29

Le Farfadet Spatial

Re : précision resultat matlab

Re-salut à tous !

   Le temps que je poste mon message et déjà un premier élément de réponse.

laroche1 a écrit :

Oui il s'agit d'une simulation genre monte carlo (mais plus developpé je crois )

Ah ! Les choses deviennent beaucoup plus claires. D'ailleurs, as-tu essayé de lancer deux fois de suite le même programme avec le même jeux de données sur la même machine avec la même version de MatLab ?

   Essaye : il est probable que tu obtiennes deux fois des résultats différents. En effet, la méthode de Monte Carlo est une méthode statistique : en gros, le code comprend une part d'aléatoire. Donc, une légère divergence dans les résultats est tout à fait normale. Il y a (beaucoup) moins de 1% d'erreur, donc on peut dire que tes résultats sont bons, même si, en effet, ce ne sont pas exactement les mêmes.

   Voilà, un mystère de résolu.

C'est quoi une fonction de solveur??? (par rapport à l'utilisation d'excel??)

Pour faire simple : une fonction qui résout un système d'équations.

   À bientôt.

                                                                                                                                            Le Farfadet Spatial

Hors ligne

#15 Le 26/10/2007, à 09:32

laroche1

Re : précision resultat matlab

AHhh mais j'avais pas vu qu'il n'y avait pas le code, je suis vraiment desolée
(en fait j'avais ouvert une autre conversation avec tout expliqué dedans)

le code d'origine et la procedure expliquée qui marche avec une version 5.3

INVERSION PROGRAM (MATLAB© 5.3.0.1)

All the files must be within the WORK folder under MATLAB
For additional information on the program or on its application, please contact ncoussae@africamuseum.be 



To prepare the Input Files 

Prior data file.
Create a table where each line corresponds to the values of a specific datum type and each column to the set of values for a given experiment.  On each line, individual data are separated by a space or a tab.
Example:
P	0.2	0.5	1	1	1.5
T	1473	1473	1373	1473	1273
Ca cpx	0.802	0.779	0.872	0.806	0.894
Ca opx	0.080	0.085	0.056	0.075	0.032

Insert this table into a data.txt file (discard the first column): 

  0.2	0.5	1	1	1.5
1473	1473	1373	1473	1273
0.802	0.779	0.872	0.806	0.894	
0.080	0.085	0.056	0.075	0.032

Prior error file.
Create a table where each line corresponds to the variances of a specific datum type and each column to the set of variances for a given experiment.  As above, the individual data are separated by a space or a tab on each line.

P	4.444E-07	2.778E-06	1.111E-05	1.111E-05	2.500E-05
T	1.361E+00	1.361E+00	1.361E+00	1.361E+00	1.361E+00
Ca cpx	4.391E-05	2.323E-05	1.533E-05	6.254E-05	2.237E-05
Ca opx	5.082E-05	4.799E-05	9.072E-06	2.622E-05	3.906E-05

Insert this table into a error.txt file (discard the first column):

4.444E-07	2.778E-06	1.111E-05	1.111E-05	2.500E-05
1.361E+00	1.361E+00	1.361E+00	1.361E+00	1.361E+00
4.391E-05	2.323E-05	1.533E-05	6.254E-05	2.237E-05
5.082E-05	4.799E-05	9.072E-06	2.622E-05	3.906E-05


 

How to use the program

Paste the program onto the programming MATLAB® window
Select the prior parameter values through the line : 

X0=[100000 10000 1000 0 0 10 0 0 0 100000 10000 1000 m']';

The values must follow the order specified in the comment :
  %line matrix of the posterior parameter values (delta U....                  ) to which is added the line matrix (m’) of the posterior data.
 
Select the prior variances on the parameters through line E, e.g.,

E=[1E9;1E8;1E5;0;0;1000;0;0;0;1E9;1E8;1E5;e];

The values must follow the order specified in the comment :
  %column matrix of the prior errors on the parameters (                  ) to which is added the column matrix (e) of the prior errors on the data.

Select the number of iterations through the line:
for h=1:50

Save the program.
Start the program within the MATLAB® application window.





Results

When the program has ended, it creates two files within the MATLAB® work folder
 
reslt.txt : result file for the parameters;  the first line recalls the prior variances, the second gives the posterior values and the others are the posterior covariance matrix.

rcomp.txt : line matrix of the recalculated experimental data
 

Program:

% M = input matrix of the prior data (format as shown in the .xls file; orthopyroxene data follow clinopyroxene data, unlike in the text or titles)
% m = column matrix of the prior data
% X0 = line matrix of the prior parameters and data
% e = column matrix of the errors
% E = column matrix of the prior errors on the parameters and data
% C0 = creation of a nth order diagonal matrix, where n is the total number of parameters and data
% placement of the errors onto the diagonal to create the prior covariance matrix
% X = matrix of the prior data as used in iteration
% a = number of data
% start of inversion
% h = number of iterations
% p = form of the thermodynamic law used for the En-transfer reaction
% application of p to the whole set of data
% P1 = p derivative for the thermodynamic parameters of the En-reaction
% P2 = p derivative for the thermodynamic parameters of the Di-reaction
% P3 = p derivative for the various pressures
% P4 = p derivative for the various temperatures
% P5 = p derivative for the various Ca contents in clinopyroxene
% P6 = p derivative for the various Ca contents in orthopyroxne
% P whole set of p derivatives
% f = form of the thermodynamic law used for the Di-transfer reaction
% application of p to the whole set of data
% F1 = f derivative for the thermodynamic parameters of the En-reaction
% F2 = f derivative for the thermodynamic parameters of the Di-reaction
% F3 = f derivative for the various pressures
% F4 = f derivative for the various temperatures
% F5 = f derivative for the various Ca contents in clinopyroxene
% F6 = f derivative for the various Ca contents in orthopyroxne
% F whole set of f derivatives
% g = set of the two thermodynamic laws describing both reactions
% G= set of the derivatives for the two reactions
% mathematical form of the Tarantola et Valette's theorem
% parameter intermediate values during inversion
% end of inversion  
% C = computation of the final covariance matrix
% W = final covariance matrix for the parameters
% Z = prior variance matrix before inversion
% Q = set of results and variances for the parameters
% k = matrix of the recalculated data after inversion

 






clear
M=DLMREAD('/data.txt','\t');			
j=size(M);
m=DLMREAD('/data.txt');					
X0=[100000	10000 1000 0 0 10 0 0 0 100000	10000	1000 m']';	
e=DLMREAD('/error.txt');		
E=[1E9;1E8;1E5;0;0;1000;0;0;0;1E9;1E8;1E5;e];				
D=size(X0);								
C0=eye(D(1));								
for i=1:D(1)								
   C0(i,i)= E(i);							
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('/MATLABR11/work/reslt.txt',Q,'\t')
dlmwrite('/MATLABR11/work/rcomp.txt',K,'\t')

le code utilisé (modifié qui donne les memes resultats en 5.3 que le code d'origine mais en version 6.5 c'est différent)

%clear;
M=DLMREAD('F:/prog/inversionNC/data1.txt','\t');			
j=size(M);
m=DLMREAD('F:/prog/inversionNC/data1.txt');	

m=m.';
X0=[100000;10000;1000;0;0;10;0;0;0;100000;10000;1000;m(:)];	
e=DLMREAD('F:/prog/inversionNC/error1.txt');	

e=e.';
E=[1E9;1E8;1E5;0;0;1000;0;0;0;1E9;1E8;1E5;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:2000									
	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('F:/prog/inversionNC/reslt1.txt',R,'\t')
dlmwrite('/rcomp.txt',K,'\t')

et je vous mets egalement les fichiers data et error si vous voulez tester pour voir les valeurs
data

0.2    0.5    1.0    1.0    1.5    1.5    1.5    1.5    1.5    2.0    2.0    2.0    2.0    2.0    2.0    2.0    2.0    2.0    2.0    2.0    2.0    2.0    2.0    2.5    2.5    2.5    3.0    3.0    3.0    3.0    3.0    3.0    3.0    3.0    4.0    4.0    4.0    4.0    5.0    5.0    5.0    5.0    5.0    6.0
1473    1473    1373    1473    1273    1373    1473    1573    1673    1173    1273    1373    1473    1573    1673    1273    1373    1473    1573    1673    1173    1273    1673    1176    1273    1373    1168    1264    1373    1173    1473    1773    1773    1673    1373    1473    1573    1773    1173    1373    1573    1673    1773    1573
0.8023    0.7790    0.8725    0.8065    0.8940    0.8655    0.8355    0.7550    0.6240    0.9320    0.9075    0.8810    0.8355    0.7765    0.6445    0.9090    0.8710    0.8320    0.7665    0.6300    0.9380    0.9120    0.6275    0.9420    0.9130    0.8770    0.9400    0.9100    0.8790    0.9340    0.8590    0.5635    0.5550    0.7035    0.8710    0.8570    0.7870    0.5260    0.9310    0.8830    0.8000    0.7380    0.5970    0.8080
0.0805    0.0855    0.0560    0.0755    0.0320    0.0450    0.0610    0.0865    0.1175    0.0240    0.0360    0.0440    0.0550    0.0720    0.0970    0.0360    0.0430    0.0545    0.0795    0.1055    0.0210    0.0300    0.1025    0.0180    0.0270    0.0250    0.0110    0.0250    0.0270    0.0180    0.0530    0.0985    0.1090    0.0560    0.0340    0.0360    0.0520    0.0960    0.0075    0.0275    0.0470    0.0630    0.0860    0.0370

error

4.4444E-07	2.7778E-06	1.1111E-05	1.1111E-05	2.5000E-05	2.5000E-05	2.5000E-05	2.5000E-05	2.5000E-05	4.4444E-05	4.4444E-05	4.4444E-05	4.4444E-05	4.4444E-05	4.4444E-05	4.4444E-05	4.4444E-05	4.4444E-05	4.4444E-05	4.4444E-05	4.4444E-05	4.4444E-05	4.4444E-05	6.9444E-05	6.9444E-05	6.9444E-05	1.0000E-04	1.0000E-04	1.0000E-04	1.0000E-04	1.0000E-04	1.0000E-04	1.0000E-04	1.0000E-04	1.7778E-04	1.7778E-04	1.7778E-04	1.7778E-04	2.7778E-04	2.7778E-04	2.7778E-04	2.7778E-04	2.7778E-04	4.0000E-04
1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00	1.3611E+00
4.3911E-05	2.3225E-05	1.5332E-05	6.2539E-05	2.2370E-05	4.0673E-05	3.4954E-05	7.1128E-05	1.8976E-04	1.4516E-06	7.8743E-06	4.1203E-05	7.9719E-05	1.0939E-04	1.1325E-04	1.2755E-05	2.9395E-05	5.2257E-05	1.2809E-04	6.1330E-05	7.3046E-06	1.4516E-06	1.2420E-04	4.1649E-06	3.2661E-06	3.6415E-05	2.7778E-04	9.3711E-06	1.2559E-04	1.4062E-03	5.5241E-05	1.1114E-04	1.1186E-03	6.0363E-04	5.0333E-05	5.8569E-05	1.7782E-05	2.6297E-04	3.2985E-05	1.1816E-05	9.2902E-05	7.1128E-05	3.1497E-05	1.0412E-04
5.0816E-05	4.7993E-05	9.0724E-06	2.6219E-05	3.9063E-05	5.8064E-06	3.2661E-06	4.4455E-06	4.8659E-06	3.2661E-06	1.3064E-05	1.7782E-05	3.2661E-06	2.3225E-05	3.6290E-05	1.3064E-05	2.9395E-05	2.0413E-05	7.3487E-06	2.6219E-05	2.9395E-05	3.6290E-07	9.7656E-06	1.4516E-06	3.2661E-06	2.5000E-03	3.9062E-05	1.7782E-05	2.7778E-04	3.9062E-05	1.3064E-05	4.8659E-06	2.1626E-06	2.3361E-01	1.3064E-05	1.0412E-06	3.9063E-05	4.1649E-06	1.6721E-06	5.2712E-06	2.1626E-06	3.9063E-05	3.9062E-05	2.1626E-06

Voila j'espere avoir été complete
Merci de votre aide

Hors ligne

#16 Le 26/10/2007, à 09:40

laroche1

Re : précision resultat matlab

AH mais je comprends mieux maintenant le probleme

Oui Oui J'ai bien testé 2 fois le programme sur la meme version avec les memes données mais j'obtiens les memes resultats .

Hors ligne

#17 Le 26/10/2007, à 09:44

Chessangel

Re : précision resultat matlab

laroche1 a écrit :

AH mais je comprends mieux maintenant le probleme

Oui Oui J'ai bien testé 2 fois le programme sur la meme version avec les memes données mais j'obtiens les memes resultats .

Même en lançant rand('state',sum(clock)) entre les deux ?


Une commission d'enquête pour être efficace, ne doit compter que trois membres, dont deux sont absents. G. Clémenceau

Hors ligne

#18 Le 26/10/2007, à 09:45

laroche1

Re : précision resultat matlab

atta je ressaye ,


Bé j'ai lancé une premiere fois j'obtiens
ceci :

36061.4769	638.5272	19.4119	0	0	-11.7029	0	0	0	59311.6068	2524.1508	21.687

je lance la commande que tu m'as dit

et je relance une seconde fois

36061.4769	638.5272	19.4119	0	0	-11.7029	0	0	0	59311.6068	2524.1508	21.687

C'est pareil

Que me conseilleriez vous?? continuer sur une autre version plus recente ....?

Dernière modification par laroche1 (Le 26/10/2007, à 09:48)

Hors ligne

#19 Le 26/10/2007, à 09:49

Chessangel

Re : précision resultat matlab

Est-ce que tu pourrais m'envoyer les fichier .txt pour que j'essaye sur ma version (7.4) ? Mon adresse est jerome.prog<at>gmail.com.


Une commission d'enquête pour être efficace, ne doit compter que trois membres, dont deux sont absents. G. Clémenceau

Hors ligne

#20 Le 26/10/2007, à 09:51

Le Farfadet Spatial

Re : précision resultat matlab

Salut à tous !

laroche1 a écrit :

Oui Oui J'ai bien testé 2 fois le programme sur la meme version avec les memes données mais j'obtiens les memes resultats .

Les choses seront probablement différentes avec la ligne qu'a donné Chessangel :

rand('state', sum(clock));

Désolé, ça m'était sortie de la tête, j'utilise trop peu souvent MatLab pour ça.

   En tout cas, il y a une morale à cette histoire : avant d'accuser ton compilateur --- ici, ton interpréteur, à savoir MatLab, --- remet en cause ton code, puis ton algorithme. Les bogues de compilateurs (ou d'interpréteurs) arrivent, mais moins souvent que les erreurs d'algorithme ou de codage. Le bon ordre est celui-ci :

      1. Est-ce que je n'ai pas fait une erreur dans mon code ?

      2. Si la réponse à la première question est non, est-ce que mon algorithme est bon ?

      3. Si la réponse à la première question est non et celle à la deuxième oui, est-ce que mon compilateur (ou interpréteur) est bogué ?

      4. Si rien n'explique les réactions étranges du code, alors il faut voir si ce n'est pas le processeur qui est en cause.

   En l'occurrence, il n'y a pas d'erreur, mais l'algorithme employé explique les réactions de ton code.

   À bientôt.

                                                                                                                                            Le Farfadet Spatial

Hors ligne

#21 Le 26/10/2007, à 09:54

laroche1

Re : précision resultat matlab

je t'ai tout envoyé
Merci pour ton aide



petite précision

J'ai recupéré ce code que quelqu'un avait crée pour une version matlab x , le probleme c'est que cette personne n'est plus joignable
J'ai donc fait des modifications pour le faire marcher sous 6.5. Apparemment ça marche puisqu'avec son code et le mien j'obtiens les memes resultats sous la version 5.3
Mais son code ne marche pas sous 6.5

Dernière modification par laroche1 (Le 26/10/2007, à 09:56)

Hors ligne

#22 Le 26/10/2007, à 10:21

Chessangel

Re : précision resultat matlab

Ok, voici ce que j'obtiens sur la version 7.4

36062    638.52    19.413    0 0 -11.703 0 0 0    59312    2524.1    21.687

Donc les résultats m'ont l'air à première vue corrects.
Par contre, il est impératif de vérifier que ton changement de code n'a pas d'impact ! Parce que j'ai remarqué que ta matrice m est de dimension 4x44 après la lecture de Matlab, ce qui ne devrait pas être le cas, vu comment le code a été formulé dans sa version originale (cela devrait être un vecteur ligne (1x176)). Donc, il faut absolument vérifier que ta transformation

m=m.';
X0=[100000;10000;1000;0;0;10;0;0;0;100000;10000;1000;m(:)];

préserve les chiffres dans l'ordre désiré... Pour cela, il faut malheureusement bien comprendre le but de l'algorithme, ce qui n'est pas mon cas, n'étant pas du tout du domaine. Parce qu'à mon avis, il est possible que la différence entre tes deux résultats vienne de là (l'algorithme n'utilise pas de nombres aléatoires). Ou alors, c'est réellement un problème de précision, mais ça m'étonne beaucoup !

Dernière modification par Chessangel (Le 26/10/2007, à 10:22)


Une commission d'enquête pour être efficace, ne doit compter que trois membres, dont deux sont absents. G. Clémenceau

Hors ligne

#23 Le 26/10/2007, à 10:24

laroche1

Re : précision resultat matlab

mais avec son code d'origine , je n'obtiens pas les bons résultats!!! et logiquemement il fonctionne

Le souci quand je ressors X0 , je n'arrive pas à voir si les chiffres sont bien positionnés  car il met les resultats en 1E5

Dernière modification par laroche1 (Le 26/10/2007, à 10:27)

Hors ligne

#24 Le 26/10/2007, à 10:27

Chessangel

Re : précision resultat matlab

Non, d'après le code d'origine que tu m'as envoyé, le problème n'est pas d'obtenir les bons résultats, le problème est qu'il ne tourne pas : il plante parce que la matrice m, lue du fichier data.txt via la commande dlmread, n'a pas les bonnes dimensions...


Une commission d'enquête pour être efficace, ne doit compter que trois membres, dont deux sont absents. G. Clémenceau

Hors ligne

#25 Le 26/10/2007, à 10:29

laroche1

Re : précision resultat matlab

oui c'est sur il ne marche pas avec les versions recentes mais c bon avec une version 5.3 par contre le fichier data.txt d'origine (c'est le meme mais pas le meme format mais je ne comprends pas ...) je te l'envoie

Hors ligne