Aller au contenu

Mathc complexes/Fichiers c : mul diag

Un livre de Wikilivres.


Application

Installer et compiler ce fichier dans votre répertoire de travail.

mul_diag.c
/* ------------------------------------ */
/*  Save as :   mul_diag.c              */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
double **xrdiag_mZ(
double **A,
int      n
)
{
int      r;
int      c;

  isquare_mZ(A,"r_diag_mZ;","(A)");
  
  for(r=R1, c=C1; r<A[R_SIZE][C0]; r++, c+=C2)
     {
             A[r][c  ] = r_I(n);  /* r_I(n); Positive or negative integers */
             A[r][c+1] = r_I(n);
     }
 return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **xrpdiag_mZ(
double **A,
int      n
)
{
int      r;
int      c;

  isquare_mZ(A,"r_diag_mZ;","(A)");
  
  for(r=R1, c=C1; r<A[R_SIZE][C0]; r++, c+=C2)
     {
             A[r][c  ] = rp_I(n);  /* rp_I(n); Positive integers */
             A[r][c+1] = rp_I(n);
     }
 return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
void fun(int rc)
{
double **A  =  rdiag_mZ(i_mZ(rc,rc),9); /* Positive or negative integers */
double **B  = rpdiag_mZ(i_mZ(rc,rc),9); /* Positive             integers */
double **AB =           i_mZ(rc,rc);

  clrscrn();

  printf(" A : ");
  p_mZ(A, S5,P0, S4,P0,C6);

  printf(" B : ");
  p_mZ(B, S5,P0, S4,P0,C6);

  printf(" AB : ");
  p_mZ(mul_mZ(A,B,AB), S5,P0, S4,P0,C6);
  
  f_mZ(A);
  f_mZ(B);
  f_mZ(AB);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));
  
   do 
         fun(rp_I(RC3)+RC2);
        
    while(stop_w());
        
  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Si nous multiplions deux matrices diagonales, nous obtenons une matrice diagonale.

Il y a deux fonctions qui donnent des matrices diagonales, rdiag_mZ(); qui donne une matrice diagonale avec des valeurs positives ou négatives et rpdiag_mZ(); qui donne une matrice diagonale avec des valeurs uniquement positives.

Exemple de sortie écran :

 A : 
   -9  -9i    +0  +0i    +0  +0i    +0  +0i 
   +0  +0i    -9  +8i    +0  +0i    +0  +0i 
   +0  +0i    +0  +0i    -5  +8i    +0  +0i 
   +0  +0i    +0  +0i    +0  +0i    +8  -6i 

 B : 
   +3  +4i    +0  +0i    +0  +0i    +0  +0i 
   +0  +0i    +1  +2i    +0  +0i    +0  +0i 
   +0  +0i    +0  +0i    +5  +4i    +0  +0i 
   +0  +0i    +0  +0i    +0  +0i    +6  +3i 

 AB : 
   +9 -63i    +0  +0i    +0  +0i    +0  +0i 
   +0  +0i   -25 -10i    +0  +0i    +0  +0i 
   +0  +0i    +0  +0i   -57 +20i    +0  +0i 
   +0  +0i    +0  +0i    +0  +0i   +66 -12i 


 Press   return to continue
 Press X return to stop