Collège du Sud, Bulle
(3^e) OS PAM
(4^e) OC AM

Applications des mathématiques

Projections et ajustements

Méthode des moindres carrés

Version pour Mathematica
Edition 2012/2013
Marcel Délèze, Eugène Pasquier
www.collegedusud.ch/app/applmaths/

Prérequis

Nous supposons que l'étudiant a préalablement étudié le thème Systèmes linéaires § 1 Systèmes réguliers.

§ 1	Projections

§ 1.0	Projection vectorielle dans l'espace à deux dimensions (introduction)

Par rapport à une base orthonormée du plan, on donne les trois vecteurs

(Overscript[v, ->])=(({{5}, {4}}));         (Overscript[a, ->])=(({{2}, {1}}));         (Overscript[b, ->])=(({{1}, {3}})).

On cherche le vecteur  (Overscript[p, ->])  qui est (voir figure)
	la projection de  (Overscript[v, ->])   sur la droite vectorielle dirigée par  (Overscript[a, ->])  parallèlement à  (Overscript[b, ->]).

Le coeur du calcul consiste à exprimer le vecteur  (Overscript[v, ->])   dans la base  ( (Overscript[a, ->]), (Overscript[b, ->]))

(Overscript[v, ->])=(Subscript[r, 1])(Overscript[a, ->])+(Subscript[r, 2]) (Overscript[b, ->])

(({{5}, {4}}))=(Subscript[r, 1])(({{2}, {1}}))+(Subscript[r, 2])(({{1}, {3}}));

