Aller au contenu

Mathc complexes/05v

Un livre de Wikilivres.


Application

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

c00b.c
/* ------------------------------------ */
/*  Xave as :   c00b.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define RA   R8
#define CA   C6 
#define Cb   C1 
/* ------------------------------------ */
#define FACTOR_E  +1.E-2   
/* ------------------------------------ */
/* ------------------------------------ */
int main(void)
{
double ta[RA*(CA+Cb)]={
//    I1    I2    I3    I4    I5    I6    
      +1,   -1,   -1,   +0,   +0,   +0,   
      +0,   +0,   +1,   -1,   -1,   +0,  
      +0,   +1,   +0,   +0,   +1,   -1,   
      -1,   +0,   +0,   +1,   +0,   +1,   
      +0,  -50,   +0,   +0,   +0,  -20,   
      +0,  +50,  -20,   +0,  -10,   +0,   
      +0,   +0,   +0,  -50,  +10,  +20,   
      +0,   +0,  -20,  -50,   +0,   +0,   
};

double tb[RA*(CA+Cb)]={
      0,
      0,
      0,
      0,
    -90,
      0, 
      0,
    -90,
};   
    
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, S8,P2, C6);
  
  printf(" b :");
  p_mRZ(b, S8,P2, C6);
  stop(); 
   
  clrscrn();
  printf(" U :");
  X_U_mZ(A_T,U,FACTOR_E);
    p_mRZ(U, S8,P4, C6);
    
  printf(" V :");
  X_V_mZ(A_T,V,FACTOR_E);
    p_mRZ(V, S8,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, S8,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,P3, C5);
  stop();  
   
  clrscrn();    
  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, S10,P3, C5);
  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, S10,P4, C6);  
   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    -1.00    -1.00    +0.00    +0.00    +0.00 
   +0.00    +0.00    +1.00    -1.00    -1.00    +0.00 
   +0.00    +1.00    +0.00    +0.00    +1.00    -1.00 
   -1.00    +0.00    +0.00    +1.00    +0.00    +1.00 
   +0.00   -50.00    +0.00    +0.00    +0.00   -20.00 
   +0.00   +50.00   -20.00    +0.00   -10.00    +0.00 
   +0.00    +0.00    +0.00   -50.00   +10.00   +20.00 
   +0.00    +0.00   -20.00   -50.00    +0.00    +0.00 

 b :
   +0.00 
   +0.00 
   +0.00 
   +0.00 
  -90.00 
   +0.00 
   +0.00 
  -90.00 

 Press return to continue.

 
 U :
 -0.0052  +0.0097  +0.0236  +0.5000  -0.1924  -0.6800 
 +0.0052  +0.0079  -0.0101  -0.5000  +0.6802  -0.1927 
 +0.0052  -0.0079  +0.0101  -0.5000  -0.6802  +0.1927 
 -0.0052  -0.0097  -0.0236  +0.5000  +0.1924  +0.6800 
 -0.5000  +0.4879  +0.5112  -0.0052  +0.0083  +0.0224 
 +0.5000  -0.5116  +0.4878  +0.0052  +0.0147  +0.0055 
 +0.5000  +0.5116  -0.4878  +0.0052  -0.0147  -0.0055 
 +0.5000  +0.4879  +0.5112  +0.0052  +0.0083  +0.0224 

 V :
 +0.0000  +0.0003  -0.0016  +0.0000  -0.2124  +0.9772 
 +0.6566  -0.6998  +0.0395  -0.2624  -0.0913  -0.0196 
 -0.2624  +0.0066  +0.6676  -0.6566  +0.2274  +0.0505 
 -0.6566  -0.6998  +0.0395  +0.2624  -0.0913  -0.0196 
 +0.0000  +0.1430  +0.3248  +0.0000  -0.9137  -0.1981 
 +0.2624  +0.0066  +0.6676  +0.6566  +0.2274  +0.0505 

 Press return to continue. 
 U_TAV :
+76.1618  +0.0000  -0.0000  +0.0000  -0.0000  -0.0000 
 +0.0000 +71.4421  +0.0000  +0.0000  +0.0000  -0.0000 
 -0.0000  -0.0000 -29.9801  -0.0000  -0.0000  +0.0000 
 -0.0000  -0.0000  +0.0000  +1.8382  +0.0000  +0.0000 
 -0.0000  -0.0000  -0.0000  +0.0000  +1.8116  +0.0000 
 +0.0000  -0.0000  -0.0000  +0.0000  -0.0000  -1.3917 

 inv(U_TAV) :
+1.313e-02 +0.000e+00 +0.000e+00 +0.000e+00 +0.000e+00 
+0.000e+00 +1.400e-02 +0.000e+00 +0.000e+00 +0.000e+00 
+0.000e+00 +0.000e+00 -3.336e-02 +0.000e+00 +0.000e+00 
+0.000e+00 +0.000e+00 +0.000e+00 +5.440e-01 +0.000e+00 
+0.000e+00 +0.000e+00 +0.000e+00 +0.000e+00 +5.520e-01 
+0.000e+00 +0.000e+00 +0.000e+00 +0.000e+00 +0.000e+00 

+0.000e+00 
+0.000e+00 
+0.000e+00 
+0.000e+00 
+0.000e+00 
-7.186e-01 


 Press return to continue. 
 Pinv =  V * inv(U_TAV) * U_T:
+5.000e-01 +5.556e-02 -5.556e-02 -5.000e-01 -1.667e-02 
-7.143e-02 +3.439e-02 +1.085e-01 -7.143e-02 -9.127e-03 
-1.786e-01 +2.712e-01 +8.598e-02 -1.786e-01 -7.540e-03 
+7.143e-02 -1.085e-01 -3.439e-02 +7.143e-02 -1.984e-03 
-8.625e-12 -3.704e-01 +3.704e-01 -7.261e-12 -5.556e-03 
+1.786e-01 -8.598e-02 -2.712e-01 +1.786e-01 -1.468e-02 

-5.556e-03 +5.556e-03 -1.667e-02 
+7.275e-03 -1.323e-04 -1.984e-03 
-1.283e-02 +5.688e-03 -1.468e-02 
+1.323e-04 -7.275e-03 -9.127e-03 
-1.296e-02 +1.296e-02 -5.556e-03 
-5.688e-03 +1.283e-02 -7.540e-03 

 Press return to continue. 
      A x =      b   
 Pinv A x = Pinv b   
 Ide    x = Pinv b 

        x = Pinv b  
   +3.0000 
   +1.0000 
   +2.0000 
   +1.0000 
   +1.0000 
   +2.0000 

 Press return to continue.