File:Regression pic assymetrique.gif

Regression_pic_assymetrique.gif (610 × 460 像素,檔案大小:22 KB,MIME 類型:image/gif、​循環、​10 畫格、​5.0秒)


摘要

描述
English: Successive steps of Gauss-Newton regression, with variable damping factor α, to fit a dissymetrical noisy peak. Pictures created with Scilab, animated with The Gimp.
Français : Étapes successives d'une régression de Gauss-Newton, avec facteur d'amortissement α variable, pour ajuster un pic assymétrique. Images créées avec Scilab ; animation créée avec The Gimp.
日期
來源 自己的作品
作者 Cdang (Christophe Dang Ngoc Chan)

Scilab source

Le fichier de données et celui de fonctions communes sont identiques à ceux de File:Regression pic gaussien dissymetrique bruite.svg.

// **********
// Constantes et initialisation
// **********

clear;
clf;

chdir('monchemin/')

// Paramètres de Newton-Raphson
precision = 1e-7; // condition d'arrêt
itermax = 60; // idem
 
// Précision de la linéarisation approchée
epsilon = 1e-6;
 
// **********
// Fonctions
// **********
 
exec('fonctions_communes.sce', -1)
 
function [e] = res(Yexp, Ycal)
    e = sqrt(sum((Yexp-Ycal).^2));
endfunction
 
function [A, R] = gaussnewton(f, X, Yexp, A0, imax, epsilon)
    // A : jeu de paramètres optimisé par régression (vecteur)
    // R : liste des facteurs de qualité de la régression
    // pour chaque étape (vecteur)
    // X : variable explicative (vecteur)
    // Yexp : variable expliquée, valeurs mesurées (vecteur)
    // A0 : paramètres d'initialisation du modèle (vecteur)
    // epsilon : valeur d'arrêt (scalaire)
    k = 1; // facteur d'amortissement initial, <=1,
    // évite la divergence 
    n = size(X,'*');
    e0 = sqrt(sum(Yexp.^2)); // normalisation du facteur de qualité
    Ycal = f(A0, X); // modèle initial
    R(1) = res(Yexp, Ycal)/e0; // facteur de qualité initial
    disp('i = 1 ; k = 1 ; R = '+string(R(1))) // affichage param initiaux
    i = 1;
    B = A0;
        subplot(2,1,1)
        plot2d(X, Yexp, rect=[-3, -2, 3, 12])
        plot(X, Ycal, "-r")
        xstring(-2.8, -1.5, string(B))
        subplot(2,1,2)
        plot2d(R, rect=[1, 0, 10, 1])
        xstring(1.2, 0.1, 'α = '+string(k)+' ; R = '+string(R(i)))
        nom = 'picassym'+string(i)+'.gif';
        xs2gif(0,nom)
    drapeau = %t;
    while (i < imax) & drapeau // teste la convergence globale
        i = i+1;
        deltay = Yexp - Ycal;
        J = linearisation_approchee(f, B, X, epsilon); // matrice jacobienne
        tJ = J'; // transposée
        deltap0 = inv((tJ*J))*tJ*deltay;
        drapeau2 = %t // pour une 1re exécution
        while drapeau2 & (k>0.1) // teste la divergence sur 1 étape
            deltap = k*deltap0;
            Bnouveau = B + deltap';
            Ycal = f(Bnouveau, X);
            R(i) = res(Yexp, Ycal)/e0;
            drapeau2 = (R(i) >= R(i-1)) // vrai si diverge
            if drapeau2 then k = k*0.75; // atténue si diverge
            else k0 = k; // pour affichage de la valeur
                k = (1 + k)/2; // réduit l'atténuation si converge
            end
        end
        B = Bnouveau;
        drapeau = abs(R(i-1) - R(i)) > epsilon
        clf;
        subplot(2,1,1)
        plot2d(X, Yexp, rect=[-3, -2, 3, 12])
        plot(X, Ycal, "-r")
        xstring(-2.8, -1.5, string(B))
        subplot(2,1,2)
        plot2d(R, rect=[1, 0, 10, 1])
        xstring(1.2, 0.1, 'α = '+string(k0)+' ; R = '+string(R(i)))
        nom = 'picassym'+string(i)+'.gif';
        xs2gif(0,nom)
//        disp('i = '+string(i)+' ; k = '+string(k0)+' ; R = '+string(R(i)))
    end
    A = B;
endfunction
 
// **********
// Programme principal
// **********
 
// lecture des données
donnees = read('pic_gauss_dissym_bruite.txt',-1,2);
 
// carcatéristiques des données
Xdef = donnees(:,1);
Ydef = donnees(:,2);
// Ainit = [-0.03, 9.7, 8*((0.84 - 0.03)/2.35)^2, 8*((0.45 + 0.03)/2.35)^2];
Ainit = [1, 1, 1, 1];

// Régression
tic();
[Aopt, Rnr] =...
    gaussnewton(gauss_dissym, Xdef, Ydef,...
    Ainit, itermax, precision)
t = toc();

// Courbe calculée
 
Yopt = gauss_dissym(Aopt, Xdef);
 
// Affichage
 
print(%io(2),Ainit)
print(%io(2),Aopt)
print(%io(2),t)
 
clf
 
subplot(2,1,1)
plot(Xdef, Ydef, "-b")
plot(Xdef, Yopt, "-r")
 
subplot(2,1,2)
plot(Rnr)

授權條款

我,本作品的著作權持有者,決定用以下授權條款發佈本作品:
GNU head 已授權您依據自由軟體基金會發行的無固定段落、封面文字和封底文字GNU自由文件授權條款1.2版或任意後續版本,對本檔進行複製、傳播和/或修改。該協議的副本列在GNU自由文件授權條款中。
w:zh:創用CC
姓名標示 相同方式分享
此檔案採用創用CC 姓名標示-相同方式分享 3.0 未在地化版本2.5 通用版2.0 通用版以及1.0 通用版授權條款。
您可以自由:
  • 分享 – 複製、發佈和傳播本作品
  • 重新修改 – 創作演繹作品
惟需遵照下列條件:
  • 姓名標示 – 您必須指名出正確的製作者,和提供授權條款的連結,以及表示是否有對內容上做出變更。您可以用任何合理的方式來行動,但不得以任何方式表明授權條款是對您許可或是由您所使用。
  • 相同方式分享 – 如果您利用本素材進行再混合、轉換或創作,您必須基於如同原先的相同或兼容的條款,來分布您的貢獻成品。
您可以選擇您需要的授權條款。

說明

添加單行說明來描述出檔案所代表的內容

在此檔案描寫的項目

描繪內容

檔案歷史

點選日期/時間以檢視該時間的檔案版本。

日期/時間縮⁠圖尺寸使用者備⁠註
目前2012年12月5日 (三) 13:13於 2012年12月5日 (三) 13:13 版本的縮圖610 × 460(22 KB)Cdang{{Information |Description ={{en|1=alpha (damping factor) value corrected}} |Source ={{own}} |Author =Cdang |Date = |Permission = |other_versions = }}
2012年12月5日 (三) 13:09於 2012年12月5日 (三) 13:09 版本的縮圖610 × 460(22 KB)Cdang{{Information |Description ={{en|1=Successive steps of Gauss-Newton regression, with variable damping factor α, to fit a dissymetrical noisy peak. Pictures created with Scilab, animated with The Gimp.}} {{fr|1=Étapes successives d'une régression...

下列頁面有用到此檔案:

全域檔案使用狀況

以下其他 wiki 使用了這個檔案:

詮釋資料