Mathc matrices/c05c

Un livre de Wikilivres.


Fonctions de bases


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

c05c.c
/* ------------------------------------ */
/*  Save as :   c05c.c                   */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
void fun(int r,int rn)
{
double **A      = r_mR(i_mR(r+rn,r),9.);
double **A_T    =      i_mR(r,r+rn);
double **A_TA   =      i_mR(r,r);

double **SvdValue_2 =  i_mR(r,C1);
double **SvdValue   =  i_mR(r,C1);

  clrscrn();
  printf(" A :");
  p_mR(A,S5,P0,C6);  
   
  printf(" Copy/Past into the octave windows \n\n\n");
  p_Octave_mR(A,"a",P0);
  printf(" SvdValue = svd (a,10)\n\n\n");
  stop();
  
  clrscrn();
  printf(" A :");
  p_mR(A,S5,P0,C6);  
  
  transpose_mR(A,A_T);
  mul_mR(A_T,A, A_TA);   
  
  eigs_mR(A_TA,SvdValue_2);
  printf(" SvdValue^2 :");
  p_mR(SvdValue_2,S13,P4,C1);

  printf(" SvdValue :");
  sqrt_svd_mR(SvdValue_2,SvdValue);
  p_mR(SvdValue,S13,P4,C1);  
        
  f_mR(A);
  f_mR(A_T);
  f_mR(A_TA);
  f_mR(SvdValue_2);
  f_mR(SvdValue);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun(rp_I(R4),rp0_I(R4));

} while(stop_w());

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


Vérifier avec octave les calculs.
Dans cet exemple le nombre de lignes doit être supérieur ou égal au nombre de colonnes. L'exemple suivant corrigera ce problème.



Exemple de sortie écran :
 A :
   -3    +2    +8 
   +2    +6    -3 
   +8    -1    +2 
   -1    -5    +2 
   -7    +2    -1 
   -9    +6    -1 

 Copy/Past into the octave windows 


 a=[
-3,+2,+8;
+2,+6,-3;
+8,-1,+2;
-1,-5,+2;
-7,+2,-1;
-9,+6,-1]

 SvdValue = svd (a,10)


 Press return to continue.


Exemple de sortie écran :
 A :
   -3    +2    +8 
   +2    +6    -3 
   +8    -1    +2 
   -1    -5    +2 
   -7    +2    -1 
   -9    +6    -1 

 SvdValue^2 :
   +240.21769 
    +98.54204 
    +58.24027 

 SvdValue :
    +15.49896 
     +9.92683 
     +7.63153 


 Press return to continue
 Press X      to stop