Mathc complexes/51
Installer et compiler ces fichiers dans votre répertoire de travail.
c00b.c |
---|
/* ------------------------------------ */
/* Save as : c00b.c */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define RA R3
#define CA C3
#define FACTOR_E +1.E-2
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
{
int r = RA;
int c = CA;
double a[RA*(CA*C2)] ={ 1,2, 3,4, 5,3,
5,4, 1,3, 9,1,
7,2, 5,1, 8,3,};
double **A = ca_A_mZ(a, i_mZ(r,c));
double **A_T = ctranspose_mZ(A,i_mZ(c,r));
double **V = i_mZ(r,c);
double **V_T = i_mZ(c,r);
double **U = i_mZ(r,c);
double **U_T = i_mZ(c,r); // :c,r
double **U_TA = i_mZ(c,c); // c,r r,c :c,c
double **U_TA2 = i_mZ(c,r); // c,r :c,r
double **U_TA2V = i_mZ(c,c); // c,r r,c :c,c X_Value
double **A2V = i_mZ(r,c);
double **A2 = i_mZ(r,r); // A = U * X_Value * V_T
clrscrn();
printf(" A :");
p_mZ(A, S6,P1, S6,P1, C3);
X_U_mZ(A_T,U,FACTOR_E);
printf(" U :");
p_mZ(U, S9,P4, S8,P4, C3);
X_V_mZ(A_T,V,FACTOR_E);
printf(" V :");
p_mZ(V, S9,P4, S8,P4, C3);
ctranspose_mZ(U,U_T);
ctranspose_mZ(V,V_T);
/* X_Value = U_T * A * V */
mul_mZ( U_T, A, U_TA); // U_TA : c,c
c_mZ( U_TA, U_TA2); // U_TA2 : c,r
mul_mZ( U_TA2, V, U_TA2V); // V : r,c
printf(" X_Value = U_T * A * V :");
p_mZ(U_TA2V, S9,P4, S8,P4, C3);
stop();
clrscrn();
/* A = U * X_Value * V_T */
mul_mZ( U, U_TA2V, A2V); // U,U_T = 1;
mul_mZ(A2V, V_T, A2); // V,V_T = 1;
printf(" A2 = U * X_Value * V_T : \t\t U * (U_T*A*V) * V_T ");
p_mZ(A2, S6,P1, S6,P1, C3);
printf(" A :");
p_mZ(A, S6,P1, S6,P1, C3);
stop();
f_mZ(A);
f_mZ(A_T);
f_mZ(V);
f_mZ(V_T);
f_mZ(U);
f_mZ(U_T);
f_mZ(U_TA);
f_mZ(U_TA2);
f_mZ(U_TA2V);
f_mZ(A2V);
f_mZ(A2);
}
/* ------------------------------------ */
int main(void)
{
fun();
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Diagonaliser une matrice carrée Exemple de sortie écran :
----------------------------------
A :
+1.0 +2.0i +3.0 +4.0i +5.0 +3.0i
+5.0 +4.0i +1.0 +3.0i +9.0 +1.0i
+7.0 +2.0i +5.0 +1.0i +8.0 +3.0i
U :
+0.3772 +0.1725i -0.0706 +0.3672i -0.4502 -0.6968i
+0.6136 +0.0689i -0.6524 -0.3188i -0.0717 +0.2937i
+0.6683 +0.0000i +0.5770 +0.0000i +0.4695 +0.0000i
V :
+0.5169 -0.1394i -0.0987 +0.0009i -0.8017 +0.2468i
+0.3600 -0.1324i -0.7923 +0.3282i +0.3050 -0.1562i
+0.7525 +0.0000i +0.5047 +0.0000i +0.4230 -0.0000i
X_Value = U_T * A * V :
+17.7296 +3.0133i +0.0000 +0.0000i -0.0000 -0.0000i
+0.0000 -0.0000i -1.6373 +3.7646i +0.0000 +0.0000i
-0.0000 +0.0000i +0.0000 -0.0000i -2.2158 +1.9545i
Press return to continue.
----------------------------------
A2 = U * X_Value * V_T : U * (U_T*A*V) * V_T
+1.0 +2.0i +3.0 +4.0i +5.0 +3.0i
+5.0 +4.0i +1.0 +3.0i +9.0 +1.0i
+7.0 +2.0i +5.0 +1.0i +8.0 +3.0i
A :
+1.0 +2.0i +3.0 +4.0i +5.0 +3.0i
+5.0 +4.0i +1.0 +3.0i +9.0 +1.0i
+7.0 +2.0i +5.0 +1.0i +8.0 +3.0i
Press return to continue.