{({{2 (Subscript[r, 1])+1 (Subscript[r, 2])= 5}, {1 (Subscript[r, 1])+3 (Subscript[r, 2])= 4}})

(({{2, 1}, {1, 3}}))(({{(Subscript[r, 1])}, {(Subscript[r, 2])}}))=(({{5}, {4}}))

r=LinearSolve[{{2,1},{1,3}},{5,4}]

La réponse est la première composante vectorielle de  (Overscript[v, ->])  dans la base  ( (Overscript[a, ->]), (Overscript[b, ->]))

(Overscript[p, ->])=(Subscript[r, 1])(Overscript[a, ->])=(11/5)(({{2}, {1}}))=(({{(22/5)}, {(11/5)}}))

§ 1.1 Projections affines

Projection d'un point P sur un plan affine G parallèlement à une droite vectorielle H

Soient	G le plan affine donné par un repère (A, (OverVector[(Subscript[g, 1])]), (OverVector[(Subscript[g, 2])])),
	H la droite vectorielle donnée par une base ((OverVector[h])) et
	P un point quelconque de l'espace affine (ℝ^3).

La projection de P sur G parallèlement à H est le point (SuperStar[P]) tel que

1°          (SuperStar[P]) ϵ G     ⟺      (OverVector[(SuperStar[AP])])=(Subscript[r, 1])(OverVector[(Subscript[g, 1])])+(Subscript[r, 2])(OverVector[(Subscript[g, 2])])      et   
                    
2°         (Overscript[(SuperStar[P])P, ⟶]) ∈ H    ⟺        (OverVector[(SuperStar[P])P])=(Subscript[r, 3])(OverVector[h])

a={0,0,0};g1={0,2,0};g2={-2,0,0};h={0,-0.5`,1};r1=1.5`;r2=2;r3=2;p=r1 g1+r2 g2+r3 h;ps=r1 g1+r2 g2;
Show[Graphics3D[{vecteur3D[a,g1,0.1`,0.005`],vecteur3D[a,r1 g1,0.06`,0.005`],vecteur3D[a,g2,0.1`,0.005`],vecteur3D[a,r2 g2,0.05`,0.005`],vecteur3D[ps,r3 h,0.1`,0.005`],vecteur3D[a,h,0.12`,0.005`],Point[p],Point[ps],{Dashing[{0.015`}],Line[{r1 g1,ps,r2 g2}],Line[{a,a+r3 h}]},Text["A",a+{0,-0.1`,-0.1`}],Text["\!\(\*OverscriptBox[SubscriptBox[\(g\), \(1\)], \(->\)]\)",g1+{0.2`,0,-0.1`}],Text["\!\(\*SubscriptBox[\(r\), \(1\)]\) \!\(\*OverscriptBox[SubscriptBox[\(g\), \(1\)], \(->\)]\)",r1 g1+{0.2`,0,-0.1`}],Text["P",p+{0,0,0.2`}],Polygon[{a,0.5` g1,0.5` g2,a}],Text["G",0.3` g1+0.3` g2],Text["\!\(\(P\^*\)\)",ps+{0.2`,0.25`,0}],Text["\!\(\*OverscriptBox[\(h\), \(->\)]\)",h+{0,-0.2`,-0.1`}],Text["H",r3 h+{0,-0.2`,0}],Text["\!\(\*OverscriptBox[SubscriptBox[\(g\), \(2\)], \(->\)]\)",g2+{0,-0.3`,0.1`}],Text["\!\(\*SubscriptBox[\(r\), \(2\)]\) \!\(\*OverscriptBox[SubscriptBox[\(g\), \(2\)], \(->\)]\)",r2 g2+{-0.2`,-0.2`,0.15`}]},ViewPoint->{3,1.5`,0.5`},PlotRange->All,Boxed->False]]

Le coeur du calcul consiste à exprimer (OverVector[AP]) dans la base ((OverVector[(Subscript[g, 1])]), (OverVector[(Subscript[g, 2])]), (OverVector[h])), c'est-à-dire à résoudre un système linéaire de 3 équations à 3 inconnues:

(OverVector[AP])=(OverVector[(SuperStar[AP])])+(OverVector[(SuperStar[P])P])=(Subscript[r, 1])(OverVector[(Subscript[g, 1])])+(Subscript[r, 2])(OverVector[(Subscript[g, 2])])+(Subscript[r, 3])(OverVector[h])

Les coordonnées de la projection se déduisent des coefficients ((Subscript[r, 1]), (Subscript[r, 2]), (Subscript[r, 3])):

(OverVector[(SuperStar[OP])])=(OverVector[OA])+(OverVector[(SuperStar[AP])])=(OverVector[OA])+(Subscript[r, 1])(OverVector[(Subscript[g, 1])])+(Subscript[r, 2])(OverVector[(Subscript[g, 2])])

Exemple

Le plan affine G est donné par 3 points

A(2; 2; -1), B(0; 3; 1), C(-3, 7; -4),

La doite vectorielle est donnée par le vecteur

(OverVector[AD])   où   D(3; -2; 3)

Le point à projeter est

P(1; 4; 6)

On a donc (OverVector[(Subscript[g, 1])])=(OverVector[AB]), (OverVector[(Subscript[g, 2])])=(OverVector[AC]),  (OverVector[h])=(OverVector[AD]). Le calcul consiste à résoudre le système  (Subscript[r, 1])(OverVector[(Subscript[g, 1])])+(Subscript[r, 2])(OverVector[(Subscript[g, 2])])+(Subscript[r, 3])(OverVector[h])=(OverVector[AP])  puis à calculer (SuperStar[P]). Dans le système à résoudre

(({{-2, -5, 1}, {1, 5, -4}, {2, -3, 4}}))(({{(Subscript[r, 1])}, {(Subscript[r, 2])}, {(Subscript[r, 3])}}))=(({{-1}, {2}, {7}}))

les vecteurs-colonnes de la matrice sont les vecteurs (OverVector[(Subscript[g, 1])]), (OverVector[(Subscript[g, 2])]), (OverVector[h]). Par contre, en Mathematica, {(Subscript[g, 1]), (Subscript[g, 2]), h} désigne la matrice dont les lignes sont les vecteurs (OverVector[(Subscript[g, 1])]), (OverVector[(Subscript[g, 2])]), (OverVector[h]). La transposition d'une matrice est l'opération qui consiste à échanger les lignes et les colonnes.

a={2,2,-1};b={0,3,1};c={-3,7,-4};d={3,-2,3};g1=b-a;g2=c-a;h=d-a;m=Transpose[{g1,g2,h}];NullSpace[m]

p={1,4,6};r=LinearSolve[m,p-a];ps=a+r[[1]] g1+r[[2]] g2

Projection d'un point P sur une droite affine G parallèlement à un plan vectoriel H

Soient	G la droite affine donnée par un repère (A, (OverVector[g])),
	H le plan vectoriel donné par une base ((OverVector[(Subscript[h, 1])]), (OverVector[(Subscript[h, 2])])) et
	P un point quelconque de l'espace affine (ℝ^3).

La projection de P sur G parallèlement à H est le point (SuperStar[P]) tel que

1°          (SuperStar[P]) ϵ G     ⟺      (OverVector[(SuperStar[AP])])=(Subscript[r, 1])(OverVector[g])          et   
                    
2°         (Overscript[(SuperStar[P])P, ⟶]) ∈ H    ⟺        (OverVector[(SuperStar[P])P])=(Subscript[r, 2])(OverVector[(Subscript[h, 1])])+(Subscript[r, 3]) (OverVector[(Subscript[h, 2])])

a={0,0,0};g={0,2,0};h1={-2,0,0};h2={0,-0.5`,1};r1=1.5`;r2=2;r3=2;p=r1 g+r2 h2+r3 g2;ps=r1 g;
Show[Graphics3D[{vecteur3D[a,g,0.1`,0.005`],vecteur3D[a,r1 g,0.06`,0.005`],vecteur3D[a,h1,0.1`,0.005`],vecteur3D[a,h2,0.1`,0.005`],vecteur3D[ps,r2 h1,0.05`,0.005`],vecteur3D[ps,r3 h2,0.07`,0.005`],Point[p],Point[ps],{Dashing[{0.015`}],Line[{ps+r2 h1,ps,ps+r3 h2,p,ps+r2 h1}],Line[{a+h1,a,a+h2,a+h1+h2,a+h1}],Line[{a-g,a+2.5` g}]},Text["A",a+{0,-0.1`,-0.1`}],Text["\!\(\*OverscriptBox[\(g\), \(->\)]\)",g+{0.2`,0,-0.2`}],Text["\!\(\*SubscriptBox[\(r\), \(1\)]\) \!\(\*OverscriptBox[\(g\), \(->\)]\)",r1 g+{0.2`,0,-0.2`}],Text["P",p+{0,0,0.2`}],Polygon[{a,0.5` h1,0.5` h2,a}],Text["G",2.6` g],Text["\!\(\(P\^*\)\)",ps+{0,0.2`,0.2`}],Text["\!\(\*OverscriptBox[SubscriptBox[\(h\), \(1\)], \(->\)]\)",h1+{0,0.2`,0.25`}],Text["H",0.35` h1+0.35` h2],Text["\!\(\*OverscriptBox[SubscriptBox[\(h\), \(2\)], \(->\)]\)",h2+{0,-0.3`,0.1`}],Text["\!\(\*SubscriptBox[\(r\), \(2\)]\) \!\(\*OverscriptBox[SubscriptBox[\(h\), \(1\)], \(->\)]\)",ps+r2 h1+{-0.25`,0.3`,0.15`}],Text["\!\(\*SubscriptBox[\(r\), \(3\)]\) \!\(\*OverscriptBox[SubscriptBox[\(h\), \(2\)], \(->\)]\)",ps+r3 h2+{-0.2`,-0.2`,0.15`}]},ViewPoint->{3,1.5`,0.5`},PlotRange->All,Boxed->False,ImageSize->{500,250}]]

Le coeur du calcul consiste à exprimer (OverVector[AP]) dans la base ((OverVector[g]), (OverVector[(Subscript[h, 1])]), (OverVector[(Subscript[h, 2])])), c'est-à-dire à résoudre un système linéaire de 3 équations à 3 inconnues:

(OverVector[AP])=(OverVector[(SuperStar[AP])])+(OverVector[(SuperStar[P])P])=(Subscript[r, 1])(OverVector[g])+(Subscript[r, 2])(OverVector[(Subscript[h, 1])])+(Subscript[r, 3])(OverVector[(Subscript[h, 2])])

Les coordonnées de la projection se déduisent des coefficients ((Subscript[r, 1]), (Subscript[r, 2]), (Subscript[r, 3])):

(OverVector[(SuperStar[OP])])=(OverVector[OA])+(OverVector[(SuperStar[AP])])=(OverVector[OA])+(Subscript[r, 1])(OverVector[g])

Exemple

La droite affine G est donnée par 2 points

A(2; 2; -1), B(0; 3; 1),

et le plan vectoriel est donné par les vecteurs

(OverVector[AC]),(OverVector[AD])            où                    C(-3, 7; -4),D(3; -2; 3)

Le point à projeter est

P(1; 4; 6)

On a donc (OverVector[(Subscript[g, 1])])=(OverVector[AB]),   (OverVector[(Subscript[h, 1])])=(OverVector[AC]),  (OverVector[(Subscript[h, 2])])=(OverVector[AD]). Voici le calcul: résoudre le système  (Subscript[r, 1])(OverVector[(Subscript[g, 1])])+(Subscript[r, 2])(OverVector[(Subscript[h, 1])])+(Subscript[r, 3])(OverVector[(Subscript[h, 2])])=(OverVector[AP])    puis calculer (SuperStar[P])

a={2,2,-1};b={0,3,1};c={-3,7,-4};d={3,-2,3};g1=b-a;h1=c-a;h2=d-a;m=Transpose[{g1,h1,h2}];NullSpace[m]

p={1,4,6};r=LinearSolve[m,p-a];ps=a+r[[1]] g1

Exercice 1.1 - 1

Déterminez la projection parallèle (Subscript[P, G]) de P sur G parallèlement à H où

P(2; 5; 7)

G est un plan affine de repère

A(0;0;2),    (OverVector[(Subscript[g, 1])])=(({{0}, {3}, {-2}})),       (OverVector[(Subscript[g, 2])])=(({{4}, {3}, {-2}}))

et H une droite vectorielle de base

(OverVector[h])=(({{1}, {2}, {5}}))

Exercice 1.1 - 2

Déterminez la projection parallèle (Subscript[P, H]) de P sur H parallèlement à G où

P(2; 5; 7)

H est une droite affine de repère

B(0;1;-6),            (OverVector[h])=(({{1}, {2}, {5}}))

et G un plan vectoriel de base

(OverVector[(Subscript[g, 1])])=(({{0}, {3}, {-2}})),       (OverVector[(Subscript[g, 2])])=(({{4}, {3}, {-2}}))

Exercice 1.1 - 3                  [Facultatif]

Comparez les résultats des exercices 1 et 2. Plus précisément, établissez une relation vectorielle qui lie les points P, (Subscript[P, G]), (Subscript[P, H]), A, B.

Indication: utilisez le point d'intersection I des sous-espaces affines (G de 1.1-1) et (H de 1.1-2).

§ 1.2 Projections vectorielles

Projection d'un vecteur (Overscript[v, ->]) sur un sous-espace vectoriel G parallèlement à un sous-espace vectoriel supplémentaire H

Exemple    (mélange de mélanges)

On veut faire un mélange de cinq céréales composé de 800 kg de froment, 300 kg d'avoine, 200 kg de millet, 300 kg de seigle et 400 kg d'orge. Le résultat doit être obtenu en mélangeant cinq types de mélanges.

Un premier fournisseur propose trois types de mélanges:
1) des sacs composés de 5 kg de froment, 1 kg d'avoine, 1 kg de millet, 1 kg de seigle et 2 kg d'orge;
2) des sacs composés de 3 kg d'avoine, 1 kg de millet, 1 kg de seigle et 1 kg d'orge;
3) des sacs composés de 2 kg de froment, 3 kg de millet, 2 kg de seigle et 4 kg d'orge;

Un deuxième fournisseur propose deux autres types de mélanges:
4) des sacs composés de 3 kg de froment, 1 kg d'avoine,  3 kg de seigle et 1 kg d'orge;
5) des sacs composés de 4 kg de froment, 1 kg d'avoine, 1 kg de millet et 3 kg d'orge.

