Bonjour à toutes et à tous,
Je fais de temps en temps des petits programmes d'ajustement de paramètres afin que la courbe théorique colle au mieux à la courbe expérimentale. J'utilise habituellement la fonction "lsqrsolve". Je tiens à bien signaler que ce n'est pas la première fois que j'utilise cette fonction qui a bien bossé dans certaines situations. Mais là ça ne fonctionne pas du tout et je ne comprends pas pourquoi .
J'ai regardé le diagnostic (info = 4). Ça signifie d'après le site Scilab et la version supportée (6.1.0) : "iteration is not making good progress." Effectivement c'est bien le problème puisque les paramètres solutions (de sortie de lsqrsolve) sont les mêmes que ceux d'entrée. Je ne vois pas comment ça peut produire cela...
Le fonctionnement du modèle à ajuster est 3 pics gaussiennes dont les 3 paramètres (position, intensité et "largeur") de chacun sont ajustables donc ça nous fait 9 paramètres à ajuster (j'ai connu plus pire que ça ). Ensuite à la fin du modèle on fait la somme des trois pics afin que ça forme qu'un seul signal (la somme des trois pics gaussiennes tout simplement).
J'ai essayé de varier un peu les paramètres de départ. Ça ne fait rien :-/
J'ai mis le code ici :
Je vous ai mis aussi les data expérimentaux (du fameux fichier "221.txt") :
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 ///////////////////////////////////////////////////////////////////// //PARAMETRES A INSERER PAR L'UTILISATEUR // Nom du fichier à ajuster nomfichier='221.txt'; // Correction du spectre xcor=2; // Correction de l'intensité Icor=-10000; ///////////////////////////////////////////////////////////////////// // FONCTION GENERATEUR DES PICS XPS D'O1S function [I]=xpso1s(a,x) // Normalement le vecteur a est décomposé de : // a(1) = Position du pic OI // a(2) = Largeur du pic OI // a(3) = Intensité du pic OI // a(4) = Position du pic OII // a(5) = Largeur du pic OII // a(6) = Intensité du pic OII // a(7) = Position du pic OIII // a(8) = Largeur du pic OIII // a(9) = Intensité du pic OIII // Génération du pic OI situé à 530 eV OI=a(3)*(1/(a(2)*(2*%pi)^0.5))*exp(-((x-a(1)).^2)./(2*a(2)^2)); // Génération du pic OII situé à 531 eV OII=a(6)*(1/(a(5)*(2*%pi)^0.5))*exp(-((x-a(4)).^2)./(2*a(5)^2)); // Génération du pic OIII situé à 532 eV OIII=a(9)*(1/(a(8)*(2*%pi)^0.5))*exp(-((x-a(7)).^2)./(2*a(8)^2)); // Génération du spectre O1s I=OI+OII+OIII; endfunction ///////////////////////////////////////////////////////////////////// // FONCTION EXTRACTION DES DONNES A FITTER // Extraction des data XPS (energie, intensité) [d]=read(nomfichier,-1,2); xdata=d(:,1); Idata=d(:,2); // Correction du spectre xdata=xdata+xcor; // Correction de l'intensité du signal Idata=Idata+Icor; ///////////////////////////////////////////////////////////////////// // FONCTION OPTIMISATION PAR LEVEMBERG-MARQUARDT // Mise en place de la fonction de calcul des écarts (err), nécessaire à l'optimisation function err=fxpso1s(param,xdata) a=param; [I]=xpso1s(a,xdata); err=(Idata-I).^2 ; endfunction // Valeurs de départ ainit=[530;0.9;7000;531;0.3;6000;532;0.8;8500]; // La fonction d'optimisation [asol,v,info]=lsqrsolve(ainit,fxpso1s,size(xdata,1)) ///////////////////////////////////////////////////////////////////// // FONCTION AFFICHAGE DES COURBES disp(asol) plot(xdata,Idata,'ko') p=get("hdl"); p.children.thickness=3 [Isol]=xpso1s(asol,xdata); plot(xdata,Isol) p=get("hdl"); p.children.thickness=3
Je vous remercie d'avance !
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 523 10415.625 523.4 10365.625 523.8 10153.125 524.2 10315.625 524.6 10225 525 10171.875 525.4 9975 525.8 10631.25 526.2 10478.125 526.6 10746.875 527 11065.625 527.4 12240.625 527.8 15196.875 528.2 18731.25 528.6 19803.125 529 17946.875 529.4 17581.25 529.8 17681.25 530.2 17678.125 530.6 15990.625 531 13806.25 531.4 12781.25 531.8 11431.25 532.2 11265.625 532.6 10709.375 533 10353.125 533.4 10250 533.8 10446.875 534.2 10296.875 534.6 9956.25 535 10584.375 535.4 10484.375 535.8 10471.875 536.2 10528.125 536.6 10787.5 537 10696.875 537.4 10928.125 537.8 10750 538.2 10709.375 538.6 11112.5
Partager