Régression non linéaire
%-------------------------------------------------- % régression non linéaire par Cramer % d'aprés 'Apprendre et maitriser Matlab' %--------------------------------------------------- % approximation lnyi = ln a + (b*xi) % fi = teta1 + teta2*xi % % | somme(fi) somme(xi) | % | somme(fi.xi) somme(xi²) | % teta1 = --------------------------- % | n somme(xi) | % | somme(xi) somme(xi²) | % % | n somme(yi) | % | somme(xi) somme(xi.yi) | % teta1 = --------------------------- % | n somme(xi) | % | somme(xi) somme(xi²) | % clear all; echo on; %régression non linéaire % ex : x =[0.1 0.2 0.5 1.0 1.5 1.9 2.0 3.0 4.0 6.0]; % y =[0.95 0.89 0.79 0.7 0.63 0.58 0.56 0.45 0.36 0.28]; echo off; x =[0.1 0.2 0.5 1.0 1.5 1.9 2.0 3.0 4.0 6.0]; y =[0.95 0.89 0.79 0.7 0.63 0.58 0.56 0.45 0.36 0.28]; %matrice H n=length(x); f=log(y); % teta num_teta1=det([sum(f) sum(x);sum(x.*f) sum(x.^2)]); % .* = élément par élément den_teta1=det([n sum(x);sum(x) sum(x.^2)]); teta1=num_teta1/den_teta1; num_teta2=det([n sum(f);sum(x) sum(x.*f)]); % .* = élément par élément den_teta2=den_teta1; teta2=num_teta2/den_teta2; %coefficients a=exp(teta1); b=teta2; ym=a*exp(b*x); %modèle exponentiel clf; plot(x,y,'+'); hold on; plot(x,y); plot(x,ym,'r'); posX1=1; posX2=5; text(x(posX1),y(posX1),'mesures'); text(x(posX2),ym(posX2),'modèle'); str=sprintf('régression exponentielle (Cramer)'); str1=sprintf(' ym=%0.5g*exp(%0.5g*x)',a,b ); str2=strcat(str,str1); title(str2); grid;
Dernière Modification : Lun 19 Mars 2007 13:28
Copyright © 1999-2010 Jean-Paul Molina Tous droits réservés.