Bonjour,
je cherche a créer un programme fit non-linéaire de forme sigmoïdale.
Après avoir trouvé une toolbox gratuite (ezyfit) http://www.fast.u-psud.fr/ezyfit/ qui ne me donnait pas entière satisfaction (je sais pas si beaucoup ont des retours sur cette toolbox mais certains fits étaient très fantaisistes),comme j'ai un certain nombre de fits à faire, je ne peux pas me permettre de chercher des paramètres manuellement afin de les corriger, mais j'utilise certainement mal ses capacités.
je n'ai pas non plus l'accès à la statistic toolbox
Donc j'ai décidé de me lancer dans le codage d'un petit programme de fit à l'aide de ce tutoriel trouvé sur internet http://nte.mines-albi.fr/MATLAB/co/uc_NonLineaire.html
une fois le tutoriel appliqué à mes données j'obtiens
ce programme en 3 parties:
partie 1
partie 2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 %%%%%%%%%%%%%%%%%% % fit perso 1 % %%%%%%%%%%%%%%%%%% %forme de la fonction à fitter function y = fit (a, x) y = a(1)/(a(2)+(exp(a(3)-(a(4)*x))))
partie 3
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 %%%%%%%%%%%%%%%%% % fit perso 2 % %%%%%%%%%%%%%%%%% function out = F(a) global xi yi out = sum ((yi - fit(a,xi)).^2);
et (hélas
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 %%%%%%%%%%%%%%%%% % fit perso 3 % %%%%%%%%%%%%%%%%% % Pour passer les points expérimentaux à F global xi yi % Définition des points expérimentaux % (en général chargés depuis un fichier xi = mxttdetectc(1,:) % correspond au vecteur ligne: 0 50 70 90 110 130 150 200 250 300 350 yi = mxttdetectc(2,:) % correspond au vecteur ligne: 0.1111 0 0 0.3750 0.4444 0.8000 0.8889 1.0000 1.0000 1.0000 % a0 = [1 1 1 1] % paramètres initiaux % Appel de l'optimiseur. Attention aux '' autour de F asol = fminsearch ( 'F', a0); % Faire une courbe qui présente les points expérimentaux et le fit plot (xi, yi, '*', xi, fit(asol, xi))) ce message d'erreur:
Merci a ceux qui prendront la peine de lire cet immonde pavé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 ??? Error using ==> mrdivide Matrix dimensions must agree. Error in ==> fit at 5 y = a(1)/(a(2)+(exp(a(3)-(a(4)*x)))) Error in ==> F at 6 out = sum ( (yi - fit(a,xi)).^2 ); Error in ==> fminsearch at 175 fv(:,1) = funfcn(x,varargin{:});
(si ça se trouve c'est juste une petit erreur)
(sinon même si c'est hors sujet,si quelqu'un a une solution pour faire le fit sous R,je prends aussi)
Partager