Mathc complexes/02f
Apparence
Le code de la fonction :
/* ------------------------------------ */
/* ------------------------------------ */
double **rdefpos_diag_mZ(
double **D,
double **A,
int n
)
{
int r = rsize_Z(A);
double **Q = r_Q_mZ( i_mZ(r,r),n);
double **QT = ctranspose_mZ(Q, i_mZ(r,r));
double **QD = mul_mZ(Q,D, i_mZ(r,r));
mul_mZ(QD,QT,A);
f_mZ(Q);
f_mZ(QT);
f_mZ(QD);
return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
Vous commencez par choisir vos valeurs propres (le tableau d). La fonction va créer une matrice qui possédera ces valeurs propres.
La fonction r_Q_mZ(); créé la matrice aléatoire Q avec les vecteurs propres (orthogonaux). Puis l'algorithme A = Q EValue Q_cT nous donne la matrice A.
Installer et compiler ces fichiers dans votre répertoire de travail.
c00a.c |
|---|
/* ------------------------------------ */
/* Save as : c00a.c */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define FACTOR_E +1.E-2
#define RCA RC3
/* ------------------------------------ */
void fun(void)
{
double d[RCA*(RCA*C2)] ={
5,5, 0,0, 0,0,
0,0, 4,4, 0,0,
0,0, 0,0, 3,3};
double **D = ca_A_mZ(d, i_mZ(RCA,RCA));
double **A = rdefpos_diag_mZ(D, i_mZ(RCA,RCA),9);
double **EigsValue = eigs_mZ(A, i_mZ(RCA,C1));
clrscrn();
printf(" Choose your eigenvalues (d), \n"
" and copy A into the next C file\n\n"
" A:");
P_mZ(A, S10,P10, S10,P10, C4);
printf(" D = EValue :");
p_mZ(D, S3,P0, S2,P0, C4);
f_mZ(D);
f_mZ(A);
f_mZ(EigsValue);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun();
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Exemple de sortie écran :
Choose your eigenvalues (d),
and copy A into the next C file
A:
+3.6655231228,+3.6655231228, -0.3965810096,+0.4282557046, +0.8670026157,-0.0384689329,
+0.4282557046,-0.3965810096, +4.6023160144,+4.6023160144, +0.5686805385,-0.1906631555,
-0.0384689329,+0.8670026157, -0.1906631555,+0.5686805385, +3.7321608628,+3.7321608628
D = EValue :
+5+5i +0+0i +0+0i
+0+0i +4+4i +0+0i
+0+0i +0+0i +3+3i
Press return to continue
Press X return to stop