Aller au contenu

Mathc complexes/04u

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     R5
#define   CA     C5
#define   Cb     C1
/* ------------------------------------ */
#define   CB     C2          /* B : a basis for the column space of A */
/* ------------------------------------ */
#define CbFREE   Cb+C4
/* ------------------------------------ */
void fun(void)
{
double ab[RA*((CA+Cb)*C2)] ={
   +5*2,-1*2,  -6*2,+5*2,  -7*2,-6*2,  9*2,+6*2,  +7*2,+8*2,   0,0, 
   +5*3,-1*3,  -6*3,+5*3,  -7*3,-6*3,  9*3,+6*3,  +7*3,+8*3,   0,0, 
   +5*7,-1*7,  -6*7,+5*7,  -7*7,-6*7,  9*7,+6*7,  +7*7,+8*7,   0,0, 
   +5*5,-1*5,  -6*5,+5*5,  -7*5,-6*5,  9*5,+6*5,  +7*5,+8*5,   0,0, 
   +5*6,-1*6,  -6*6,+5*6,  -7*6,-6*6,  9*6,+6*6,  +7*6,+8*6,   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, S4,P0, S4,P0, C6);
  printf(" b :");
  p_mZ(b, S4,P0, S4,P0, C6);
  printf(" Ab :");
  p_mZ(Ab, S4,P0, S4,P0, C6);
  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, S6,P2, S5,P2, C6);
  printf(" gj_PP_mZ(Ab) :");
  p_mZ(gj_PP_mZ(Ab), S6,P2, S5,P2, C6);
  
  c_c_mZ(A,C1,B,C1);
  
  printf(" B :");
  p_mZ(B, S6,P2, S5,P2, C6);
  stop();

  clrscrn();   
  printf(" Check if the columns of B are linearly independent\n\n"
         " BT :");
  p_mZ(transpose_mZ(B,BT), S6,P1, S5,P1, C6);  
  printf(" BTb :");
  p_mZ(c_mZ(BT,BTb), S6,P1, S5,P1, C6); 
  printf(" gj_PP_mZ(BTb) :");
  p_mZ(gj_PP_mZ(BTb), S6,P1, S5,P1, C6);       
  stop();     

  clrscrn(); 
  printf(" BTb :");
  p_mZ(BTb, S6,P1, S5,P1, C6); 
    
  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, S6,P1, S5,P1, C6);
  stop(); 

  clrscrn(); 
  printf(" gj_mZ(BTb_New) :");
  p_mZ(gj_mZ(BTb_New), S6,P2, S6,P2, C5);
    
  printf(" b_Free : Free variables");  
  p_mZ(c_Ab_b_mZ(BTb_New,b_Free), S6,P2, S6,P2, C5);  
  stop();

  clrscrn();
  printf(" AT :");
  p_mZ(AT, S6,P2, S6,P2, C5); 
  printf(" b_Free :"); 
  p_mZ(b_Free, S6,P2, S6,P2, C5); 
  printf(" AT * b_Free :"); 
  p_mZ(mul_mZ(AT,b_Free,AT_bFree), S6,P2, S6,P2, C5); 
  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 :
 +10  -2i  -12 +10i  -14 -12i  +18 +12i  +14 +16i 
 +15  -3i  -18 +15i  -21 -18i  +27 +18i  +21 +24i 
 +35  -7i  -42 +35i  -49 -42i  +63 +42i  +49 +56i 
 +25  -5i  -30 +25i  -35 -30i  +45 +30i  +35 +40i 
 +30  -6i  -36 +30i  -42 -36i  +54 +36i  +42 +48i 

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

 Ab :
 +10  -2i  -12 +10i  -14 -12i  +18 +12i  +14 +16i   +0  +0i 
 +15  -3i  -18 +15i  -21 -18i  +27 +18i  +21 +24i   +0  +0i 
 +35  -7i  -42 +35i  -49 -42i  +63 +42i  +49 +56i   +0  +0i 
 +25  -5i  -30 +25i  -35 -30i  +45 +30i  +35 +40i   +0  +0i 
 +30  -6i  -36 +30i  -42 -36i  +54 +36i  +42 +48i   +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 :
