Aller au contenu

Mathc complexes/089

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.

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

nb_Z cos2A;

  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)
          {
           cos2A = cos_Z(i_Z(2.*EV[r][c],2.*EV[r][c+C1]));
           
           EV_cos2A[r][c   ] = cos2A.r;
           EV_cos2A[r][c+C1] = cos2A.i;
          }
              
 return(EV_cos2A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **EV_Imns2sinA_2_mZ(
double **EV,
double **EV_Imns2sinA_2
)
{
int  r;
int  c;

nb_Z sina;
nb_Z Imns = {1,0};

nb_Z Imns2sinA_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)
          {
                  sina = sin_Z(i_Z( EV[r][c], EV[r][c+C1]));
           Imns2sinA_2 = sub_Z(Imns,smul_Z(2., mul_Z(sina,sina))); 
           
           EV_Imns2sinA_2[r][c   ] = Imns2sinA_2.r;
           EV_Imns2sinA_2[r][c+C1] = Imns2sinA_2.i;
          }
              
 return(EV_Imns2sinA_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_cos2a         = i_mZ(RCA,RCA);
double **EV_Imns2sinA_2 = i_mZ(RCA,RCA);

double **cos2a                   =       i_mZ(RCA,RCA);
double **Imns2sinA_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(" cos(2*A)        :");
  EV_cos2A_mZ(EV,EV_cos2a);
   
  mul_mZ(V,EV_cos2a,T);
  mul_mZ(T,invV,cos2a); 
  pE_mZ(cos2a, S12,P4, S8,P4, C3);

  printf(" 1-2sin(A)**2 :");
  EV_Imns2sinA_2_mZ(EV,EV_Imns2sinA_2);
   
  mul_mZ(V,EV_Imns2sinA_2,T);
  mul_mZ(T,invV,Imns2sinA_2); 
  pE_mZ(Imns2sinA_2, S12,P4, S8,P4, C3);  
  
  f_mZ(A);
  
  f_mZ(V);  
  f_mZ(invV);  
  f_mZ(T);  
  
  f_mZ(EV);
  
  f_mZ(EV_cos2a);   
  f_mZ(cos2a); 
  
  f_mZ(EV_Imns2sinA_2);   
  f_mZ(Imns2sinA_2);     
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

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

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
 Nous avons vu que :
 
 cos(x+y) = cos(x)cos(y)-sin(x)sin(y)
 
 posons x = y 
         
 cos(x+x) = cos(x)cos(x)-sin(x)sin(x)            
         
         
 cos(2x) = cos(x)**2-sin(x)**2             cos(x)**2 + sin(x)**2 = 1
                                           cos(x)**2             = 1-sin(x)**2    
 cos(2x) = (1-sin(x)**2)-sin(x)**2    
 
 cos(2x) =  1-2*sin(x)**2
Exemple de sortie écran :
 A :
  -0.0411 +0.0759i   -0.0650 -0.0906i   +0.0567 +0.0918i 
  +0.0870 -0.0133i   +0.0491 +0.0001i   -0.0668 +0.0037i 
  -0.0445 -0.0012i   +0.0516 +0.0638i   +0.0324 -0.0773i 

 V :
 -3.8191e-01 +2.7475e-01i  -2.5750e-01 -8.1920e-01i  +3.1283e-01 +2.0515e-02i 
 -2.8710e-01 -4.4859e-01i  -1.1446e-01 +4.3936e-01i  +6.3082e-01 +3.1546e-01i 
 +7.0356e-01 +0.0000e+00i  +2.3762e-01 -1.3191e-17i  +6.3582e-01 +0.0000e+00i 

 inv(V) ... Some time the matrix is not invertible :
 -2.7417e-01 -1.5521e-01i  -4.4496e-01 +4.0485e-01i  +7.7220e-01 -9.5684e-02i 
 -3.0189e-01 +7.8396e-01i  -3.0753e-01 -4.0763e-01i  +2.7669e-01 +1.8103e-01i 
 +4.1620e-01 -1.2124e-01i  +6.0729e-01 -2.9564e-01i  +6.1489e-01 +3.8222e-02i 

 EV = invV * A * V
 +7.6647e-02 -1.5296e-01i  +0.0000e+00 +0.0000e+00i  +0.0000e+00 +0.0000e+00i 
 +0.0000e+00 +0.0000e+00i  -6.6331e-02 +1.4209e-01i  +0.0000e+00 +0.0000e+00i 
 +0.0000e+00 +0.0000e+00i  +0.0000e+00 +0.0000e+00i  +3.0084e-02 +9.5729e-03i 

 Press return to continue. 


 cos(2*A)        :
 +1.0266e+00+3.5186e-02i  -6.8502e-03-5.4283e-03i  -8.6142e-03-1.0005e-02i 
 -9.3504e-03-1.2972e-02i  +1.0162e+00+2.2405e-02i  -1.8044e-03-2.5526e-02i 
 -1.1424e-02-1.0004e-02i  -2.3890e-02-1.0892e-02i  +1.0220e+00+2.6799e-02i 

 1-2sin(A)**2 :
 +1.0266e+00+3.5186e-02i  -6.8502e-03-5.4283e-03i  -8.6142e-03-1.0005e-02i 
 -9.3504e-03-1.2972e-02i  +1.0162e+00+2.2405e-02i  -1.8044e-03-2.5526e-02i 
 -1.1424e-02-1.0004e-02i  -2.3890e-02-1.0892e-02i  +1.0220e+00+2.6799e-02i 


 Press   return to continue
 Press X return to stop