Fichier:Desommation gaussienne lorentzienne.svg

De testwiki
Aller à la navigation Aller à la recherche
Fichier d’origine (Fichier SVG, nominalement de 610 × 460 pixels, taille : 59 kio)

Ce fichier provient de Wikimedia Commons et peut être utilisé par d'autres projets. Sa description sur sa page de description est affichée ci-dessous.

Description

Description
English: Non linear regression to fit the curve with the sum of a lorentzian function and a gaussian function.
Français : Régression non linéaire pour ajuster la courbe avec la somme d'une fonction lorentzienne et d'une fonction gaussienne.
Date
Source Travail personnel
Auteur Cdang

Scilab source

English: English version by default.
Français : Version française, si les préférences de votre compte sont réglées (voir Special:Preferences).


Fichier fonctions_gaussien_lorentzien.sci : fonction étudiée (bibliothèque).

// *************
// * Fonctions *
// *************

// Fonction gaussienne centrée sur 0

function [y] = gauss(A, x)
    // A(1) : hauteur de pic
    // A(2) : "largeur" du pic
    y = A(1)*exp(-x.*x/A(2));
endfunction

// Fonction lorentzienne centrée sur 0

function [y] = lorentz(A, x)
    // A(1) : hauteur de pic
    // A(2) : "largeur" du pic
    foo = A(2)*A(2);
    y = foo*A(1)./(foo + 4*x.*x);
endfunction

function [y] = profil(A, x)
    // A(1) : hauteur de pic lorentzien
    // A(2) : "largeur" du pic lorentzien
    // A(3) : hauteur de pic gaussien
    // A(4) : "largeur" du pic gaussien
    L = A(1:2);
    G = A(3:4);
    y = lorentz(L, x) + gauss(G, x);
endfunction

Fichier generateur_pic_gaussien_lorentzien.sce : crée un nuage de points et l'enregistre dans le fichier pic_gaussien_lorentzien_bruite.txt.

chdir("/monChemin/");

exec("fonctions_gaussien_lorentzien.sci");

// **************
// * Constantes *
// **************

paramlorentz(1) = 5; // hauteur de la courbe lorentzienne
paramlorentz(2) = 2; // largeur de la courbe lorentzienne
paramgauss(1) = 10; // hauteur de la courbe gaussienne
paramgauss(2) = 3; // largeur de la courbe gaussienne
var=0.5; // variance de la loi normale pour le bruit

nbpts = 100 // nombre de points
demielargeur = max(3*paramgauss(2), 3*paramlorentz(2)) // pour intervalle x
pas = 2*demielargeur/nbpts;

// ******************
// * Initialisation *
// ******************

X = zeros(nbpts,1);
Y = zeros(nbpts,1);

// ***********************
// * Programme principal *
// ***********************

// Nuage de points

i=(1:nbpts)';
X = pas*i - demielargeur;
Y = profil([paramlorentz;paramgauss], X) + var*rand(X, "normal");

// Enregistrement

csvWrite([X, Y], "pic_gaussien_lorentzien_bruite.txt")

Fichier desommation_gauss_lorentz.sce : traite les données.

// ******************
// * Initialisation *
// ******************

clf;
chdir("/monChemin/");

exec("fonctions_gaussien_lorentzien.sci");

// **************
// * Constantes *
// **************

Ainit = [1;1;1;1]; // paramètres initiaux du modèle

// *************
// * Fonctions *
// *************

// Résidus

function [e] = residus(A, x, y)
    e = profil(A, x) - y;
endfunction

// ***********************
// * Programme principal *
// ***********************

// Lecture des données

donnees = csvRead("pic_gaussien_lorentzien_bruite.txt")
X = donnees(:,1);
Y = donnees(:,2);

// Traitement des données

[S, Aopt] = leastsq(list(residus, X, Y), Ainit)
Yopt = profil(Aopt, X);
YLopt = lorentz(Aopt(1:2),X);
YGopt = gauss(Aopt(3:4),X);

// Affichage

plot(X, Yopt, "-r")
plot(X, YLopt, "-c")
plot(X, YGopt, "-g")
plot(X, Y, "+b")

hauteur = max(Y);
xmin = min(X)

xstring(xmin, hauteur*0.95,...
 "lorentzienne : Al = "+string(0.01*round(100*Aopt(1)))...
+" ; Hl = "+string(0.01*round(100*Aopt(2))))
xstring(xmin, 3*hauteur/4,...
 "gaussienne : Ag = "+string(0.01*round(100*Aopt(3)))...
+" ; Hg = "+string(0.01*round(100*Aopt(4))))
xstring(xmin, hauteur/2,...
 "variance : S = "+string(0.01*round(100*S)))

Conditions d’utilisation

Moi, en tant que détenteur des droits d’auteur sur cette œuvre, je la publie sous la licence suivante :
w:fr:Creative Commons
paternité partage à l’identique
Ce fichier est disponible selon les termes de la licence Creative Commons Attribution – Partage dans les Mêmes Conditions 3.0 Non Transposé.
Vous êtes libre :
  • de partager – de copier, distribuer et transmettre cette œuvre
  • d’adapter – de modifier cette œuvre
Sous les conditions suivantes :
  • paternité – Vous devez donner les informations appropriées concernant l'auteur, fournir un lien vers la licence et indiquer si des modifications ont été faites. Vous pouvez faire cela par tout moyen raisonnable, mais en aucune façon suggérant que l’auteur vous soutient ou approuve l’utilisation que vous en faites.
  • partage à l’identique – Si vous modifiez, transformez ou vous basez sur cet élément, vous devez distribuer votre contribution sous une license identique ou compatible à celle de l’original.

Légendes

Régression non linéaire pour ajuster la courbe avec la somme d'une fonction lorentzienne et d'une fonction gaussienne.

Éléments décrits dans ce fichier

dépeint

Historique du fichier

Cliquer sur une date et heure pour voir le fichier tel qu'il était à ce moment-là.

Date et heureVignetteDimensionsUtilisateurCommentaire
actuel2 mai 2019 à 22:11Vignette pour la version du 2 mai 2019 à 22:11610 × 460 (59 kio)wikimediacommons>Cdanghalf variance; rounded values

La page suivante utilise ce fichier :