Calculez les quantités de froment, d'avoine, de millet, de seigle et d'orge qui proviennent du premier fournisseur.

Reformulez le problème en termes de projection.

Méthode de résolution

Un mélange est représenté par un vecteur de 5 composantes dont la première composante indique la quantité de froment, la deuxième d'avoine, la troisième de millet, la quatrième de seigle et la cinquième d'orge. Ainsi, le mélange à composer est représenté par le vecteur

(OverVector[v])=(({{800}, {300}, {200}, {300}, {400}}))

Les inconnues sont les nombres de sacs de chaque type de mélange:

(Subscript[r, 1]), (Subscript[r, 2]), (Subscript[r, 3]), (Subscript[r, 4]), (Subscript[r, 5])

La relation à satisfaire est

(Subscript[r, 1])(({{5}, {1}, {1}, {1}, {2}}))+(Subscript[r, 2])(({{0}, {3}, {1}, {1}, {1}}))+(Subscript[r, 3])(({{2}, {0}, {3}, {2}, {4}}))+(Subscript[r, 4])(({{3}, {1}, {0}, {3}, {1}}))+(Subscript[r, 5])(({{4}, {1}, {1}, {0}, {3}}))=(({{800}, {300}, {200}, {300}, {400}}))

Il s'agit d'un système de 5 équations à 5 inconnues. Les quantités livrées par le premier fournisseur sont

