Aller au contenu

Mathc matrices/c11in

Un livre de Wikilivres.


Fonctions matricielles ex : cos(A)

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

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

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

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

  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(2A)");
  f_eigs_mR(f,EValue,sin2A_EValue); 
  
/*  sin2A = EVector  sin2A_EValue  EVectorT */ 

     mul_mR(EVector,sin2A_EValue,T1);
     mul_mR(T1,EVectorT,sin2A); 
       p_mR(sin2A,S10,P4,C6); 

  printf(" 2 sin(A) cos(A)");
  f_eigs_mR(g,EValue,TwosincosA_EValue);

/*  TwosincosA = EVector  TwosincosA_EValue  EVectorT */
  
     mul_mR(EVector,TwosincosA_EValue,T1);
     mul_mR(T1,EVectorT,TwosincosA);
       p_mR(TwosincosA,S10,P4,C6); 
            
  f_mR(A);
  f_mR(sin2A);
  f_mR(TwosincosA);
    
  f_mR(EVector);
  f_mR(EVectorT);
  
  f_mR(EValue);
  f_mR(TwosincosA_EValue);    
  f_mR(sin2A_EValue);    
      
  f_mR(T1);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun();

} while(stop_w());

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Vérifions les égalités :
   Nous savons que :
   
   sin(x+y) = cos(x)sin(y)+sin(x)cos(y)
       
   posons x = y 
           
   sin(x+x) = cos(x)sin(x)+sin(x)cos(x)            
           
           
   sin(2x) = 2 cos(x)sin(x)
Exemple de sortie écran :
A:
 -552.0000  -897.0000  -986.0000  -531.0000  -186.0000 
 -897.0000   +65.0000  +272.0000  -755.0000  -659.0000 
 -986.0000  +272.0000  -448.0000  +582.0000  -941.0000 
 -531.0000  -755.0000  +582.0000  +821.0000  -818.0000 
 -186.0000  -659.0000  -941.0000  -818.0000  +681.0000 

 sin(2 A)
   -0.7523    -0.1290    -0.0696    +0.0107    +0.0857 
   -0.1290    -0.0338    -0.5954    +0.2266    -0.0795 
   -0.0696    -0.5954    +0.2256    -0.5365    -0.1537 
   +0.0107    +0.2266    -0.5365    -0.1129    -0.0821 
   +0.0857    -0.0795    -0.1537    -0.0821    -0.6507 

 2 sin(A) cos(A)
   -0.7523    -0.1290    -0.0696    +0.0107    +0.0857 
   -0.1290    -0.0338    -0.5954    +0.2266    -0.0795 
   -0.0696    -0.5954    +0.2256    -0.5365    -0.1537 
   +0.0107    +0.2266    -0.5365    -0.1129    -0.0821 
   +0.0857    -0.0795    -0.1537    -0.0821    -0.6507 


 Press   return to continue
 Press X return to stop