Aller au contenu

Mathc complexes/05s

Un livre de Wikilivres.


Application

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

c00b.c
/* ------------------------------------ */
/*  Save as :   c00b.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,   +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 **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,+1+0*i,+0+0*i,+0+0*i,+1+0*i,-1+0*i;
-1+0*i,+0+0*i,+0+0*i,+1+0*i,+0+0*i,+1+0*i;
+0+0*i,-50+0*i,+0+0*i,+0+0*i,+0+0*i,-20+0*i;
+0+0*i,+50+0*i,-20+0*i,+0+0*i,-10+0*i,+0+0*i;
+0+0*i,+0+0*i,+0+0*i,-50+0*i,+10+0*i,+20+0*i;
+0+0*i,+0+0*i,-20+0*i,-50+0*i,+0+0*i,+0+0*i]

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

 Press return to continue. 


 Q :
    +0.707     -0.007     -0.024     +0.026     +0.170     +0.469 
    +0.000     +0.000     +0.041     -0.046     -0.834     -0.226 
    +0.000     +0.014     +0.008     -0.006     +0.493     -0.712 
    -0.707     -0.007     -0.024     +0.026     +0.170     +0.469 
    +0.000     -0.707     -0.407     +0.287     -0.025     -0.039 
    +0.000     +0.707     -0.408     +0.287     -0.032     -0.015 
    +0.000     +0.000     +0.000     -0.865     +0.039     +0.034 
    +0.000     +0.000     -0.815     -0.291     -0.018     -0.020 

 R :
    +1.414     -0.707     -0.707     -0.707     +0.000     -0.707 
    +0.000    +70.721    -14.133     -0.007     -7.056    +14.119 
    +0.000     -0.000    +24.531    +40.700     +4.047     +8.114 
    +0.000     +0.000     +0.000    +57.836    -11.477    -22.990 
    +0.000     +0.000     +0.000     -0.000     +2.030     +0.954 
    +0.000     +0.000     +0.000     -0.000     -0.000     +2.625 

 Press return to continue. 


 Q_T :
+7.071e-01 +0.000e+00 +0.000e+00 -7.071e-01 +0.000e+00 +0.000e+00 
-7.070e-03 +0.000e+00 +1.414e-02 -7.070e-03 -7.070e-01 +7.070e-01 
-2.446e-02 +4.077e-02 +8.146e-03 -2.446e-02 -4.073e-01 -4.080e-01 
+2.585e-02 -4.598e-02 -5.731e-03 +2.585e-02 +2.866e-01 +2.872e-01 
+1.704e-01 -8.338e-01 +4.931e-01 +1.704e-01 -2.528e-02 -3.174e-02 
+4.687e-01 -2.257e-01 -7.117e-01 +4.687e-01 -3.854e-02 -1.493e-02 

+0.000e+00 +0.000e+00 
+0.000e+00 +0.000e+00 
+0.000e+00 -8.153e-01 
-8.645e-01 -2.908e-01 
+3.855e-02 -1.847e-02 
+3.368e-02 -1.979e-02 

 invR :
+7.071e-01 +7.070e-03 +2.446e-02 -8.564e-03 -7.260e-02 +2.824e-02 
+0.000e+00 +1.414e-02 +8.146e-03 -5.731e-03 +5.057e-04 -1.516e-01 
+0.000e+00 +0.000e+00 +4.077e-02 -2.869e-02 -2.435e-01 -2.888e-01 
-0.000e+00 +0.000e+00 -0.000e+00 +1.729e-02 +9.775e-02 +1.159e-01 
+0.000e+00 -0.000e+00 +0.000e+00 +0.000e+00 +4.926e-01 -1.791e-01 
-0.000e+00 +0.000e+00 -0.000e+00 +0.000e+00 -0.000e+00 +3.810e-01 

 Press return to continue. 


 Solving this system yields a unique
 least squares solution, namely   

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

 Press return to continue.