(OverVector[(SuperStar[v])])=(Subscript[r, 1])(({{5}, {1}, {1}, {1}, {2}}))+(Subscript[r, 2])(({{0}, {3}, {1}, {1}, {1}}))+(Subscript[r, 3])(({{2}, {0}, {3}, {2}, {4}}))

Reformulation en termes de projection

Dans l'espace vectoriel de dimension 5, noté (ℝ^5), on donne le vecteur

(OverVector[v])=(({{800}, {300}, {200}, {300}, {400}}))

on définit un sous-espace vectoriel G de dimension 3, de base

(OverVector[(Subscript[g, 1])])=(({{5}, {1}, {1}, {1}, {2}})),             (OverVector[(Subscript[g, 2])])=(({{0}, {3}, {1}, {1}, {1}})),                 (OverVector[(Subscript[g, 3])])=(({{2}, {0}, {3}, {2}, {4}}))

et un sous-espace vectoriel H de dimension 2, de base

(OverVector[(Subscript[h, 1])])=(({{3}, {1}, {0}, {3}, {1}})),                      (OverVector[(Subscript[h, 2])])=(({{4}, {1}, {1}, {0}, {3}}))

Calculez la projection de (OverVector[v]) sur G parallèlement à H.

Calculs

g1={5,1,1,1,2};g2={0,3,1,1,1};g3={2,0,3,2,4};h1={3,1,0,3,1};h2={4,1,1,0,3};m=Transpose[{g1,g2,g3,h1,h2}];NullSpace[m]

