Aller au contenu

Mathc complexes/a252

Un livre de Wikilivres.


Application


Installer et compiler ces fichiers dans votre répertoire de travail.


c04c.c
/* ------------------------------------ */
/*  Save as :   c04c.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define    RAT R2
#define    CAT C4
#define    Cb C1
/* ------------------------------------ */
#define CFREE Cb+C2 
/* ------------------------------------ */
int main(void)
{
double a_Tb[RAT*((CAT+Cb)*C2)]={
 -2,+3, +1,+0, +0,-1, 3,-5, +0,+0,
 -4,+2, -3,+5, -6,+4,-1,+0, +0,+0  
};

double **ATb =   ca_A_mZ(a_Tb, i_Abr_Ac_bc_mZ(RAT,CAT,Cb));
double **AT  = c_Ab_A_mZ(ATb,  i_mZ(RAT,CAT));
double **b   = c_Ab_b_mZ(ATb,  i_mZ(RAT,Cb));

double **ATb_free =            i_Abr_Ac_bc_mZ(CAT,CAT,CFREE);

double **B   =                 i_mZ(CAT,CFREE); 
double **ATB =                 i_mZ(RAT,CFREE);

  clrscrn();
  printf("Find a basis for the orthogonal complement of AT :\n\n");
  printf(" AT :");
  p_mZ(AT,S5,P1,S5,P1,C10);
  printf(" b :");
  p_mZ(b,S5,P1,S5,P1,C10);
  printf(" ATb :");
  p_mZ(ATb,S5,P1,S5,P1,C10);
  stop();

  clrscrn();
  printf(" ATb :  gj_PP_mZ(ATb) :");
  gj_PP_mZ(ATb);
  p_mZ(ATb,S7,P3,S7,P3,C10);
  
  put_zeroR_mZ(ATb,ATb_free);  
  put_freeV_mZ(ATb_free);
      
  printf(" ATb_free :");  
  p_mZ(gj_mZ(ATb_free),S7,P3,S7,P3,C4);  
  
  printf(" B is a basis for the orthogonal complement of AT :"); 
  P_mZ(c_Ab_b_mZ(ATb_free,B),S10,P12,S10,P12,C2);
  stop();	

  clrscrn();
  printf(" AT :");
  p_mZ(AT, S8,P4, S8,P4, C4); 
  printf(" B :"); 
  p_mZ(B, S8,P4, S8,P4, C4); 
  printf(" AT * B :"); 
  p_mZ(mul_mZ(AT,B,ATB), S8,P6, S8,P6, C4); 
  stop();
    
  f_mZ(ATb);
  f_mZ(AT);
  f_mZ(b);
  
  f_mZ(ATb_free);
  
  f_mZ(B);
  f_mZ(ATB);
  
  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */


Trouver une projection sur un sous-espace vectoriel par une application linéaire :


  • B est une base pour le complément orthogonal de AT. Trouver une matrice V qui projette un vecteur x sur C4.
          Proj(x) =  V * x
                V =  Id - (B * inv(BT*B) * BT)  .
                
  • Dans cet exemple nous calculons B. Nous l'utiliserons dans le prochain exemple.


Exemple de sortie écran :
Find a basis for the orthogonal complement of AT :

 AT :
 -2.0 +3.0i  +1.0 +0.0i  +0.0 -1.0i  +3.0 -5.0i 
 -4.0 +2.0i  -3.0 +5.0i  -6.0 +4.0i  -1.0 +0.0i 

 b :
 +0.0 +0.0i 
 +0.0 +0.0i 

 ATb :
 -2.0 +3.0i  +1.0 +0.0i  +0.0 -1.0i  +3.0 -5.0i  +0.0 +0.0i 
 -4.0 +2.0i  -3.0 +5.0i  -6.0 +4.0i  -1.0 +0.0i  +0.0 +0.0i 

 Press return to continue. 


 ATb :  gj_PP_mZ(ATb) :
 +1.000 +0.000i  +1.100 -0.700i  +1.600 -0.200i  +0.200 +0.100i  +0.000 -0.000i 
 +0.000 +0.000i  +1.000 -0.000i  +1.373 +0.232i  +1.264 +0.491i  +0.000 +0.000i 

 ATb_free :
 +1.000 +0.000i  -0.000 -0.000i  -0.000 +0.000i  -0.000 +0.000i 
 +0.000 +0.000i  +1.000 +0.000i  +0.000 +0.000i  +0.000 +0.000i 
 +0.000 +0.000i  -0.000 -0.000i  +1.000 -0.000i  +0.000 +0.000i 
 +0.000 +0.000i  +0.000 +0.000i  +0.000 +0.000i  +1.000 +0.000i 

 +0.000 +0.000i  +0.073 -0.506i  +1.534 -0.444i 
 +0.000 -0.000i  -1.373 -0.232i  -1.264 -0.491i 
 +0.000 +0.000i  +1.000 +0.000i  -0.000 +0.000i 
 +0.000 +0.000i  -0.000 -0.000i  +1.000 -0.000i 

 B is a basis for the orthogonal complement of AT :
+0.000000000000,+0.000000000000, +0.072961373391,-0.506437768240, 
+0.000000000000,-0.000000000000, -1.373390557940,-0.231759656652, 
+0.000000000000,+0.000000000000, +1.000000000000,+0.000000000000, 
+0.000000000000,+0.000000000000, -0.000000000000,-0.000000000000  

+1.534334763948,-0.444206008584, 
-1.263948497854,-0.491416309013, 
-0.000000000000,+0.000000000000, 
+1.000000000000,-0.000000000000  

 Press return to continue. 


 AT :
 -2.0000 +3.0000i  +1.0000 +0.0000i  +0.0000 -1.0000i  +3.0000 -5.0000i 
 -4.0000 +2.0000i  -3.0000 +5.0000i  -6.0000 +4.0000i  -1.0000 +0.0000i 

 B :
 +0.0000 +0.0000i  +0.0730 -0.5064i  +1.5343 -0.4442i 
 +0.0000 -0.0000i  -1.3734 -0.2318i  -1.2639 -0.4914i 
 +0.0000 +0.0000i  +1.0000 +0.0000i  -0.0000 +0.0000i 
 +0.0000 +0.0000i  -0.0000 -0.0000i  +1.0000 -0.0000i 

 AT * B :
+0.000000+0.000000i +0.000000-0.000000i +0.000000-0.000000i 
+0.000000+0.000000i +0.000000-0.000000i +0.000000-0.000000i 

 Press return to continue.