Aller au contenu

Mathc complexes/Fichiers c : mul r r

Un livre de Wikilivres.


Application

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

mul.c
/* ------------------------------------ */
/*  Save as :   mul.c                   */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
double **xmul_mZ(
double **A,
double **B,
double **AB
)
{
int i,n;
int j;
int k;

nb_Z a;
nb_Z b;
nb_Z ab;
nb_Z abplsab;

  canImul_mZ(A,B,AB,"mul_mR();","(A or B or AB)");

              /* Work on the rows k */
              for(k= R1; k < A[R_SIZE][C0]; k++)
                  /* Work on the cols j */
                  for(j=C1; j<B[C_SIZE][C0]; j += C2)
                   {
                    abplsab = i_Z(0,0);
                    /* Compute AB(k,j)    */
                    for(i=C1,n=R1; i<A[C_SIZE][C0]; i += C2,n++)
                      {
                       a = i_Z(A[k][i],            /* Create the number a     */
                               A[k][i+C1]);  

                       b = i_Z(B[n][j],            /* Create the number b     */
                               B[n][j+C1]);

                      ab = mul_Z(a,b);             /* Multiply a by b         */

                 abplsab = add_Z(abplsab,ab);      /* Add the products        */
                        }
                          AB[k][j]    = abplsab.r; /* Save the result into AB */
                          AB[k][j+C1] = abplsab.i;
                   }

 return(AB);
}
/* ------------------------------------ */
/* ------------------------------------ */
void fun(int r,int rc,int c)
{
double **A  =   r_mZ(     i_mZ(r,rc),9);
double **B  =   r_mZ(     i_mZ(rc,c),9);
double **AB = mul_mZ(A,B, i_mZ(r,c));

  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(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(R4),rp_I(RC4),rp_I(C4));
        
    while(stop_w());
        
  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
J'ai utilisé rc pour le nombre de colonnes de A et le nombre de lignes de B car ces deux valeurs doivent être identiques. Elles correspondent pour A au nombre de colonnes et pour B au nombre de lignes.

Je créé les nombres complexes a et b avec la fonction i_Z(); J'utilise la fonction mul_Z(); qui multiplie deux nombres complexes.  J'utilise  la fonction add_Z(); qui additionne tous les produits d'une ligne i multiplié par une colonne j.

Exemple de sortie écran :

 A : 
   +8  +8i    -7  -5i    -5  +4i 
   -7  -7i    -3  +4i    -1  +6i 
   +2  -7i    +2  -5i    -5  +2i 

 B : 
   -5  +6i    -7  +4i    -5  +4i    -7  +2i 
   -1  +4i    -9  -1i    -5  -7i    +6  -9i 
   -9  -1i    +4  +6i    +8  +6i    -7  +8i 

 AB : 
  -12 -46i   -74 +14i  -136 +68i  -156 -75i 
  +79 -76i   +68  +6i   +62 +50i   +40 +36i 
  +97 +47i   -41 +78i   -79 +40i   -14 -49i 


 Press return to continue
 Press X      to stop