Fichier:Desommation gaussienne lorentzienne.svg
De testwiki
Aller à la navigation
Aller à la recherche
Taille de cet aperçu PNG pour ce fichier SVG : 610 × 460 pixels. Autres résolutions : 318 × 240 pixels | 637 × 480 pixels | 1 019 × 768 pixels | 1 280 × 965 pixels | 2 560 × 1 930 pixels.
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
| DescriptionDesommation gaussienne lorentzienne.svg |
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
| This media was created with Scilab, a free open-source software. Here is a listing of the Scilab source used to create this file. |
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 :
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.
Non linear regression to fit the curve with the sum of a lorentzian function and a gaussian function.
Éléments décrits dans ce fichier
dépeint
Valeur sans élément de Wikidata
8 novembre 2012
Historique du fichier
Cliquer sur une date et heure pour voir le fichier tel qu'il était à ce moment-là.
| Date et heure | Vignette | Dimensions | Utilisateur | Commentaire | |
|---|---|---|---|---|---|
| actuel | 2 mai 2019 à 22:11 | 610 × 460 (59 kio) | wikimediacommons>Cdang | half variance; rounded values |
Utilisation du fichier
La page suivante utilise ce fichier :
