Mathc matrices/c20p

Un livre de Wikilivres.


Application


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


c00i.c
/* ------------------------------------ */
/*  Save as :   c00i.c                  */
/* ------------------------------------ */
#include "v_a.h"
#include "dot_diag.h"
/* ------------------------------------ */
void fun(int r)
{
double **A     = rpdiag_mR(i_mR(r,r),9.);
double **U      =     r_mR(i_mR(r,r),9.);
double **Q      =          i_mR(r,r);
double **R      =          i_mR(r,r);
double **QR     =          i_mR(r,r);

  clrscrn();
  
  printf(" A :");
  p_mR(A,S3,P3,C6);
  
  printf(" U :");
  p_mR(U,S3,P3,C6);
  stop();
  
  clrscrn();  
  QR_Diag_mR(A,U,Q,R);
      
  printf(" Q :");
  p_mR(Q,S3,P5,C6);
  
  printf(" R :");
  p_mR(R,S10,P5,C6);
  stop();
  
  clrscrn();
  printf(" U :");
  p_mR(U,S3,P3,C6);
  
  printf(" U = Q * R  :");  
  mul_mR(Q,R, QR);
  p_mR(QR,S3,P3,C6); 
 
  f_mR(A);
  f_mR(U);
  f_mR(Q);
  f_mR(R);
  f_mR(QR);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun(rp_I(R3)+R2);

} while(stop_w());

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */


On calcul la qr décomposition.


Exemple de sortie écran :
 ------------------------------------ 
 A :
+4.000 +0.000 +0.000 +0.000 +0.000 
+0.000 +5.000 +0.000 +0.000 +0.000 
+0.000 +0.000 +9.000 +0.000 +0.000 
+0.000 +0.000 +0.000 +6.000 +0.000 
+0.000 +0.000 +0.000 +0.000 +7.000 

 U :
+3.000 +8.000 +3.000 +9.000 +6.000 
+6.000 +2.000 -2.000 +6.000 -6.000 
-5.000 +1.000 +6.000 -9.000 -6.000 
+7.000 +7.000 +4.000 +6.000 -1.000 
+4.000 -2.000 -7.000 +8.000 +5.000 

 Press return to continue. 

 ------------------------------------ 
 Q :
+0.10308 +0.31428 -0.37084 -0.01879 -0.05224 
+0.20616 -0.02194 +0.08495 -0.32395 -0.21179 
-0.17180 +0.14219 +0.06282 -0.19425 +0.14035 
+0.24052 +0.19123 +0.20343 +0.09826 +0.14563 
+0.13744 -0.16951 -0.13628 -0.10443 +0.25643 

 R :
 +29.10326  +11.99178  -11.06405  +40.16732   +8.93371 
  +0.00000  +21.52202  +24.56451   -3.46983   -6.55752 
  -0.00000   -0.00000   +9.65256  -16.19801  -20.83125 
  -0.00000   -0.00000   +0.00000   +3.02846  +15.51242 
  +0.00000   +0.00000   -0.00000   +0.00000   +5.62242 

 Press return to continue. 

 ------------------------------------ 
 U :
+3.000 +8.000 +3.000 +9.000 +6.000 
+6.000 +2.000 -2.000 +6.000 -6.000 
-5.000 +1.000 +6.000 -9.000 -6.000 
+7.000 +7.000 +4.000 +6.000 -1.000 
+4.000 -2.000 -7.000 +8.000 +5.000 

 U = Q * R  :
+3.000 +8.000 +3.000 +9.000 +6.000 
+6.000 +2.000 -2.000 +6.000 -6.000 
-5.000 +1.000 +6.000 -9.000 -6.000 
+7.000 +7.000 +4.000 +6.000 -1.000 
+4.000 -2.000 -7.000 +8.000 +5.000 


 Press return to continue
 Press X      to stop