Mathc matrices/c24w

Un livre de Wikilivres.


Application


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


c04d.c
/* ------------------------------------ */
/*  Save as :  c04d.c                   */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
#define   RA R4
#define   CA C4

#define   RX R4
#define   CX C1
/* ------------------------------------ */
/* ------------------------------------ */
int main(void)
{
double a[RA*CA]={
    +3, -4, -2, -1,
    +5, -3, -0, -2,      
    +6, -0, -3, -2,
    +3, -3, -1, -3   
};

double x_B[RX*CX]={
   +1,
   +2, 
   +3, 
   +4 
};

double b[RA*CA]={
    +1, +2, +6, +6,   
    +3, +2, +1, +6,
    +5, +5, +3, +6,
    +5, +5, +2, +4, 
};

double **A   = ca_A_mR(a, i_mR(RA,CA));
double **B   = ca_A_mR(b, i_mR(RA,CA));
double **D     =          i_mR(RA,CA) ;

double **X_B = ca_A_mR(x_B,  i_mR(RX,CX));
double **X   = mul_mR(B,X_B, i_mR(RX,CX));
double **T   =               i_mR(RA,CX) ;

double **invB  =  inv_mR(B, i_mR(RA,CA));
double **invBA =            i_mR(RA,CA) ;

double **DX_B  =            i_mR(RA,CX) ;

/* D = invB*A*B        */
  mul_mR(invB,A,invBA);       
  mul_mR(invBA,B,D);
/* [T(x)]_B = D*x_B    */ 
  mul_mR(D,X_B,DX_B);   
  
  clrscrn();  
  printf(" In the Standard basis\n"
         " T(x) = A*x");
  p_mR(mul_mR(A,X,T),S4,P0,C7);
  printf(" In the the B basis  with  D = invB*A*B\n"
         " [T(x)]_B = D*x_B");
  p_mR(DX_B,S4,P0,C7);      
  printf(" Verify the result if it is the same in the two basis :\n\n"
         " With B*[x_B] = [x]  then B*[D*x_B] = [A*x]\n"
         " B*[D*x_B]");
  p_mR(mul_mR(B,DX_B,T),S4,P0,C7);  
  stop();
  
  f_mR(A);
  f_mR(B);
  f_mR(D);  
  
  f_mR(X_B);
  f_mR(X);
  f_mR(T);  
  
  f_mR(invB);  
  f_mR(invBA);  

  f_mR(DX_B);
    
  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */


 Vérifions si les résultats sont compatibles


Exemple de sortie écran :
 ------------------------------------ 
 In the Standard basis
 T(x) = A*x
-128 
 +59 
 +64 
-120 

 In the the B basis  with  D = invB*A*B
 [T(x)]_B = D*x_B
-1863 
+1765 
-783 
+483 

 Verify the result if it is the same in the two basis :

 With B*[x_B] = [x]  then B*[D*x_B] = [A*x]
 B*[D*x_B]
-128 
 +59 
 +64 
-120 

 Press return to continue.