MATH_MoindresCarres    [Analyse]

Par Marc Duc-Jacquet (Math4D v2)
Nouvelle recherche
Si (Faux)
   ` MATH_MoindresCarres [Marc DUC-JACQUET 20/01/2003]
   ` ---------------------------------------------
   ` ATTENTION : nécessite MATH_SyslinSurdim
   ` ---------------------------------------------
   ` Source: Bibliothèque d'Analyse Numérique de Grenoble (BANG)
   ` dont l'élaboration est un travail d'équipe auquel l'auteur a participé
   ` ---------------------------------------------
   ` Rappels mathématiques :    
   ` On considère un nuage de points (Xi, Yi)  i=1,2,;;; M
   ` Soit P un polynôme quelconque de degré inférieur ou égal à N
   ` avec M>=N+1    
   `       P(x)= A0 + A1X + A2X^2 +    ;;; + AN X^N
   ` On cherche le polynôme (c'est à dire les coefficients A0,A1,;;; AN
   ` qui rend minimum la quantité:
   `       Q = Somme ( Yi - P(Xi) )^2
   ` Ce problème se ramène à la résolution d'un système sur dimensionné
   ` de M équations à N+1 inconnues et peut donc être résolu en utilisant
   ` la méthode MATH_SyslinSurdim
   ` MATH_MoindresCarres fait aussi appel à la méthode MATH_Horner 
   ` ---------------------------------------------
   ` MATHERROR:= MATH_MoindresCarres(->X;->Y; N;->A)
   ` le premier paramètre est un pointeur sur le tableau des abscisses Xi
   ` le second paramètre est un pointeur sur le tableau  des ordonnées Yi
   ` le troisième paramètre est N (degré du polynôme)
   ` A est le tableau unidimensionnel des coefficients du polynôme solution
   ` ---------------------------------------------
   ` MATHERROR (valeur renvoyée par la méthode)
   ` 0 -> La méthode a été conduite à son terme
   ` +1 -> La méthode est avortée
   `
Fin de si 

C_ENTIER LONG(MATHERROR)
C_POINTEUR($1;$2;$4)
C_REEL($3)

C_ENTIER LONG($M;$i;$N)
C_REEL($F;$Epsilon)

$M:=Taille tableau($1->)
$N:=$3+1

TABLEAU REEL(Tab;$M;$N)
  ` TABLEAU REEL(tabX;$N)  `solution 
  `COPIER TABLEAU($2->;$Y)

Boucle ($i;1;$M)
 $P:=1
 $F:=$1->{$i}
 Tab{$i}{1}:=1
 Boucle ($j;2;$N)
  $P:=$P*$F
  Tab{$i}{$j}:=$P
 Fin de boucle 
Fin de boucle 

$Epsilon:=0,000001
MATHERROR:=MATH_SyslinSurdim (->Tab;$2;$4;$M;$N;$Epsilon)
$0:=MATHERROR