Aller au contenu

Mathc complexes/08l

Un livre de Wikilivres.


Application

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

c00h.c
/* ------------------------------------ */
/*  Save as :   c00h.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
#define   V    R1
/* ------------------------------------ */
#define   RAb  R2
#define   CA   C6
#define   Cb   C1
/* ------------------------------------ */
# define FREEV C5
/* ------------------------------------ */
/* ------------------------------------ */
#define  UARRAY FREEV
#define  VARRAY V
/* ------------------------------------ */
/* ------------------------------------ */
int main(void)
{
double ab[RAb*(CA+C1)*C2]={
-18,-1,-549,-4,-119,-8,-715,-9,-233,-8,-640,-7,  0,-0, /* V[0]|0 */
-0,-0,  -0,-0,  -0,-0,  -0,-0,  -0,-0,   -0,-0,  0,-0  
};

double **Ab      = ca_A_mZ(ab, i_Abr_Ac_bc_mZ(RAb, CA, Cb));
double **Ab_free =             i_Abr_Ac_bc_mZ(CA,  CA, Cb + FREEV);
double **b_free  =                       i_mZ(CA,      Cb + FREEV); 

double **A       =    c_Ab_A_mZ(Ab,      i_mZ(RAb,     CA));  
double **At      = ctranspose_mZ(A,      i_mZ(CA,      RAb));  
/* ------------------------------------ */
double **u [UARRAY];
double **vt[VARRAY];
/* ------------------------------------ */
int c,r;

/*  Compute the free variables (b_free) */
      gj_PP_mZ(Ab);                
  put_zeroR_mZ(Ab,Ab_free);           
  put_freeV_mZ(Ab_free); 
         gj_mZ(Ab_free); 
     c_Ab_b_mZ(Ab_free,b_free);    

  clrscrn();
  printf(" Compute the orthogonal vectors to V :\n\n\n");
  for(c=C0; c<VARRAY; c++)
     {
      vt[c] = i_mZ(CA,C1);     
      c_c_mZ(At,(c+C1),vt[c],C1);
      
      printf(" v^t[%d]:",c);      
      p_mZ(vt[c], S10,P4, S10,P4, C1);       
     }  
  stop();

  clrscrn();
  for(c=C0; c<UARRAY; c++)
     {
      u[c] = i_mZ(CA,C1);      
      c_c_mZ(b_free,(c+C2), u[c],C1); 
      
	  printf(" u[%d] :",c);      
      p_mZ(u[c], S10,P4, S10,P4, C1);                   
     }  
   printf(" The free vectors of the system"
          " are the orthogonal vectors to V :\n\n\n");        
  stop();

  clrscrn();
  printf(" \n\n\n"
         " You can verify if"
         " the free vectors of the system\n"
         " are orthogonal to V :   \n\n"
         "          <u,v> = v^t u          \n\n");

  for(c=C0; c<VARRAY; c++) 
  
    for(r=C0;  r<UARRAY; r++) 
      {
         printf(" v^t[%d] u[%d] = ",c,r); 
         p_Z(dot_Z(vt[c],u[r]), S4,P5, S5,P5);
         printf("\n");
	   }
              
  printf("\n\n\n");
  stop();
  
  f_mZ(Ab);
  f_mZ(Ab_free);
  f_mZ(b_free);
  f_mZ(A);  
  f_mZ(At);

/* --- Free the memory of the Arrays -- */
  for(c=C0; c<UARRAY; c++)
  
       f_mZ( u[c]);        
      
  for(c=C0; c<VARRAY; c++)
  
       f_mZ(vt[c]);      

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Dans cet exemple, j'ajoute une ligne de zéros au système pour garantir la présence d'au moins deux lignes. La bibliothèque ne fonctionne pas avec les systèmes à une seule ligne. Si le produit scalaire de deux vecteurs est nul, cela signifie qu'ils sont orthogonaux.
Exemple de sortie écran :
 Compute the orthogonal vectors to V :


 v^t[0]:
  -18.0000   +1.0000i 
 -549.0000   +4.0000i 
 -119.0000   +8.0000i 
 -715.0000   +9.0000i 
 -233.0000   +8.0000i 
 -640.0000   +7.0000i 

 Press return to continue. 


 u[0] :
  -30.4185   +1.4677i 
   +1.0000   +0.0000i 
   +0.0000   +0.0000i 
   -0.0000   +0.0000i 
   +0.0000   +0.0000i 
   +0.0000   +0.0000i 

 u[1] :
   -6.6154   -0.0769i 
   +0.0000   +0.0000i 
   +1.0000   +0.0000i 
   -0.0000   -0.0000i 
   +0.0000   +0.0000i 
   +0.0000   +0.0000i 

 u[2] :
  -39.6277   +1.7015i 
   +0.0000   +0.0000i 
   +0.0000   +0.0000i 
   +1.0000   +0.0000i 
   +0.0000   +0.0000i 
   +0.0000   +0.0000i 

 u[3] :
  -12.9292   +0.2738i 
   +0.0000   +0.0000i 
   +0.0000   +0.0000i 
   -0.0000   -0.0000i 
   +1.0000   +0.0000i 
   +0.0000   +0.0000i 

 u[4] :
  -35.4677   +1.5815i 
   +0.0000   +0.0000i 
   +0.0000   +0.0000i 
   -0.0000   +0.0000i 
   +0.0000   +0.0000i 
   +1.0000   +0.0000i 

 The free vectors of the system are the orthogonal vectors to V :


 Press return to continue. 


 You can verify if the free vectors of the system
 are orthogonal to V :   

          <u,v> = v^t u          

 v^t[0] u[0] = +0.00000+0.00000i 
 v^t[0] u[1] = +0.00000-0.00000i 
 v^t[0] u[2] = +0.00000+0.00000i 
 v^t[0] u[3] = -0.00000+0.00000i 
 v^t[0] u[4] = +0.00000-0.00000i 



 Press return to continue.