$$$$ AJUSTE NOTICE CHAT 11/09/12 21:15:05 7124 DATE 11/09/12 procedure AJUSTE Voir aussi : MOCA LEVM ---------------- Q P = AJUSTE TAB1 ; TAB1.'X' (TAB1.'PMIN') TAB1.'F' (TAB1.'PMAX') TAB1.'K' (TAB1.'PRECISION') TAB1.'L' (TAB1.'MXTER') (TAB1.'POIDS') (TAB1.'MESSAGES') (TAB1.'IMPRESSION') Objet : -------- Soit une fonction F(x,y,z...,p1,..,pk) mise sous la forme : F(x,p) = q1 * f1(x,y,z,.,p1,..,pk) + q2 * f2(x,y,z,.,p1,..,pk) + ... + ql * fl(x,y,z,.,p1,..,pk) + g(x,y,z,.,p1,..,pk) qi (i=1,l) sont les parametres lineaires. pj (j=1,k) sont les parametres non lineaires. La procedure ajuste ces differents parametres afin que la fonction passe au mieux dans une serie de N couples ( (x,y,z,...) ; Fdi(x,y,z,..) ) fournie par l' utilisateur. En fait, on cherche a minimiser la fonction : G = [ (poids(i) * ( F(x,p) - Fdi(x,y,z..) )**2 ] somme sur i=1,N Donnees : ---------- TAB1.'X' : TABLE indicee par des entiers i=1,N qui contient le(s) LISTREEL(s) x,y,z,..... TAB1.'F' : valeurs a caler F(x,y,z...) (LISTREEL). TAB1.'K' : nombre de parametres non lineaires (ENTIER). TAB1.'L' : nombre de parametres lineaires (ENTIER). TAB1.'MESSAGES' : niveau de message (defaut=0 : rien) 1 -> resultats, 2 -> iterations TAB1.'IMPRESSION' : frequence des impressions si MESSAGES=2 (type ENTIER, defaut : toutes les 20 iterations). TAB1.'PMIN' : valeurs minimum de p (LISTREEL, obligatoire si K > 0). TAB1.'PMAX' : valeurs maximum de p (LISTREEL, obligatoire si K > 0). TAB1.'PRECISION' : (LISTREEL, utile si K>0) : critere de precision de convergence pour les K parametres non lineaires (defaut 1.e-7) TAB1.'MXTER' : nombre maximum d'iterations (ENTIER, utile si K>1, defaut=100). TAB1.'POIDS' : valeurs de poids a affecter a chacun des points de mesure fournis. (LISTREEL, defaut=1.) TAB1.'NOM_FCT': nom de la procedure qui calcule les fi(x,p) et g(x,p) (MOT, defaut='FCT'). TAB1.'NOM_DERI': nom de la procedure qui calcule les derivees de fi(x,p) et g(x,p) par rapport aux p_j (MOT, defaut='DERI'). Sortie : -------- Q et P sont des LISTREELs contenant les parametres qi et pi. Utilisation : -------------- Deux procedures sont a creer par l'utilisateur. - Procedure FCT: Son but est de calculer la fonction a ajuster connaissant les valeurs des abscisses x,y,. et ceci pour un jeu de parametres p donne. En fait, on demande de calculer les fonctions f1,f2,...,fl et la fonction g. Pour chaque fonction fi, la procedure calcule autant de valeurs qu'il y a de valeurs dans x,y,z .. Le resultat doit etre mis sous la forme d'un objet TABLE. tbfonc = FCT xtab p; En argument FCT recevra la table TAB1.'X', ainsi que le LISTREEL p qui contient les valeurs courantes de P. La table doit se mettre sous la forme suivante: tbfonc.'F'.i = listreel des valeurs de fi tbfonc.'G' = listreel des valeurs de g Les parametres lineaires qi n'ont pas a etre ecrit. - Procedure DERI: Elle construit une table de listreels contenant les valeurs des fonctions f1,f2,...,fl et g derivees par rapport aux parametres non lineaires pj pour chaque valeur de x,y,z.. et de p. tbderi = DERI xtab p; En argument DERI recevra la table TAB1.'X', ainsi que le LISTREEL p. La table doit etre cree de la façon suivante: tbderi.'F'. j . i = listreel des valeurs de dfi/dpj tbderi.'G'. j = listreel des valeurs de dg/dpj Remarques : ----------- - Les abscisses etant dans un LISTRÉEL, il faut que les constantes soient exprimees, dans les procedures FCT et DERI, sous forme de LISTRÉEL. ex: f1(x)=x+1 donne f1(x)=x+(prog N*1); N etant la dimension de x. - Attention, les fonctions sinusoidales ont pour operandes des degres. - on peut creer des procedures de nom differents de ceux par defaut en completant les indices 'NOM_FCT' et 'NOM_DERI'. Bien faire preceder le nom de la procedure par l'operateur 'MOT'. - exemples dans : ajuste1.dgibi ajuste2.dgibi identifi.dgibi
© Cast3M 2003 - Tous droits réservés.
Mentions légales