Aller au contenu

Mathc matrices/c11gn

Un livre de Wikilivres.


Fonctions matricielles ex : cos(A)

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

c00a.c
/* ------------------------------------ */
/*  Save as:  c00a.c                    */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define   RCA        RC5
/* ------------------------------------ */
/* ------------------------------------ */
double f(
double x)
{  
        return(sin(x)*sin(x));
}
char  feq[] = "sin(x)*sin(x)";
/* ------------------------------------ */
double g(
double x)
{  
        return(cos(x)*cos(x));
}
char  geq[] = "cos(x)*cos(x)";
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
{
double **A              = rsymmetric_mR( i_mR(RCA,RCA),999.);
double **sinA_P2        =                i_mR(RCA,RCA);
double **cosA_P2        =                i_mR(RCA,RCA);

double **EVector        =                i_mR(RCA,RCA);
double **EVectorT       =                i_mR(RCA,RCA);

double **EValue         =                i_mR(RCA,RCA);
double **sinA_P2_EValue =                i_mR(RCA,RCA);
double **cosA_P2_EValue =                i_mR(RCA,RCA);

double **T1         =                i_mR(RCA,RCA);
  
  clrscrn();
  printf(" A:");
  p_mR(A,S10,P4,C6); 
  stop();

  clrscrn();
  eigs_V_mR(A,EVector); 
  transpose_mR(EVector,EVectorT);
      
/* EValue = EVectorT A EVector */
  mul_mR(EVectorT,A,T1);
  mul_mR(T1,EVector,EValue);     

  printf(" sin(A)**2");
  f_eigs_mR(f,EValue,sinA_P2_EValue);

/*  sinA_P2 = EVector  sinA_P2_EValue  EVectorT */  
 
    mul_mR(EVector,sinA_P2_EValue,T1);
    mul_mR(T1,EVectorT,sinA_P2); 
      p_mR(sinA_P2,S10,P4,C6); 
 
  printf(" cos(A)**2");
  f_eigs_mR(g,EValue,cosA_P2_EValue); 
  
/*  cosA_P2 = EVector  cosA_P2_EValue  EVectorT */ 

     mul_mR(EVector,cosA_P2_EValue,T1);
     mul_mR(T1,EVectorT,cosA_P2);
       p_mR(cosA_P2,S10,P4,C6); 
            
  printf(" Ide: cos(A)**2 + sin(A)**2");
  add_mR(sinA_P2,cosA_P2,T1);
    p_mR(T1,S10,P4,C6);        
   
  f_mR(A);
  f_mR(sinA_P2);
  f_mR(cosA_P2);
    
  f_mR(EVector);
  f_mR(EVectorT);
  
  f_mR(EValue);
  f_mR(cosA_P2_EValue);    
  f_mR(sinA_P2_EValue);    
      
  f_mR(T1);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun();

} while(stop_w());

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Exemple de sortie écran :
 A:
  +20.0000  +709.0000  +498.0000  +172.0000  -394.0000 
 +709.0000  -221.0000  -342.0000  -931.0000  -743.0000 
 +498.0000  -342.0000  +206.0000   -38.0000  -587.0000 
 +172.0000  -931.0000   -38.0000   +55.0000  +914.0000 
 -394.0000  -743.0000  -587.0000  +914.0000  +753.0000 

 Press return to continue. 


 sin(A)**2
   +0.6255    -0.2229    +0.0451    -0.0637    -0.0215 
   -0.2229    +0.7666    +0.0617    +0.0720    +0.0750 
   +0.0451    +0.0617    +0.8170    +0.0572    +0.1250 
   -0.0637    +0.0720    +0.0572    +0.7974    -0.1899 
   -0.0215    +0.0750    +0.1250    -0.1899    +0.6702 

 cos(A)**2
   +0.3745    +0.2229    -0.0451    +0.0637    +0.0215 
   +0.2229    +0.2334    -0.0617    -0.0720    -0.0750 
   -0.0451    -0.0617    +0.1830    -0.0572    -0.1250 
   +0.0637    -0.0720    -0.0572    +0.2026    +0.1899 
   +0.0215    -0.0750    -0.1250    +0.1899    +0.3298 

 Ide: cos(A)**2 + sin(A)**2
   +1.0000    -0.0000    -0.0000    -0.0000    -0.0000 
   -0.0000    +1.0000    +0.0000    +0.0000    +0.0000 
   -0.0000    +0.0000    +1.0000    +0.0000    -0.0000 
   -0.0000    +0.0000    +0.0000    +1.0000    +0.0000 
   -0.0000    +0.0000    -0.0000    +0.0000    +1.0000 


 Press   return to continue
 Press X return to stop