⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newton.m

📁 optimisation中的牛顿法
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                         TP1 Optimisation et commande                                     %
%          Recherche d'optimum--------Methode Newton + Moindres Carrees                    %
%          Programmation par   Nicolas MARTIN  et  Ning QU                                 %
%          Date: 11/10/2007                                                                %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
close all
clc
%methode de Newton et moindre carree
%chargement des donnees
load('granul');

%valeur initiale
%estimation
a1=10;a2=8;
mu1=450;mu2=698;sig1=70;sig2=74;
teta=[mu1;mu2;sig1;sig2];
epsilon=0.0001;
k=2;
G=[2;2;2;2];
i=0;

% tableau d'evolution
evo_teta=[];
evo_T=[];

%boucle d'iteration
while norm(G)>epsilon
    i=i+1; %incremente le nombre d'iteration
    % Calcul du signal
    ym=a1*exp(-(x-mu1).^2/sig1^2)+ a2*exp(-(x-mu2).^2/sig2^2);
    e=y-ym; % erreur
    % Calcul du Gradient
    G1=-a1/sig1^2*e'*((x-mu1).*exp(-(x-mu1).^2/sig1^2));
    G2=-a2/sig2^2*e'*((x-mu2).*exp(-(x-mu2).^2/sig2^2));
    G3=-a1/sig1^3*e'*((x-mu1).^2.*exp(-(x-mu1).^2/sig1^2));
    G4=-a2/sig2^3*e'*((x-mu2).^2.*exp(-(x-mu2).^2/sig2^2));

    % Calcul de la derive seconde
    H1=4*a1^2/sig1^4*(((x-mu1).^2)'*exp(-(x-mu1).^2/sig1^2).^2);
    H2=4*a2^2/sig2^4*(((x-mu2).^2)'*exp(-(x-mu2).^2/sig2^2).^2);
    H3=4*a1^2/sig1^6*((x-mu1).^4)'*exp(-(x-mu1).^2/sig1^2).^2;
    H4=4*a2^2/sig2^6*((x-mu2).^4)'*exp(-(x-mu2).^2/sig2^2).^2;

    G=[G1;G2;G3;G4]; % vecteur
    H=[H1 0 0 0;0 H2 0 0;0 0 H3 0;0 0 0 H4]; %matrice Hessien

    %Calcul des nouvelle valeur
    teta=teta - 0.5*inv(H)*G;
    mu1=teta(1);
    mu2=teta(2);
    sig1=teta(3);
    sig2=teta(4);
    evo_teta(i,:)=teta';

    %calcul valeur moindre carree
    E1=exp(-(x-teta(1)).^2/teta(3)^2);
    E2=exp(-(x-teta(2)).^2/teta(4)^2);
    X=[E1 E2];
    T= inv(X'*X)*X'*y;
    a1=T(1);
    a2=T(2);
    evo_T(i,:)=T';
end
teta,i,T
%signal final
ym=a1*exp(-(x-mu1).^2/sig1^2)+ a2*exp(-(x-mu2).^2/sig2^2);
%signal bruite estime
ymb=a1*exp(-(x-mu1).^2/sig1^2)+ a2*exp(-(x-mu2).^2/sig2^2)+rand(size(x))/20;
%courbe bruite
plot(x,y,'*')
hold on
%courbe estime
plot(x,ym,'r')
% Courbe bruite estime
hold on
plot(x,ymb,'g')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -