Bonjour,
J'explique mon souci : L'objectif est que je puisse fitter des données expérimentales (Transmission et Réflectivité) en variant des paramètres optiques (PO) sur un modèle défini. J'ai réussi à faire fonctionner l'algorithme Levenberg-Marquardt sur le programme Scilab. Mais celui-ci n'apporter pas l'efficacité que j'ai eu sur Matlab. Alors je souhaite transposer ce code Scilab sur Matlab mais je coince sur un détail concernant les entrées nécessaires à la fonction lsqcurvefit spécifique à Matlab.
Voici le fonctionnement du code Scilab (tout est codé sur le même fichier) :
En fait ce qui nous intéresse fortement est le vecteur asol qui contient les paramètres optiques optimisés.
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 function [R,T]=Modele_Dispersion(a,x) % Explications du contenu de cette fonction % Elle a comme entrée : % a = les paramètres optiques (la quantité varie en fonction du modèle choisi, je peux en avoir 6, 10, 12 ou plus, dans ce cas-là j'ai que 6) % x = le spectre défini % Elle a comme sortie : % R = la réflectivité sur le spectre défini (ici x) % T = la transmission sur le spectre défini (ici x) endfunction % Extraction des données expérimentales à fitter [d]=read('Fichier_donnees.txt',-1,3) xdata=d(:,1); Tdata=d(:,2); Rdata=d(:,3); % Partie comparaison entre données expérimentales et données simulées, l'objectif est de minimiser err function err=fModele(param,m) a = param; [R,T] = Modele_Dispersion(a,xdata); err=(Rdata-R').^2+(Tdata-T').^2; endfunction % Vous remarquerez que cette partie permet de fitter la courbe R et la courbe T en même temps et à partir des mêmes paramètres optiques % Valeurs de départ ainit=[1,2,3,4,5,6]; [asol,v,info]=lsqrsolve(ainit,fModele,size(xdata,1)) % Affichage des résultats
Côté Matlab, je suis coincé car j'ai la fonction lsqcurvefit. En regardant sa description je vois qu'il a besoin comme entrées :
lsqcurvefit(fun,x0,xdata,ydata)
Dans mon cas :
fun = fModele
x0 = ainit
xdata = xi
ydata : là je suis perdu car j'ai l'impression qu'il accepte qu'un vecteur à une ligne (soit R ou T) et non à deux lignes (R et T), j'aurai bien aimé mettre err mais je ne vois pas trop comment le mettre. Est-ce que je suis la même logique Scilab sur Matlab (c'est à dire écrire toutes les fonctions et leurs agencements dans le même fichier) ?
Je vous remercie beaucoup d'avance pour vos conseils !
Partager