Mathc complexes/a124
Apparence
Le code de la fonction :
/* ------------------------------------ */
/* ------------------------------------ */
double **rEcsymmetric_mZ(
double **A,
int n,
double E /* 1E-1 1E-0 1E+1 */
)
{
int r = rsize_Z(A);
int c = csize_Z(A);
double **B = rE_mZ(i_mZ(r,c),n,E);
double **B_T = ctranspose_mZ(B,i_mZ(c,r));
mul_mZ(B,B_T, A);
f_mZ(B);
f_mZ(B_T);
return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
J'utilise ici une propriété de l'algèbre linéaire qui dit que si on multiplie une matrice par sa conjugué transposée le résultat est une matrice symétrique conjugué.
La fonction rEcsymmetric_mZ() nous permet d'obtenir des valeurs aléatoires sous forme de nombres avec des virgules. C'est le paramètre "E" de la fonction qui se charge de ce travail. Le paramètre "n" doit être aussi bien choisi. Si l'on veut trois chiffres après la virgule, il n devra être supérieur ou égal à 999. * 1E-1 permet d'avoir des nombres avec un chiffre après la virgule. * 1E-2 permet d'avoir des nombres avec deux chiffres après la virgule. * 1E-3 permet d'avoir des nombres avec trois chiffres après la virgule. (999 -> 0,123 ... 9999-> 1,123 ... 99999-> 12,123)
Installer et compiler ces fichiers dans votre répertoire de travail.
c00a.c |
|---|
/* ------------------------------------ */
/* Save as : c00a.c */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define RCA RC3
/* ------------------------------------ */
void fun(void)
{
double **A;
clrscrn();
A = rEcsymmetric_mZ(i_mZ(RCA,RCA),999,+1.E-3);
clrscrn();
printf(" A :");
p_mZ(A, S9,P4, S8,P4, C6);
f_mZ(A);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun();
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Exemple de sortie écran :
A :
+2.6536 +0.0000i -0.9190 -1.6243i +1.2004 +0.5189i
-0.9190 +1.6243i +2.8837 +0.0000i +0.0039 +0.1693i
+1.2004 -0.5189i +0.0039 -0.1693i +2.3150 +0.0000i
Press return to continue
Press X to stop