1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Estimation des paramètres par méthode écart type minimum %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
close all;
clc;
N=input('Entrez le nombre de tirages N voulus : ');
K=3;
% -----------------------------------
% Creation d'une courbe experimentale
% -----------------------------------
% Initialisation de la courbe
a=input('Entrez la valeur du coeff directeur : ');
b=input('Entrez la valeur de l ordonnee a l origine : ');
% Graphe de la courbe
for i= 1:N
f(i)=a*i+b;
u(i)=0.1*f(i);
err(i)=u(i).*randn(1,1);
end
errorbar(f,err)
hold on
% -------------------------
% Estimation des parametres
% -------------------------
Y=zeros(N,1); % Matrice y=f(x) reel
X=zeros(N,1); % Matrice des x
UY=zeros(N,1);% Matrice des incertitudes liees a chaque y
F=zeros(N,1); % Matrice des valeurs mesurees
P=zeros(K,1); % Matrice des parametres
% Remplissage des matrices
for i= 1:N
X(i,1)=i;
Y(i,1)=f(i);
UY(i,1)=err(i);
end
% Paramètres initiales
for i=1:K
p(i)=input('Valeur du paramètre (ordre croissant) : ');
P(i,1)=p(i);
end
% Premiere estimation des parametre
[y]=(P,X); %Probleme pour appeler la fonction, bug du programme vient de la
% Ecart-type entre la courbe et les points de mesure
V=diag(UY.^2);
S2_init=(1/(N-1))*((F-Y)'/V)*(F-Y);
% Valeur de la variation des parametres
eps=1e-4;
iter=0;
arret=1;
while (iter<1000)&(arret>1e-3)
iter=iter+1;
S2(iter)=(1/(N-1))*((F-Y)'/V)*(F-Y);
dP=P*eps;
[y]=(P,X);
dFdP=zeros(N,K);
for i=1:K
PdP=P;
PdP(i)=P(i)+dP(i);
dFdP=(:,i)=(([y]=(PdP,X))-([y]=(P,X)))/dP(i);
end
U=-0.5*dFdP'*inv(V)*(F-Y);
H=0.5*dFdP'*inv(V)*dFdP;
Delta_P=inv(H)*U;
P=P+Delta_P;
F = [y]=(P,X);
S2(iter)=1/(N-1)*(F-Y)'/V*(F-Y);
arret=abs(S2(iter)-S2_init)/S2_init;
disp(iter,arret)
end
S2_final=S2(iter); |
Partager