Fonctions de bases


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}              La base orthonormale, calculée par l'algorithme de Gram-Schmidt.
                               <u2.v1>
 Le projeté de u2 sur v1 =    ---------  v1
                               |v1||**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.