Aller au contenu

Mathc complexes/05t

Un livre de Wikilivres.


Application

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

c00a.c
/* ------------------------------------ */
/*  Save as :   c00c.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
#define RA   R8
#define CA   C6 
#define Cb   C1 
/* ------------------------------------ */       
/* ------------------------------------ */
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,   +0,   +0,   -1,   +1,   +1,   
     +1,   -1,   +0,   +0,   +0,   -1,   
    +15,  +60,   +0,   +0,   +0,   +0,   
     +0,  -60,  +15,  +15,   +0,  +15,   
     +0,   +0,   +0,  -15,  -60,   +0,   
    +15,   +0,  +15,   +0,  -60,  +15
};  

double tb[RA*(CA+Cb)]={
   +0,
   +0,
   +0,
   +0,
  +90,
   +0,
  -90,
   +0
};    
               
double **A      =  ca_A_mRZ(ta,i_mZ(RA,CA));
double **b      =  ca_A_mRZ(tb,i_mZ(RA,Cb));

double **Q      =              i_mZ(RA,CA);
double **Q_T    =              i_mZ(CA,RA);

double **R      =              i_mZ(CA,CA);
double **invR   =              i_mZ(CA,CA);

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

  clrscrn();
  printf(" Copy/Paste into the octave windows \n\n");
  p_Octave_mZ(A,"a",P0,P0);  
  printf(" [Q, R] = qr (a,0) \n\n");
  stop(); 
  
  clrscrn();  
  QR_mZ(A,Q,R);    
  printf(" Q :");
  p_mRZ(Q, S10,P3, C10);  
  printf(" R :");
  p_mRZ(R, S10,P3, C10); 
  stop(); 
  
  clrscrn();
  ctranspose_mZ(Q,Q_T);   
  printf(" Q_T :");
  pE_mRZ(Q_T,S9,P3, C6);
  inv_mZ(R,invR); 
  printf(" invR :");
  pE_mRZ(invR,S9,P3, C6);
  stop();

  clrscrn();
  printf(" Solving this system yields a unique\n"
         " least squares solution, namely   \n\n");
  mul_mZ(invR,Q_T,invR_Q_T);
  mul_mZ(invR_Q_T,b,x);
  printf(" x = invR * Q_T * b :");
  p_mRZ(x,S9,P3 ,C6);
  stop();
         
  f_mZ(A);
  f_mZ(b);
  f_mZ(Q);
  f_mZ(Q_T);
  f_mZ(R);
  f_mZ(invR);
  f_mZ(x);
      
  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Exemple de sortie écran :
 Copy/Paste into the octave windows 

 a=[
-1+0*i,+1+0*i,+1+0*i,+0+0*i,+0+0*i,+0+0*i;
+0+0*i,+0+0*i,-1+0*i,+1+0*i,-1+0*i,+0+0*i;
+0+0*i,+0+0*i,+0+0*i,-1+0*i,+1+0*i,+1+0*i;
+1+0*i,-1+0*i,+0+0*i,+0+0*i,+0+0*i,-1+0*i;
+15+0*i,+60+0*i,+0+0*i,+0+0*i,+0+0*i,+0+0*i;
+0+0*i,-60+0*i,+15+0*i,+15+0*i,+0+0*i,+15+0*i;
+0+0*i,+0+0*i,+0+0*i,-15+0*i,-60+0*i,+0+0*i;
+15+0*i,+0+0*i,+15+0*i,+0+0*i,-60+0*i,+15+0*i]

 [Q, R] = qr (a,0) 

 Press return to continue. 


 Q :
    -0.047     +0.041     +0.812     +0.016     -0.146     -0.254 
    +0.000     +0.000     -0.363     +0.063     -0.741     +0.254 
    +0.000     +0.000     +0.000     -0.058     +0.558     +0.660 
    +0.047     -0.041     -0.449     -0.022     +0.330     -0.660 
    +0.706     +0.410     +0.021     +0.288     +0.018     +0.010 
    +0.000     -0.815     +0.042     +0.289     +0.010     +0.017 
    +0.000     +0.000     +0.000     -0.863     -0.077     -0.010 
    +0.706     -0.405     +0.063     -0.286     -0.049     +0.017 

 R :
   +21.260    +42.238    +10.536     +0.000    -42.332    +10.536 
    +0.000    +73.607    -18.260    -12.227    +24.292    -18.260 
    +0.000     +0.000     +2.753     +0.268     -3.422     +2.026 
    +0.000     +0.000     +0.000    +17.390    +68.770     +0.011 
    -0.000     -0.000     -0.000     -0.000     +8.878     -0.367 
    -0.000     +0.000     +0.000     +0.000     +0.000     +1.827 

 Press return to continue. 


 Q_T :
-4.704e-02 +0.000e+00 +0.000e+00 +4.704e-02 +7.055e-01 +0.000e+00 
+4.058e-02 +0.000e+00 +0.000e+00 -4.058e-02 +4.103e-01 -8.151e-01 
+8.125e-01 -3.633e-01 +0.000e+00 -4.492e-01 +2.103e-02 +4.205e-02 
+1.603e-02 +6.309e-02 -5.750e-02 -2.162e-02 +2.881e-01 +2.888e-01 
-1.464e-01 -7.414e-01 +5.581e-01 +3.297e-01 +1.769e-02 +9.757e-03 
-2.537e-01 +2.537e-01 +6.597e-01 -6.597e-01 +1.015e-02 +1.692e-02 

+0.000e+00 +7.055e-01 
+0.000e+00 -4.049e-01 
+0.000e+00 +6.308e-02 
-8.625e-01 -2.856e-01 
-7.688e-02 -4.943e-02 
-1.015e-02 +1.692e-02 

 invR :
+4.704e-02 -2.699e-02 -3.591e-01 -1.345e-02 +2.640e-01 -8.974e-02 
-0.000e+00 +1.359e-02 +9.012e-02 +8.166e-03 -6.570e-02 +2.260e-02 
+0.000e+00 -0.000e+00 +3.633e-01 -5.589e-03 +1.833e-01 -3.661e-01 
+0.000e+00 +0.000e+00 +0.000e+00 +5.750e-02 -4.454e-01 -8.974e-02 
+0.000e+00 +0.000e+00 +0.000e+00 -0.000e+00 +1.126e-01 +2.260e-02 
-0.000e+00 +0.000e+00 -0.000e+00 +0.000e+00 +0.000e+00 +5.474e-01 

 Press return to continue. 


 Solving this system yields a unique
 least squares solution, namely   

 x = invR * Q_T * b :
   +2.000 
   +1.000 
   +1.000 
   +2.000 
   +1.000 
   +1.000 

 Press return to continue.