Aller au contenu

Mathc matrices/07f

Un livre de Wikilivres.


Application

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

c00a.c
/* ------------------------------------ */
/*  Xave as :   c00a.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define RA R5
#define CA C5 
#define Cb C1 
/* ------------------------------------ */
#define FACTOR_E  +1.E-1   
/* ------------------------------------ */
/* ------------------------------------ */
int main(void)
{
double ta[RA*CA]={
/* x**2     y**2     x        y        e     */
  +1.00,   +0.00,   +0.00,   +0.00,   +0.00, 
  +0.00,   +1.00,   +0.00,   +0.00,   +0.00,    
  +1.00,   +4.00,   +1.00,   -2.00,   +1.00,     
  +4.00,   +9.00,   +2.00,   -3.00,   +1.00,   
  +9.00,  +36.00,   +3.00,   +6.00,   +1.00 
};

double tb[RA*C1]={
/*     b  */
      +1,   
      +1,   
      +0,   
      +0,   
      +0,  
};
    
double **A   =      ca_A_mRZ(ta,i_mZ(RA,CA));
double **A_T = ctranspose_mZ(A, i_mZ(CA,RA));
 
double **b =       ca_A_mRZ(tb, i_mZ(RA,C1));

double **x =                    i_mZ(CA,C1);

double **V =                    i_mZ(CA,CA);
double **V_T =                  i_mZ(CA,CA);

double **U =                    i_mZ(RA,CA);
double **U_T =                  i_mZ(CA,RA);  

double **U_TA =                 i_mZ(CA,CA);  // CA,RA RA,CA  :CA,CA

double **U_TAV =                i_mZ(CA,CA);  // CA,CA CA,CA  :CA,CA  

double **invU_TAV =             i_mZ(CA,CA);  //              :CA,CA 

double **V_invU_TAV =           i_mZ(CA,CA);  // CA,CA CA,CA  :CA,CA 

double **Pinv =                 i_mZ(CA,RA);   
//       Pinv = V_invU_TAV * U_T              // CA,CA CA,RA  :CA,RA

  clrscrn();
  printf(" A :");
  p_mRZ(A, S10,P2, C6);
  
  printf(" b :");
  p_mRZ(b, S10,P2, C6);
  stop(); 
   
  clrscrn();  
  printf(" U :");
  X_U_mZ(A_T,U,FACTOR_E);
    p_mRZ(U, S10,P4, C6);
    
  printf(" V :");
  X_V_mZ(A_T,V,FACTOR_E);
    p_mRZ(V, S10,P4, C6); 
  
  ctranspose_mZ(U,U_T);
  ctranspose_mZ(V,V_T);  
  stop(); 
   
  clrscrn();   
  printf(" U_TAV :");
  mul_mZ(U_T, A, U_TA);              // U_TA    CA,RA RA,CA  :CA,CA
  mul_mZ(U_TA, V, U_TAV );           //     V                :CA,CA
    p_mRZ(U_TAV, S11,P4, C6);        // U_TAV   CA,CA CA,CA  :CA,CA
   
  printf(" inv(U_TAV) :");
  X_inv_mZ(U_TAV, invU_TAV);      
     pE_mRZ(invU_TAV, S10,P4, C6);
 
  printf(" Pinv =  V * inv(U_TAV) * U_T:"); 
  mul_mZ(V, invU_TAV, V_invU_TAV);
  mul_mZ(V_invU_TAV, U_T, Pinv); 
   pE_mRZ(Pinv, S13,P4, C6);
  stop(); 
   
   clrscrn();      
   printf("      A x =      b   \n"  
          " Pinv A x = Pinv b   \n"  
          " Ide    x = Pinv b \n\n"                        
          "        x = Pinv b  ");   
   mul_mZ(Pinv, b, x); 
   p_mRZ(x, S12,P4, C6); 
  printf(" The coefficients a, b, c, d, e, of the curve are : \n\n"
         "  %+.2fx**2 %+.2fy**2 %+.2fx %+.2fy %+.2f = 0\n\n"
            ,x[R1][C1],x[R2][C1],x[R3][C1],x[R4][C1],x[R5][C1]);  
   stop();  
   
   f_mZ(A);
   f_mZ(A_T);

   f_mZ(b);
   f_mZ(x);
      
   f_mZ(V);
   f_mZ(V_T);
     
   f_mZ(U);
   f_mZ(U_T);
   f_mZ(U_TA);
   
   f_mZ(invU_TAV);
   f_mZ(V_invU_TAV);
   f_mZ(Pinv);  
   
  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Exemple de sortie écran :
 A :
     +1.00      +0.00      +0.00      +0.00      +0.00 
     +0.00      +1.00      +0.00      +0.00      +0.00 
     +1.00      +4.00      +1.00      -2.00      +1.00 
     +4.00      +9.00      +2.00      -3.00      +1.00 
     +9.00     +36.00      +3.00      +6.00      +1.00 

 b :
     +1.00 
     +1.00 
     +0.00 
     +0.00 
     +0.00 

 Press return to continue. 


 U :
   +0.0064    -0.0504    -0.6941    +0.6095    -0.3796 
   +0.0245    -0.0028    +0.1931    -0.3510    -0.9159 
   +0.1010    -0.4686    +0.6238    +0.6095    -0.0980 
   +0.2415    -0.8426    -0.3028    -0.3643    +0.0848 
   +0.9648    +0.2604    +0.0102    +0.0323    +0.0148 

 V :
   +0.2497    +0.2792    -0.9087    +0.1784    -0.0458 
   +0.9556    +0.0155    +0.2528    -0.1027    -0.1105 
   +0.0890    +0.2479    +0.0373    -0.0761    +0.9610 
   +0.1244    -0.9079    -0.2120    +0.2305    +0.2492 
   +0.0335    +0.1898    +0.2530    +0.9480    +0.0133 

 Press return to continue. 


 U_TAV :
   +39.0707     +0.0000     +0.0000     -0.0000     +0.0000 
    +0.0000     -5.5374     -0.0000     +0.0000     -0.0000 
    -0.0000     -0.0000     +1.3092     -0.0000     +0.0000 
    -0.0000     -0.0000     +0.0000     +0.2927     -0.0000 
    -0.0000     -0.0000     -0.0000     +0.0000     +0.1206 

 inv(U_TAV) :
+2.5595e-02 +0.0000e+00 +0.0000e+00 +0.0000e+00 +0.0000e+00 
+0.0000e+00 -1.8059e-01 +0.0000e+00 +0.0000e+00 +0.0000e+00 
+0.0000e+00 +0.0000e+00 +7.6385e-01 +0.0000e+00 +0.0000e+00 
+0.0000e+00 +0.0000e+00 +0.0000e+00 +3.4164e+00 +0.0000e+00 
+0.0000e+00 +0.0000e+00 +0.0000e+00 +0.0000e+00 +8.2905e+00 

 Pinv =  V * inv(U_TAV) * U_T:
  +1.0000e+00   +8.1428e-11   +1.3765e-11   -1.0077e-11   -1.1787e-12 
  -2.6767e-11   +1.0000e+00   -1.7148e-11   +1.1344e-11   +1.7893e-13 
  -3.2000e+00   -7.2000e+00   -9.0000e-01   +8.0000e-01   +1.0000e-01 
  -2.0000e-01   -2.2000e+00   +1.0000e-01   -2.0000e-01   +1.0000e-01 
  +1.8000e+00   -1.2000e+00   +2.1000e+00   -1.2000e+00   +1.0000e-01 

 Press return to continue. 


      A x =      b   
 Pinv A x = Pinv b   
 Ide    x = Pinv b 

        x = Pinv b  
     +1.0000 
     +1.0000 
    -10.4000 
     -2.4000 
     +0.6000 

 The coefficients a, b, c, d, e, of the curve are : 

  +1.00x**2 +1.00y**2 -10.40x -2.40y +0.60 = 0

 Press return to continue.