Mathc complexes/a56
Installer et compiler ces fichiers dans votre répertoire de travail.
c00b.c |
---|
/* ------------------------------------ */
/* Save as : c00a.c */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define RCA RC3
#define FACTOR_E +1.E-2
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
{
int r = RCA;
int c = RCA;
double **A = r_mZ(i_mZ(r,c),99);
double **A_T = ctranspose_mZ(A,i_mZ(c,r));
double **V = i_mZ(r,c);
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 **S = i_mZ(c,c); // c,r r,c :c,c S
double **svdvalue = i_mZ(r,C1);
clrscrn();
printf(" A :");
p_mZ(A, S10,P2, S8,P2, C3);
X_U_mZ(A_T,U,FACTOR_E);
printf(" U :");
p_mZ(U, S10,P4, S8,P4, C3);
X_V_mZ(A_T,V,FACTOR_E);
printf(" V :");
p_mZ(V, S10,P4, S8,P4, C3);
ctranspose_mZ(U,U_T);
/* S = 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, S); // V : r,c
printf(" S = U_T * A * V :");
p_mZ(S, S10,P4, S9,P4, C3);
stop();
clrscrn();
printf(" S = U_T * A * V :");
p_mZ(S, S10,P4, S9,P4, C3);
svd_mZ(A,svdvalue);
printf(" S != Singular value : ");
p_mZ(svdvalue, S10,P4, S9,P4, C10);
f_mZ(A);
f_mZ(A_T);
f_mZ(V);
f_mZ(U);
f_mZ(U_T);
f_mZ(U_TA);
f_mZ(U_TA2);
f_mZ(S);
f_mZ(svdvalue);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun();
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Remarque :
Cette décomposition n'est pas la SVD.
Exemple de sortie écran :
----------------------------------
A :
-83.00 +21.00i +61.00 -93.00i +24.00 +46.00i
-46.00 -85.00i +79.00 -33.00i +27.00 +30.00i
+62.00 -60.00i +33.00 -89.00i -7.00 -11.00i
U :
+0.4629 -0.5183i -0.1656 +0.3577i +0.0458 -0.5997i
+0.6535 -0.0386i -0.0208 -0.1208i -0.6132 +0.4247i
+0.2975 -0.0000i +0.9108 +0.0000i +0.2861 -0.0000i
V :
-0.5498 -0.2695i +0.3149 -0.6890i +0.0849 +0.2101i
-0.2584 +0.7024i +0.6094 +0.1376i -0.0523 -0.2163i
+0.2549 +0.0000i +0.1894 -0.0000i +0.9482 +0.0000i
S = U_T * A * V :
+6.5591+200.5240i +0.0000 +0.0000i -0.0000 +0.0000i
-0.0000 -0.0000i +10.1156-124.4866i +0.0000 +0.0000i
+0.0000 -0.0000i -0.0000 -0.0000i -34.0682 -17.4135i
Press return to continue.
----------------------------------
S = U_T * A * V :
+6.5591+200.5240i +0.0000 +0.0000i -0.0000 +0.0000i
-0.0000 -0.0000i +10.1156-124.4866i +0.0000 +0.0000i
+0.0000 -0.0000i -0.0000 -0.0000i -34.0682 -17.4135i
S != Singular value :
+200.6312 +0.0000i
+124.8969 +0.0000i
+38.2605 +0.0000i
Press return to continue
Press X return to stop