Aller au contenu

Mathc complexes/a77

Un livre de Wikilivres.


Application

Le code de la fonction :

/* ------------------------------------ */
/* ------------------------------------ */
double **c_zr1A_r2_mZ(
nb_Z z,
int r1,
double **A,

int r2
)
{
nb_Z T;
int c;

    for ( c=C1; c<A[C_SIZE][C0]; c+=C2)
     {
      T = mul_Z(i_Z(A[r1][c],A[r1][c+C1]),z);

             A[r2][c]    = T.r;
             A[r2][c+C1] = T.i;
     }

return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
Copier une ligne z*R1 dans la ligne R2 d'une matrice. En multipliant la ligne R1 par z, cela cache le fait qu'il y ait plusieurs lignes identiques. Cela permet par exemple d'obtenir une matrice singulière , mais aussi cela permet d'obtenir des matrices avec un ou plusieurs  vecteurs libres, si on répète l'opération sur plusieurs lignes.

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

c00b.c
/* ------------------------------------ */
/*  Save as :   c00b.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
void fun(int r,int c)
{
double **A     = r_mZ(i_mZ(r,c),99.);

nb_Z z = i_Z(10,0);

  clrscrn(); 
  
  printf(" A :");
  p_mZ(A, S5,P0, S5,P0, C10);   
    
  printf(" A : c_zr1A_r2_mZ(10,R1,A,R2);");
  p_mZ(c_zr1A_r2_mZ(z,R1,A, R2), S5,P0, S5,P0, C10);
    
  f_mZ(A);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

int i;

do
{
  i = rp_I(R3)+R1;
  
  fun(i,i+C1);

} while(stop_w());

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */

Exemple de sortie écran :

 -------------------------------- 
 A :
  -85  +40i   +42  -30i   +27  +86i   -74  +41i   +49  +21i 
  +77  +79i   -12  -38i   -85  -34i   -55  -73i   +20  -58i 
  +30  -48i   -91  -30i   +86  +66i   -73  -35i   +24  -90i 
  +31  +74i   +97  +77i   +47  +60i   -74  -75i   -96   +3i 

 A : c_zr1A_r2_mZ(10,R1,A,R2)
  -85  +40i   +42  -30i   +27  +86i   -74  +41i   +49  +21i 
 -850 +400i  +420 -300i  +270 +860i  -740 +410i  +490 +210i 
  +30  -48i   -91  -30i   +86  +66i   -73  -35i   +24  -90i 
  +31  +74i   +97  +77i   +47  +60i   -74  -75i   -96   +3i 


 Press return to continue
 Press X      to stop