v={800,300,200,300,400};r=LinearSolve[m,v]; vs=r[[1]] g1+r[[2]] g2+r[[3]] g3;N[vs]

Généralisation et définition

La géométrie est la partie des mathématiques qui concerne les objets que l'on peut se représenter visuellement. Mais un des buts des mathématiques est de dépasser ce que l'on peut voir. Les objets mathématiques sont alors appréhendés d'une manière plus abstraite, au moyen de représentations symboliques et du calcul algébrique, ce qui élargit le champ d'action de l'intuition. La généralisation consiste à considérer des listes de nombres comme des vecteurs auxquels on applique des opérations analogues à celles qui nous sont connues pour  ℝ, (ℝ^2), (ℝ^3).

Dans l'espace vectoriel de dimension n, noté (ℝ^n), on donne
1°	le vecteur (OverVector[v]);
2°	le sous-espace vectoriel G de dimension p et déterminé par une base

((OverVector[(Subscript[g, 1])]), (OverVector[(Subscript[g, 2])]), ...,(OverVector[(Subscript[g, p])]))

3°	le sous-espace vectoriel H de dimension q et déterminé par une base

((OverVector[(Subscript[h, 1])]), (OverVector[(Subscript[h, 2])]), ...,(OverVector[(Subscript[h, q])]))

Nous admettons que les données vérifient les hypothèses

