Mathc complexes/a325
Décomposition d'une matrice en éléments propres
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-4
/* ------------------------------------ */
/* ------------------------------------ */
double f(
double x)
{
return(sin(x)*sin(x));
}
char feq[] = "sin(x)*sin(x)";
/* ------------------------------------ */
double g(
double x)
{
return(cos(x)*cos(x));
}
char geq[] = "cos(x)*cos(x)";
/* ------------------------------------ */
/* ------------------------------------ */
void fun(int rc)
{
double **A = rcsymmetric_mZ( i_mZ(rc,rc),99);
double **A_T = ctranspose_mZ(A, i_mZ(rc,rc));
double **U = X_U_mZ(A_T, i_mZ(rc,rc),FACTOR_E);
double **U_T = ctranspose_mZ(U, i_mZ(rc,rc));
double **U_TA = mul_mZ(U_T, A, i_mZ(rc,rc));
double **X = mul_mZ(U_TA, U, i_mZ(rc,rc));
double **sin2X = f_eigs_mZ(f,X, i_mZ(rc,rc));
double **Usin2X = mul_mZ(U,sin2X, i_mZ(rc,rc));
double **sin2 = mul_mZ(Usin2X,U_T, i_mZ(rc,rc));
double **cos2X = f_eigs_mZ(g,X, i_mZ(rc,rc));
double **Ucos2X = mul_mZ(U,cos2X, i_mZ(rc,rc));
double **cos2 = mul_mZ(Ucos2X,U_T, i_mZ(rc,rc));
double **sin2plscos2 = add_mZ(sin2,cos2, i_mZ(rc,rc));
clrscrn();
printf(" A :");
p_mZ(A, S9,P1, S8,P1, C4);
printf(" U :");
p_mZ(U, S9,P4, S8,P4, C4);
printf(" X = U_T * A * U :");
p_mZ(X, S11,P3, S7,P3, C4);
stop();
clrscrn();
printf(" sin(A)**2");
p_mZ(sin2, S7,P3, S7,P3, C6);
printf(" cos(A)**2");
p_mZ(cos2, S7,P3, S7,P3, C6);
printf(" cos(A)**2 + sin(A)**2");
p_mZ(sin2plscos2, S7,P3, S7,P3, C6);
f_mZ(A);
f_mZ(A_T);
f_mZ(U);
f_mZ(U_T);
f_mZ(U_TA);
f_mZ(X);
f_mZ(sin2X);
f_mZ(Usin2X);
f_mZ(sin2);
f_mZ(cos2X);
f_mZ(Ucos2X);
f_mZ(cos2);
f_mZ(sin2plscos2);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun(R4);
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Exemple de sortie écran :
A :
+5283.0 +0.0i -10648.0 -900.0i -4476.0 -4046.0i +1446.0 -3578.0i
-10648.0 +900.0i +37332.0 +0.0i +3824.0 -6367.0i +8514.0 +378.0i
-4476.0 +4046.0i +3824.0 +6367.0i +25766.0 +0.0i +4848.0+15400.0i
+1446.0 +3578.0i +8514.0 -378.0i +4848.0-15400.0i +18666.0 +0.0i
U :
-0.1151 -0.1547i +0.3229 -0.0146i +0.0551 +0.0366i -0.8583 +0.3424i
+0.6728 +0.1747i -0.5618 -0.3195i -0.0551 +0.0436i -0.2934 +0.0903i
+0.1919 +0.4863i +0.0873 +0.5606i -0.1448 -0.5925i -0.0559 +0.1722i
+0.4543 +0.0000i +0.3948 -0.0000i +0.7865 +0.0000i +0.1381 +0.0000i
X = U_T * A * U :
+50803.134 -0.000i +0.000 +0.000i -0.000 -0.000i -0.000 -0.000i
+0.000 -0.000i +30498.660 +0.000i -0.000 +0.000i -0.000 -0.000i
-0.000 +0.000i -0.000 -0.000i +5532.599 +0.000i +0.000 +0.000i
-0.000 +0.000i -0.000 +0.000i +0.000 -0.000i +212.608 +0.000i
Press return to continue.
sin(A)**2
+0.628 +0.000i +0.185 -0.031i +0.058 +0.099i -0.092 +0.023i
+0.185 +0.031i +0.159 +0.000i +0.059 -0.021i +0.022 +0.025i
+0.058 -0.099i +0.059 +0.021i +0.099 +0.000i +0.003 +0.029i
-0.092 -0.023i +0.022 -0.025i +0.003 -0.029i +0.091 -0.000i
cos(A)**2
+0.372 +0.000i -0.185 +0.031i -0.058 -0.099i +0.092 -0.023i
-0.185 -0.031i +0.841 +0.000i -0.059 +0.021i -0.022 -0.025i
-0.058 +0.099i -0.059 -0.021i +0.901 +0.000i -0.003 -0.029i
+0.092 +0.023i -0.022 +0.025i -0.003 +0.029i +0.909 -0.000i
cos(A)**2 + sin(A)**2
+1.000 +0.000i +0.000 +0.000i -0.000 -0.000i -0.000 +0.000i
+0.000 -0.000i +1.000 +0.000i -0.000 -0.000i -0.000 +0.000i
-0.000 +0.000i -0.000 +0.000i +1.000 +0.000i -0.000 +0.000i
-0.000 -0.000i -0.000 -0.000i -0.000 -0.000i +1.000 -0.000i
Press return to continue
Press X return to stop