Aller au contenu

Mathc complexes/08a

Un livre de Wikilivres.


Fonctions matricielles dans C. Matrices Non symétriques conjugués

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

c00b.c
/* ------------------------------------ */
/*  Save as :   c00c.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define FACTOR_E    +1.E-0         
#define RCA          RC3  
/* ------------------------------------ */
/* ------------------------------------ */
double **EV_cosh2A_mZ(
double **EV,
double **EV_cosh2A
)
{
int  r;
int  c;

nb_Z cosh2A;

  for (   r=R1; r<EV[R_SIZE][C0]; r++)
    for ( c=C1; c<EV[C_SIZE][C0]; c+=C2)

        if(((r-R1)*C2)==c-C1)
          {
           cosh2A = cosh_Z(i_Z(2.*EV[r][c],2.*EV[r][c+C1]));
           
           EV_cosh2A[r][c   ] = cosh2A.r;
           EV_cosh2A[r][c+C1] = cosh2A.i;
          }
              
 return(EV_cosh2A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **EV_Ipls2sinhA_2_mZ(
double **EV,
double **EV_Ipls2sinhA_2
)
{
int  r;
int  c;

nb_Z sinha;
nb_Z Ipls = {1,0};

nb_Z Ipls2sinhA_2;

  for (   r=R1; r<EV[R_SIZE][C0]; r++)
    for ( c=C1; c<EV[C_SIZE][C0]; c+=C2)

        if(((r-R1)*C2)==c-C1)
          {
                  sinha = sinh_Z(i_Z( EV[r][c], EV[r][c+C1]));
           Ipls2sinhA_2 = add_Z(Ipls,smul_Z(2., mul_Z(sinha,sinha))); 
           
           EV_Ipls2sinhA_2[r][c   ] = Ipls2sinhA_2.r;
           EV_Ipls2sinhA_2[r][c+C1] = Ipls2sinhA_2.i;
          }
              
 return(EV_Ipls2sinhA_2);
}
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
{                               
double **A                       = i_mZ(RCA,RCA);

double **V                       = i_mZ(RCA,RCA);
double **invV                    = i_mZ(RCA,RCA);
double **T                       = i_mZ(RCA,RCA);

double **EV               = i_mZ(RCA,RCA);
double **EV_cosh2a         = i_mZ(RCA,RCA);
double **EV_Ipls2sinhA_2 = i_mZ(RCA,RCA);

double **cosh2a                   =       i_mZ(RCA,RCA);
double **Ipls2sinhA_2           =       i_mZ(RCA,RCA);

   do
  {
       rE_mZ(A,999,+1.E-4);  
   eigs_V_mZ(A,V,FACTOR_E);
  }while(!det_Z(V).r);
  
  clrscrn();
  printf(" A :");
  p_mZ(A, S9,P4, S8,P4, C3);

  printf(" V :");
  eigs_V_mZ(A,V,FACTOR_E);
  pE_mZ(V, S12,P4, S12,P4, C3);
  
  printf(" inv(V) ... Some time the matrix is not invertible :");
  inv_mZ(V,invV);
  pE_mZ(invV, S12,P4, S12,P4, C3);
  
  printf(" EV = invV * A * V");
  mul_mZ(invV,A,T);
  mul_mZ(T,V,EV); 
  pE_mZ(clean_eyes_mZ(EV), S12,P4, S12,P4, C3);
  stop();

  clrscrn();  
  printf(" cosh(2*A)        :");
  EV_cosh2A_mZ(EV,EV_cosh2a);
   
  mul_mZ(V,EV_cosh2a,T);
  mul_mZ(T,invV,cosh2a); 
  pE_mZ(cosh2a, S12,P4, S8,P4, C3);

  printf(" 1+2sinh(A)**2 :");
  EV_Ipls2sinhA_2_mZ(EV,EV_Ipls2sinhA_2);
   
  mul_mZ(V,EV_Ipls2sinhA_2,T);
  mul_mZ(T,invV,Ipls2sinhA_2); 
  pE_mZ(Ipls2sinhA_2, S12,P4, S8,P4, C3);  
  
  f_mZ(A);
  
  f_mZ(V);  
  f_mZ(invV);  
  f_mZ(T);  
  
  f_mZ(EV);
  
  f_mZ(EV_cosh2a);   
  f_mZ(cosh2a); 
  
  f_mZ(EV_Ipls2sinhA_2);   
  f_mZ(Ipls2sinhA_2);     
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
    fun();
    
} while(stop_w());

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
   Nous avons vu que :
   
   cosh(x+y) = cosh(x) cosh(y) + sinh(x) sinh(y)

   posons x = y 
           
   cosh(x+x) = cosh(x) cosh(x) + sinh(x) sinh(x)            
           
           
1) cosh(2x) =  cosh(x)**2    + sinh(x)**2      cosh(x)**2-sinh(x)**2 = 1
                                               cosh(x)**2            = 1+sinh(x)**2    
   cosh(2x) = (1+sinh(x)**2) + sinh(x)**2    
    
   cosh(2x) =  1 + 2*sinh(x)**2
Exemple de sortie écran :
 A :
  +0.0672 +0.0364i   +0.0693 +0.0531i   +0.0753 +0.0813i 
  +0.0556 -0.0418i   +0.0351 -0.0991i   +0.0752 -0.0426i 
  -0.0002 -0.0505i   +0.0676 +0.0001i   +0.0380 -0.0699i 

 V :
 +9.2607e-03 +6.8623e-01i  -1.8211e-01 -8.7905e-02i  -6.8387e-01 -3.1647e-01i 
 +5.0729e-01 +6.4267e-03i  -6.5271e-01 +9.1736e-03i  -1.3753e-01 +9.0461e-02i 
 +5.2118e-01 +0.0000e+00i  +7.3007e-01 +0.0000e+00i  +6.3645e-01 -1.7665e-17i 

 inv(V) ... Some time the matrix is not invertible :
 +4.5804e-01 -3.4885e-01i  +6.9352e-01 -3.0249e-01i  +7.7250e-01 -3.1102e-01i 
 +4.1535e-01 -5.7891e-01i  -1.2384e+00 -2.3696e-01i  +4.3288e-01 -2.9069e-01i 
 -8.5153e-01 +9.4972e-01i  +8.5267e-01 +5.1952e-01i  +4.4208e-01 +5.8813e-01i 

 EV = invV * A * V
 +1.7029e-01 -7.0130e-02i  +0.0000e+00 +0.0000e+00i  +0.0000e+00 +0.0000e+00i 
 +0.0000e+00 +0.0000e+00i  -2.8469e-02 -5.6519e-02i  +0.0000e+00 +0.0000e+00i 
 +0.0000e+00 +0.0000e+00i  +0.0000e+00 +0.0000e+00i  -1.5172e-03 -5.9514e-03i 

 Press return to continue. 


 cosh(2*A)        :
 +1.0269e+00+2.0726e-03i  +3.1368e-02+1.3015e-02i  +3.6644e-02+1.3976e-02i 
 +1.6731e-03-2.3282e-02i  +1.0050e+00-1.9828e-02i  +1.1652e-02-2.9202e-02i 
 +3.9557e-03-1.6438e-02i  +1.5133e-02-3.0124e-02i  +1.0113e+00-2.4320e-02i 

 1+2sinh(A)**2 :
 +1.0269e+00+2.0726e-03i  +3.1368e-02+1.3015e-02i  +3.6644e-02+1.3976e-02i 
 +1.6731e-03-2.3282e-02i  +1.0050e+00-1.9828e-02i  +1.1652e-02-2.9202e-02i 
 +3.9557e-03-1.6438e-02i  +1.5133e-02-3.0124e-02i  +1.0113e+00-2.4320e-02i 


 Press   return to continue
 Press X return to stop