Bonjour à tous,

Je vous écrit pour savoir si quelqu'un pourrait m'aider concernant un programme:
L'idée est d'estimer les paramètres d'une courbe par la méthode des moindres carrés.

Pour expliquer: au début de mon programme je crée moi-même une courbe. Par la suite je considère ne pas connaître les paramètres de cette courbe: je demande donc à l'utilisateur de rentrer des paramètres qu'il pense être les bon et l'ordinateur va s'approcher, par la méthode des moindres carrés, des paramètres réels.

Je vous met mon programme:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
Dans ce programme, j'utilise une fonction que voici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
function [y] = fct(P,X)
 
y=P(1,1).*exp(-((x-P(2,1)).^2)./P(3,1));
Je pense que l'erreur vient de la syntaxe pour appeler la fonction dans le programme...
Quelqu'un pourrait-il m'aider? Cela fait longtemps que je travaille dessus et je ne parviens pas à voir la solution.

En vous remerciant d'avance pour toute réponse,
Cordialement,
Theafur.