2017-09-23 2 views
0

Je rencontre des problèmes sérieux en ajustant une fonction exponentielle (loi de Beer-Lambert) à mes données. La fonction de jeu d'outils d'optimisation que j'utilise produit de terribles crises:Problèmes correspondant à une fonction exponentielle

enter image description here

function [ Coefficients ] = fitting_new(Modified_Spectrum_Data,trajectory ) 

x_axis = trajectory; 
fun = @(x,x_axis) (x(1)*exp((-x(2))*x_axis)); 
start = [Modified_Spectrum_Data(1) 0.05]; 

nlm = nlinfit(x_axis,Modified_Spectrum_Data,fun,start,opts); 

Coefficients = nlm; 
end 

données:

Modified_Spectrum_Data = [1.11111111111111, 1.08784976353957, 1.06352170731165, 1.04099672033640, 1.02649723285838, 1.00423806910703, 0.994116452961827, 0.975928861361604, 0.963081773802984, 0.953191520906905, 0.940636278551651, 0.930360007604054, 0.922259178548511, 0.916659345499171, 0.909149956799775, 0.901241601559703, 0.895375741449218, 0.893308346234150, 0.887985459843162, 0.884657500398024, 0.883852990694089, 0.877158499678129, 0.874817832833850, 0.875428444059047, 0.873170360623947, 0.871461252768665, 0.867913776631497, 0.866459074988087, 0.863819528471106, 0.863228815347816 ,0.864369045426273 ,0.860602502500599, 0.862653463581049, 0.861169231463016, 0.858658616425390, 0.864588421841755, 0.858668693409622, 0.857993365648639] 

trajectory = [0.0043, 0.9996, 2.0007, 2.9994, 3.9996, 4.9994, 5.9981, 6.9978, 7.9997, 8.9992, 10.0007, 10.9993, 11.9994, 12.9992, 14.0001, 14.9968, 15.9972, 16.9996, 17.9996, 18.999, 19.9992, 20.9996, 21.9994, 23.0003, 23.9992, 24.999, 25.9987, 26.9986, 27.999, 28.9991, 29.999, 30.9987, 31.9976, 32.9979, 33.9983, 34.9988, 35.999, 36.9991] 

J'ai essayé d'utiliser des fonctions de montage multiples différentes et de déconner avec les options, mais ils ne semblent pas faire trop de différence. De plus, j'ai essayé de changer l'estimation initiale, mais encore une fois cela ne fait pas vraiment de différence.

Excel semble être en mesure d'adapter les données parfaitement bien, mais j'ai 900 lignes de données que je veux adapter donc le faire dans Excel n'est pas possible.

Toute aide serait grandement appréciée, merci.

Répondre

1

Vous voudrez utiliser le cftool. Vos données semblent suivre une loi de puissance. Choisissez ensuite "Données spectrales modifiées" comme axe x et "Trajectoire" comme y. Sélectionnez "Power" dans le menu déroulant vers le haut de l'interface graphique.

Modified_Spectrum_Data = [1.11111111111111, 1.08784976353957, 1.06352170731165, 1.04099672033640, 1.02649723285838, 1.00423806910703, 0.994116452961827, 0.975928861361604, 0.963081773802984, 0.953191520906905, 0.940636278551651, 0.930360007604054, 0.922259178548511, 0.916659345499171, 0.909149956799775, 0.901241601559703, 0.895375741449218, 0.893308346234150, 0.887985459843162, 0.884657500398024, 0.883852990694089, 0.877158499678129, 0.874817832833850, 0.875428444059047, 0.873170360623947, 0.871461252768665, 0.867913776631497, 0.866459074988087, 0.863819528471106, 0.863228815347816 ,0.864369045426273 ,0.860602502500599, 0.862653463581049, 0.861169231463016, 0.858658616425390, 0.864588421841755, 0.858668693409622, 0.857993365648639] 

trajectory = [0.0043, 0.9996, 2.0007, 2.9994, 3.9996, 4.9994, 5.9981, 6.9978, 7.9997, 8.9992, 10.0007, 10.9993, 11.9994, 12.9992, 14.0001, 14.9968, 15.9972, 16.9996, 17.9996, 18.999, 19.9992, 20.9996, 21.9994, 23.0003, 23.9992, 24.999, 25.9987, 26.9986, 27.999, 28.9991, 29.999, 30.9987, 31.9976, 32.9979, 33.9983, 34.9988, 35.999, 36.9991] 

cftool 

Screenshot: enter image description here

Pour plus d'informations sur l'ajustement de la courbe (cftool), voir: https://www.mathworks.com/help/curvefit/curvefitting-app.html

+0

j'ai vu des améliorations dans l'ajustement en ajoutant un terme de décalage, ici qui ferait l'une équation * x^b + décalage. Si cela a du sens pour votre cas particulier, veuillez envisager de l'essayer. –