+10.00-2.00i -12.00+10.00i -14.00-12.00i +18.00+12.00i +14.00+16.00i 
+15.00-3.00i -18.00+15.00i -21.00-18.00i +27.00+18.00i +21.00+24.00i 
+35.00-7.00i -42.00+35.00i -49.00-42.00i +63.00+42.00i +49.00+56.00i 
+25.00-5.00i -30.00+25.00i -35.00-30.00i +45.00+30.00i +35.00+40.00i 
+30.00-6.00i -36.00+30.00i -42.00-36.00i +54.00+36.00i +42.00+48.00i 

 gj_PP_mZ(Ab) :
 +1.00+0.00i  -1.35+0.73i  -1.12-1.42i  +1.50+1.50i  +1.04+1.81i  +0.00+0.00i 
 -0.00+0.00i  +0.00-0.00i  +0.00+0.00i  -0.00-0.00i  +0.00-0.00i  +0.00+0.00i 
 -0.00+0.00i  +0.00+0.00i  +0.00+0.00i  -0.00-0.00i  +0.00-0.00i  +0.00+0.00i 
 -0.00+0.00i  +0.00+0.00i  +0.00+0.00i  -0.00-0.00i  +0.00-0.00i  +0.00+0.00i 
 -0.00+0.00i  +0.00-0.00i  +0.00+0.00i  -0.00-0.00i  +0.00-0.00i  +0.00+0.00i 

 B :
+10.00-2.00i  +0.00+0.00i 
+15.00-3.00i  +0.00+0.00i 
+35.00-7.00i  +0.00+0.00i 
+25.00-5.00i  +0.00+0.00i 
+30.00-6.00i  +0.00+0.00i 

 Press return to continue. 


 Check if the columns of B are linearly independent

 BT :
 +10.0 -2.0i  +15.0 -3.0i  +35.0 -7.0i  +25.0 -5.0i  +30.0 -6.0i 
  +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i 

 BTb :
 +10.0 -2.0i  +15.0 -3.0i  +35.0 -7.0i  +25.0 -5.0i  +30.0 -6.0i   +0.0 +0.0i 
  +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i 

 gj_PP_mZ(BTb) :
  +1.0 +0.0i   +1.5 +0.0i   +3.5 +0.0i   +2.5 +0.0i   +3.0 +0.0i   +0.0 +0.0i 
  +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i 

 Press return to continue. 


 BTb :
  +1.0 +0.0i   +1.5 +0.0i   +3.5 +0.0i   +2.5 +0.0i   +3.0 +0.0i   +0.0 +0.0i 
  +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i 

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

 Ab_New :
  +1.0 +0.0i   +1.5 +0.0i   +3.5 +0.0i   +2.5 +0.0i   +3.0 +0.0i   +0.0 +0.0i 
  +0.0 +0.0i   +1.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i 
  +0.0 +0.0i   +0.0 +0.0i   +1.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i 
  +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +1.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i 
  +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +1.0 +0.0i   +0.0 +0.0i 

  +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i 
  +1.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i 
  +0.0 +0.0i   +1.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i 
  +0.0 +0.0i   +0.0 +0.0i   +1.0 +0.0i   +0.0 +0.0i 
  +0.0 +0.0i   +0.0 +0.0i   +0.0 +0.0i   +1.0 +0.0i 

 Press return to continue. 


 gj_mZ(BTb_New) :
 +1.00 +0.00i  +0.00 -0.00i  +0.00 -0.00i  +0.00 -0.00i  +0.00 -0.00i 
 +0.00 +0.00i  +1.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +1.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +1.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +1.00 +0.00i 

 +0.00 -0.00i  -1.50 -0.00i  -3.50 -0.00i  -2.50 -0.00i  -3.00 -0.00i 
 +0.00 +0.00i  +1.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +1.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +1.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +1.00 +0.00i 

 b_Free : Free variables
 +0.00 -0.00i  -1.50 -0.00i  -3.50 -0.00i  -2.50 -0.00i  -3.00 -0.00i 
 +0.00 +0.00i  +1.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +1.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +1.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +1.00 +0.00i 

 Press return to continue. 


 AT :
+10.00 -2.00i +15.00 -3.00i +35.00 -7.00i +25.00 -5.00i +30.00 -6.00i 
-12.00+10.00i -18.00+15.00i -42.00+35.00i -30.00+25.00i -36.00+30.00i 
-14.00-12.00i -21.00-18.00i -49.00-42.00i -35.00-30.00i -42.00-36.00i 
+18.00+12.00i +27.00+18.00i +63.00+42.00i +45.00+30.00i +54.00+36.00i 
+14.00+16.00i +21.00+24.00i +49.00+56.00i +35.00+40.00i +42.00+48.00i 

 b_Free :
 +0.00 -0.00i  -1.50 -0.00i  -3.50 -0.00i  -2.50 -0.00i  -3.00 -0.00i 
 +0.00 +0.00i  +1.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +1.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +1.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +1.00 +0.00i 

 AT * b_Free :
 +0.00 +0.00i  +0.00 +0.00i  -0.00 +0.00i  -0.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +0.00 -0.00i  +0.00 -0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  -0.00 -0.00i  -0.00 -0.00i  +0.00 +0.00i 
 +0.00 +0.00i  +0.00 +0.00i  -0.00 -0.00i  -0.00 -0.00i  +0.00 +0.00i 

 Press return to continue.