Aller au contenu

Mathc complexes/04w

Un livre de Wikilivres.


Application


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


c00a.c
/* ------------------------------------ */
/*  Save as :   c00a.c                  */
/* ------------------------------------ */
#include "w_a.h"  
/* ------------------------------------ */
/* ------------------------------------ */
#define   RA     R4
#define   CA     C5
#define   Cb     C1
/* ------------------------------------ */
#define   CB     C3          /* B : a basis for the column space of A */
/* ------------------------------------ */
#define CbFREE   Cb+C1
/* ------------------------------------ */
void fun(void)
{
double ab[RA*((CA+Cb)*C2)] ={
 -3*1,-1*1,  +8*1,-3*1,  +2*1,+8*1,  +8*1,+6*1,  +7*1,+8*1,  0,0, 
 -3*2,-1*2,  +8*2,-3*2,  +2*2,+8*2,  +8*2,+6*2,  +7*2,+8*2,  0,0,  
 +5*5,-1*5,  -6*5,+5*5,  -7*5,-6*5,   9*5,+6*5,  +7*5,+8*5,  0,0, 
 +2*1,-1*1,  -6*1,+2*1,  -7*1,-6*1,  -1*1,+0*1,  +4*1,+3*1,  0,0  
};

double **Ab  =   ca_A_mZ(ab, i_Abr_Ac_bc_mZ(RA,CA,Cb));
double **A   = c_Ab_A_mZ(Ab,           i_mZ(RA,CA));
double **b   = c_Ab_b_mZ(Ab,           i_mZ(RA,Cb));

double **AT   = transpose_mZ(A,        i_mZ(CA,RA));

double **B   =                         i_mZ(RA,CB) ;
double **BT  =                         i_mZ(CB,RA) ;
double **BTb =               i_Abr_Ac_bc_mZ(CB,RA,Cb);

double **BTb_New  =           i_Abr_Ac_bc_mZ(RA,RA,CbFREE);
double **b_Free   =                     i_mZ(RA,CbFREE);
double **AT_bFree =                     i_mZ(CA,CbFREE);

  clrscrn();
  printf("Basis for a Column Space by Row Reduction :\n\n");
  printf(" A :");
  p_mZ(A, S3,P0, S3,P0, C8);
  printf(" b :");
  p_mZ(b, S3,P0, S3,P0, C8);
  printf(" Ab :");
  p_mZ(Ab, S3,P0, S3,P0, C8);
  stop();

  clrscrn(); 
  printf(" The leading 1’s of Ab give the position \n"
         " of the columns  of A which form a basis \n"
         " for the column space of A \n\n"
         " A :");
  p_mZ(A, S7,P3, S7,P3, C5);
  printf(" gj_PP_mZ(Ab) :");
  p_mZ(gj_PP_mZ(Ab), S7,P3, S7,P3, C5);
  
  c_c_mZ(A,C1,B,C1);
  c_c_mZ(A,C2,B,C2);
  c_c_mZ(A,C3,B,C3);
    
  printf(" B :");
  p_mZ(B, S8,P4, S8,P4, C4);
    
  stop();

  clrscrn();   
  printf(" Check if the columns of B are linearly independent\n\n"
         " BT :");
  p_mZ(transpose_mZ(B,BT), S4,P0, S3,P0, C6);  
  printf(" BTb :");
  p_mZ(c_mZ(BT,BTb), S4,P0, S3,P0, C6); 
  printf(" gj_PP_mZ(BTb) :");
  p_mZ(gj_PP_mZ(BTb), S8,P4, S8,P4, C4);       
  stop();     

  clrscrn(); 
  printf(" BTb :");
  p_mZ(BTb, S8,P4, S8,P4, C4); 
    
  put_zeroR_mZ(BTb,BTb_New); 
  put_freeV_mZ(BTb_New);
  printf(" put_zero_row_mZ(BTb,BTb_New);\n"
         " put_freeV_mZ(BTb_New);\n\n"
         " Ab_New :");
  p_mZ(BTb_New, S8,P4, S8,P4, C4);
  stop(); 

  clrscrn(); 
  printf(" gj_mZ(BTb_New) :");
  p_mZ(gj_mZ(BTb_New), S8,P4, S8,P4, C4);
    
  printf(" b_Free : Free variables");  
  p_mZ(c_Ab_b_mZ(BTb_New,b_Free), S8,P4, S8,P4, C4);  
  stop();

  clrscrn();
  printf(" AT :");
  p_mZ(AT, S8,P4, S8,P4, C4); 
  printf(" b_Free :"); 
  p_mZ(b_Free, S8,P4, S8,P4, C4); 
  printf(" AT * b_Free :"); 
  p_mZ(mul_mZ(AT,b_Free,AT_bFree), S8,P4, S8,P4, C4); 
  stop();
        
  f_mZ(Ab);
  f_mZ(A);
  f_mZ(b);
  f_mZ(B);
  f_mZ(BT);
  f_mZ(BTb);
}
/* ------------------------------------ */
int main(void)
{

  fun();

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */


Si B une base de l'espace colonnes de A, les vecteurs libres du système BTb, seront une base pour le complément orthogonal de AT.


Exemple de sortie écran :
Basis for a Column Space by Row Reduction :

 A :
 -3 -1i  +8 -3i  +2 +8i  +8 +6i  +7 +8i 
 -6 -2i +16 -6i  +4+16i +16+12i +14+16i 
+25 -5i -30+25i -35-30i +45+30i +35+40i 
 +2 -1i  -6 +2i  -7 -6i  -1 +0i  +4 +3i 

 b :
 +0 +0i 
 +0 +0i 
 +0 +0i 
 +0 +0i 

 Ab :
 -3 -1i  +8 -3i  +2 +8i  +8 +6i  +7 +8i  +0 +0i 
 -6 -2i +16 -6i  +4+16i +16+12i +14+16i  +0 +0i 
+25 -5i -30+25i -35-30i +45+30i +35+40i  +0 +0i 
 +2 -1i  -6 +2i  -7 -6i  -1 +0i  +4 +3i  +0 +0i 

 Press return to continue. 


 The leading 1s of Ab give the position 
 of the columns  of A which form a basis 
 for the column space of A 

 A :
 -3.000 -1.000i  +8.000 -3.000i  +2.000 +8.000i  +8.000 +6.000i  +7.000 +8.000i 
 -6.000 -2.000i +16.000 -6.000i  +4.000+16.000i +16.000+12.000i +14.000+16.000i 
+25.000 -5.000i -30.000+25.000i -35.000-30.000i +45.000+30.000i +35.000+40.000i 
 +2.000 -1.000i  -6.000 +2.000i  -7.000 -6.000i  -1.000 +0.000i  +4.000 +3.000i 

 gj_PP_mZ(Ab) :
 +1.000 +0.000i  -1.346 +0.731i  -1.115 -1.423i  +1.500 +1.500i  +1.038 +1.808i 
 +0.000 +0.000i  +1.000 -0.000i  -0.357 +0.571i  +0.643 +4.143i  -0.286 +4.286i 
 -0.000 +0.000i  +0.000 +0.000i  +1.000 +0.000i  -0.080 -2.966i  -0.483 -3.126i 
 +0.000 +0.000i  -0.000 +0.000i  -0.000 -0.000i  +0.000 -0.000i  +0.000 +0.000i 

 +0.000 +0.000i 
 +0.000 +0.000i 
 -0.000 +0.000i 
 +0.000 +0.000i 

 B :
 -3.0000 -1.0000i  +8.0000 -3.0000i  +2.0000 +8.0000i 
 -6.0000 -2.0000i +16.0000 -6.0000i  +4.0000+16.0000i 
+25.0000 -5.0000i -30.0000+25.0000i -35.0000-30.0000i 
 +2.0000 -1.0000i  -6.0000 +2.0000i  -7.0000 -6.0000i 

 Press return to continue. 


 Check if the columns of B are linearly independent

 BT :
  -3 -1i   -6 -2i  +25 -5i   +2 -1i 
  +8 -3i  +16 -6i  -30+25i   -6 +2i 
  +2 +8i   +4+16i  -35-30i   -7 -6i 

 BTb :
  -3 -1i   -6 -2i  +25 -5i   +2 -1i   +0 +0i 
  +8 -3i  +16 -6i  -30+25i   -6 +2i   +0 +0i 
  +2 +8i   +4+16i  -35-30i   -7 -6i   +0 +0i 

 gj_PP_mZ(BTb) :
 +1.0000 +0.0000i  +2.0000 +0.0000i  -4.3151 +1.5068i  -0.7397 -0.0274i 
 +0.0000 -0.0000i  +0.0000 -0.0000i  +1.0000 +0.0000i  +0.3964 +0.0436i 
 -0.0000 +0.0000i  -0.0000 +0.0000i  -0.0000 +0.0000i  +1.0000 -0.0000i 

 +0.0000 +0.0000i 
 +0.0000 -0.0000i 
 -0.0000 +0.0000i 

 Press return to continue. 


 BTb :
 +1.0000 +0.0000i  +2.0000 +0.0000i  -4.3151 +1.5068i  -0.7397 -0.0274i 
 +0.0000 -0.0000i  +0.0000 -0.0000i  +1.0000 +0.0000i  +0.3964 +0.0436i 
 -0.0000 +0.0000i  -0.0000 +0.0000i  -0.0000 +0.0000i  +1.0000 -0.0000i 

 +0.0000 +0.0000i 
 +0.0000 -0.0000i 
 -0.0000 +0.0000i 

 put_zero_row_mZ(BTb,BTb_New);
 put_freeV_mZ(BTb_New);

 Ab_New :
 +1.0000 +0.0000i  +2.0000 +0.0000i  -4.3151 +1.5068i  -0.7397 -0.0274i 
 +0.0000 +0.0000i  +1.0000 +0.0000i  +0.0000 +0.0000i  +0.0000 +0.0000i 
 +0.0000 -0.0000i  +0.0000 -0.0000i  +1.0000 +0.0000i  +0.3964 +0.0436i 
 -0.0000 +0.0000i  -0.0000 +0.0000i  -0.0000 +0.0000i  +1.0000 -0.0000i 

 +0.0000 +0.0000i  +0.0000 +0.0000i 
 +0.0000 +0.0000i  +1.0000 +0.0000i 
 +0.0000 -0.0000i  +0.0000 +0.0000i 
 -0.0000 +0.0000i  +0.0000 +0.0000i 

 Press return to continue. 


 gj_mZ(BTb_New) :
 +1.0000 -0.0000i  +0.0000 +0.0000i  +0.0000 +0.0000i  +0.0000 +0.0000i 
 +0.0000 +0.0000i  +1.0000 +0.0000i  +0.0000 +0.0000i  +0.0000 +0.0000i 
 -0.0000 -0.0000i  +0.0000 +0.0000i  +1.0000 -0.0000i  +0.0000 +0.0000i 
 +0.0000 -0.0000i  +0.0000 +0.0000i  +0.0000 +0.0000i  +1.0000 +0.0000i 

 +0.0000 +0.0000i  -2.0000 +0.0000i 
 +0.0000 +0.0000i  +1.0000 +0.0000i 
 +0.0000 +0.0000i  +0.0000 +0.0000i 
 +0.0000 +0.0000i  +0.0000 +0.0000i 

 b_Free : Free variables
 +0.0000 +0.0000i  -2.0000 +0.0000i 
 +0.0000 +0.0000i  +1.0000 +0.0000i 
 +0.0000 +0.0000i  +0.0000 +0.0000i 
 +0.0000 +0.0000i  +0.0000 +0.0000i 

 Press return to continue. 


 AT :
 -3.0000 -1.0000i  -6.0000 -2.0000i +25.0000 -5.0000i  +2.0000 -1.0000i 
 +8.0000 -3.0000i +16.0000 -6.0000i -30.0000+25.0000i  -6.0000 +2.0000i 
 +2.0000 +8.0000i  +4.0000+16.0000i -35.0000-30.0000i  -7.0000 -6.0000i 
 +8.0000 +6.0000i +16.0000+12.0000i +45.0000+30.0000i  -1.0000 +0.0000i 
 +7.0000 +8.0000i +14.0000+16.0000i +35.0000+40.0000i  +4.0000 +3.0000i 

 b_Free :
 +0.0000 +0.0000i  -2.0000 +0.0000i 
 +0.0000 +0.0000i  +1.0000 +0.0000i 
 +0.0000 +0.0000i  +0.0000 +0.0000i 
 +0.0000 +0.0000i  +0.0000 +0.0000i 

 AT * b_Free :
 +0.0000 +0.0000i  +0.0000 +0.0000i 
 +0.0000 +0.0000i  -0.0000 +0.0000i 
 +0.0000 +0.0000i  -0.0000 -0.0000i 
 +0.0000 +0.0000i  -0.0000 +0.0000i 
 +0.0000 +0.0000i  -0.0000 +0.0000i 

 Press return to continue.