p+q=n          et
((OverVector[(Subscript[g, 1])]), (OverVector[(Subscript[g, 2])]), ...,(OverVector[(Subscript[g, p])]),(OverVector[(Subscript[h, 1])]), (OverVector[(Subscript[h, 2])]), ...,(OverVector[(Subscript[h, q])]))   est une base de  (ℝ^n).

Alors la projection de (OverVector[v]) sur G parallèlement à H est le vecteur défini (OverVector[(SuperStar[v])]) par

(Subscript[r, 1])(OverVector[(Subscript[g, 1])])+(Subscript[r, 2])(OverVector[(Subscript[g, 2])])+ ...+(Subscript[r, p])(OverVector[(Subscript[g, p])])+(Subscript[r, p+1])(OverVector[(Subscript[h, 1])])+(Subscript[r, p+2]) (OverVector[(Subscript[h, 2])])+ ...+(Subscript[r, n])(OverVector[(Subscript[h, q])])=(OverVector[v ])   
   (OverVector[(SuperStar[v])])=(Subscript[r, 1])(OverVector[(Subscript[g, 1])])+(Subscript[r, 2])(OverVector[(Subscript[g, 2])])+ ...+(Subscript[r, p])(OverVector[(Subscript[g, p])])

Vérification de l'hypothèse

De manières équivalentes, l'hypothèse peut aussi se reformuler comme suit:
  *	(ℝ^n) est la somme directe des espaces G et H;
  *	H est l'espace supplémentaire de G dans (ℝ^n).
Cette hypothèse assure l'existence et l'unicité de la projection.

Pour vérifier l'hypothèse, il suffit de contrôler que le système d'équations est régulier. Pratiquement, dans les calculs numériques, la commande NullSpace[m] vérifie que la matrice m est régulière.

Note historique

La géométrie à  n  dimensions a été introduite à partir de  1844  par Cayley en Angleterre et Grassmann en Allemagne.

Exercice 1.2 - 1

Notons (Subscript[p, G])((OverVector[v])) la projection de (OverVector[v]) sur G parallèlement à H tel que défini ci-dessus. Soit  (Subscript[p, H])((OverVector[v])) la projection de (OverVector[v]) sur H parallèlement à G. Montrez que

(Subscript[p, H])((OverVector[v]))=(OverVector[v])-(Subscript[p, G])((OverVector[v]))

Exercice 1.2 - 2

Un fondeur achète du bronze à trois fournisseurs.
Le bronze A contient 75 % de cuivre, 10 % d'étain et 5 % de plomb.
Le bronze B contient 80 % de cuivre, 5 % d'étain et 10 % de plomb.
Le bronze C contient 78 % de cuivre, 7 % d'étain et 8 % de plomb.

a)	Quelles quantités de bronzes A, B, C faut-il mêler pour obtenir un alliage
	comportant 169 kg de cuivre, 18 kg d'étain et 15 kg de plomb ?
	Indication: utilisez la méthode Reduce[...] au lieu de LinearSolve[..].

b)	Quel est alors le poids total de l'alliage obtenu ?

Exercice 1.2 - 3

Sur un objet de masse m s'exerce la force de pesanteur

(OverVector[P])=m (({{0}, {0}, {-g}}))              où     g=9.81 (m/(s^2))

Cet objet est suspendu par trois fils dont on donne les directions

(OverVector[(Subscript[d, 1])])=(({{-1}, {3}, {2}})),    (OverVector[(Subscript[d, 2])])=(({{2}, {2}, {3}})),          (OverVector[(Subscript[d, 3])])=(({{0}, {-1}, {1}}))

Calculez la force qu'exerce le premier fil sur l'objet.
Reformulez le problème en termes de projection.

Exercice 1.2 - 4

Sur un plan incliné est planté un poteau vertical. Le plan incliné est engendré par les vecteurs

(({{1}, {0}, {0}})),       (({{0}, {3}, {1}}))

Le poteau est représenté par le vecteur

(({{0}, {0}, {5}}))

Les rayons du soleil ont la direction

(({{-1}, {4}, {-3}}))

Par quel vecteur doit-on représenter l'ombre du poteau sur le coteau ?
Reformulez le problème en termes de projection.