Mathc matrices/c05a

Un livre de Wikilivres.
Aller à la navigation Aller à la recherche


Sommaire


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

Crystal Clear mimetype source c.png c05a.c
'
/* ------------------------------------ */
/*  Save as :  c05a.c                   */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
void fun(int r,int rn)
{
double **A      = r_mR(i_mR(r+rn,r),9.);
double **Q      =      i_mR(r+rn,r);
double **R      =      i_mR(r,r);
double **T      =      i_mR(r+rn,r);

  clrscrn();
  printf(" A :");
  p_mR(A,S3,P3,C6); 

  printf(" Copy/Past into the octave windows \n\n");
  p_Octave_mR(A,"a",P0);
  printf(" [Q, R] = qr (a,0) \n\n");
  stop();
 
  clrscrn();
  QR_uv_mR(A,Q,R);    
  printf(" Q :");
  p_mR(Q,S3,P5,C6);  
  printf(" R :");
  p_mR(R,S10,P5,C6);
  stop();
  
  clrscrn();
  printf(" A :");
  p_mR(A,S3,P3,C6); 
  
  printf(" A = Q * R  :");  
  mul_mR(Q,R, T);
  p_mR(T,S3,P3,C6);  
  
  f_mR(A);
  f_mR(Q);
  f_mR(R);
  f_mR(T);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun(rp_I(R3)+R1,rp_I(C3));

} while(stop_w());

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


 Vérifier avec octave les calculs.
Cette fonction n'est correcte que pour les matrices ayant un nombre de lignes égales ou supérieures aux nombres de colonnes. Utiliser pour calculer les valeurs propres et les valeurs singulière, elle fait bien son travail puisque dans les deux cas elle travaille sur des matrices carrées.


Exemple de sortie écran :
 A :
+2.000 -9.000 -1.000 
+8.000 -1.000 -1.000 
-7.000 -7.000 +8.000 
-1.000 -7.000 -9.000 
+4.000 +2.000 +2.000 

 Copy/Past into the octave windows 

 a=[
+2,-9,-1;
+8,-1,-1;
-7,-7,+8;
-1,-7,-9;
+4,+2,+2]

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

 Press return to continue.


Exemple de sortie écran :
 Q :
+0.17277 -0.72691 +0.14773 
+0.69109 -0.24835 +0.23014 
-0.60471 -0.38103 +0.57454 
-0.08639 -0.51031 -0.71368 
+0.34555 +0.06577 +0.29288 

 R :
 +11.57584   +3.28270   -4.23296 
  +0.00000  +13.16145   +2.65134 
  +0.00000   -0.00000  +11.22731 

 A = Q * R  :
+2.000 -9.000 -1.000 
+8.000 -1.000 -1.000 
-7.000 -7.000 +8.000 
-1.000 -7.000 -9.000 
+4.000 +2.000 +2.000 


 Press return to continue
 Press X      to stop