Aller au contenu

Mathc matrices/03k

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(sinh(2*x));
}
char  feq[] = "sinh(2*x)";
/* ------------------------------------ */
double g(
double x)
{  
        return(2*sinh(x)*cosh(x));
}
char  geq[] = "2*sinh(x)*cosh(x)";
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
{
double **A                   = rEsymmetric_mR( i_mR(RCA,RCA),999,+1.E-4);
double **sinh2A              =                 i_mR(RCA,RCA);
double **TwosinhcoshA        =                 i_mR(RCA,RCA);

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

double **EValue              =                 i_mR(RCA,RCA);
double **sinh2A_EValue       =                 i_mR(RCA,RCA);
double **TwosinhcoshA_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(" sinh(2A)");
  f_eigs_mR(f,EValue,sinh2A_EValue); 
  
/*  sinh2A = EVector  sinh2A_EValue  EVectorT */ 

     mul_mR(EVector,sinh2A_EValue,T1);
     mul_mR(T1,EVectorT,sinh2A); 
       p_mR(sinh2A, S10,P4,C6); 

  printf(" 2 sinh(A) cosh(A)");
  f_eigs_mR(g,EValue,TwosinhcoshA_EValue);

/*  TwosinhcoshA = EVector  TwosinhcoshA_EValue  EVectorT */
  
     mul_mR(EVector,TwosinhcoshA_EValue,T1);
     mul_mR(T1,EVectorT,TwosinhcoshA);
       p_mR(TwosinhcoshA, S10,P4,C6); 
            
  f_mR(A);
  f_mR(sinh2A);
  f_mR(TwosinhcoshA);
    
  f_mR(EVector);
  f_mR(EVectorT);
  
  f_mR(EValue);
  f_mR(TwosinhcoshA_EValue);    
  f_mR(sinh2A_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 :
   
   sinh(x+y) = cosh(x) sinh(y) + sinh(x) cosh(y)
       
   posons x = y 
           
   sinh(x+x) = cosh(x) sinh(x) + sinh(x) cosh(x)           
           
           
   sinh(2x) = 2 cosh(x) sinh(x)
Exemple de sortie écran :
 A:
   +0.0143    -0.0094    +0.0092    +0.0015    -0.0009 
   -0.0094    +0.0170    -0.0063    -0.0141    +0.0029 
   +0.0092    -0.0063    +0.0090    -0.0000    +0.0025 
   +0.0015    -0.0141    -0.0000    +0.0282    +0.0030 
   -0.0009    +0.0029    +0.0025    +0.0030    +0.0124 

 sinh(2A)
   +0.0287    -0.0188    +0.0184    +0.0031    -0.0019 
   -0.0188    +0.0341    -0.0125    -0.0282    +0.0057 
   +0.0184    -0.0125    +0.0181    -0.0000    +0.0050 
   +0.0031    -0.0282    -0.0000    +0.0564    +0.0061 
   -0.0019    +0.0057    +0.0050    +0.0061    +0.0248 

 2 sinh(A) cosh(A)
   +0.0287    -0.0188    +0.0184    +0.0031    -0.0019 
   -0.0188    +0.0341    -0.0125    -0.0282    +0.0057 
   +0.0184    -0.0125    +0.0181    -0.0000    +0.0050 
   +0.0031    -0.0282    -0.0000    +0.0564    +0.0061 
   -0.0019    +0.0057    +0.0050    +0.0061    +0.0248 


 Press   return to continue
 Press X return to stop