Mathc matrices/c05l
Produit scalaire canonique dans Rn
Présentation de la fonction orth_mR();
orth_mR() |
---|
/* ------------------------------------ */
/* ------------------------------------ */
double **orth_mR(
double **U,
double **Q,
int Normal /* YES = 1 NO = 0 */
)
{
double **u = i_mR(rsize_R(U),C1);
double **v = i_mR(rsize_R(U),C1);
double **q = i_mR(rsize_R(U),C1);
double **projuv = i_mR(rsize_R(U),C1);
double **tq = i_mR(rsize_R(U),C1);
int c_U;
int c_Q;
c_c_mR(U,C1, Q,C1);
for( c_U = C2; c_U < U[C_SIZE][C0]; c_U++)
{
c_c_mR(U,c_U, u,C1);
c_c_mR(U,c_U, q,C1);
for( c_Q = C1; c_Q < c_U; c_Q++)
{
c_c_mR(Q,c_Q, v,C1);
proj_mR(u,v, projuv); /* [<u,v> / ||v||^2] * v */
sub_mR(q, projuv, tq);
c_mR( tq, q);
}
c_c_mR(q,C1, Q,c_Q);
}
if(Normal) Normalize_mR(Q);
f_mR(u);
f_mR(v);
f_mR(q);
f_mR(projuv);
f_mR(tq);
return(Q);
}
/* ------------------------------------ */
/* ------------------------------------ */
L'algorithme de Gram-Schmidt ============================
U = {u1,u2,u3,u4} Une base de U donnée dans l'exercice. V = {v1,v2,v3,v3} La base orthonormale, calculée par l'algorithme de Gram-Schmidt.
<u.v> Le projeté de u sur v = --------- v |v||**2
a) v1 = u1 <u2.v1> b) v2 = u2 - --------- v1 ||v1||**2 <u3.v1> <u3.v2> c) v3 = u3 - --------- v1 - --------- v2 ||v1||**2 ||v2||**2 <u4.v1> <u4.v2> <u4.v3> c) v4 = u4 - --------- v1 - --------- v2 - --------- v3 ||v1||**2 ||v2||**2 ||v3||**2 Il faut ensuite normaliser les vecteurs v pour obtenir une base orthonormale.