Exemple de sortie écran :
 A :
 +1.00 +2.00i +3.00 +4.00i +5.00 +3.00i 
 +5.00 +4.00i +1.00 +3.00i +9.00 +1.00i 
 +7.00 +2.00i +5.00 +1.00i +8.00 +3.00i 
 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.

Mathc complexes/a53
Application
Installer et compiler ces fichiers dans votre répertoire de travail.
/* ------------------------------------ */
/* Save as : c00c.c */
/* ------------------------------------ */
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 **invU_TA2V = i_mZ(c,c); // c,r r,c :c,c invX_Value
double **VinvU_TA2V = i_mZ(r,c);
double **VinvU_TA2VU_T = i_mZ(r,r);
double **VinvU_TA2VU_TA2 = i_mZ(r,c); // r,c | r,r
 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(); 
 X_inv_mZ(U_TA2V, invU_TA2V);
 printf(" invX_Value invU_TA2V:");
 pE_mZ(invU_TA2V, S12,P4, S8,P4, C3);
/* invA = V * invX_Value * U_T */ 
 mul_mZ(V,invU_TA2V,VinvU_TA2V);
 mul_mZ(VinvU_TA2V,U_T,VinvU_TA2VU_T); 
 printf(" InvA = V * invX_Value * U_T:");
 pE_mZ(VinvU_TA2VU_T, S12,P4, S8,P4, C3); 
 mul_mZ(VinvU_TA2VU_T,A,VinvU_TA2VU_TA2); 
 printf(" Ide = InvA * A ");
 p_mZ(VinvU_TA2VU_TA2, S9,P4, S8,P4, C3); 
 mul_mZ(A,VinvU_TA2VU_T,VinvU_TA2VU_TA2); 
 printf(" Ide = A * InvA ");
 p_mZ(VinvU_TA2VU_TA2, S9,P4, S8,P4, 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(invU_TA2V);
 f_mZ(VinvU_TA2V);
 f_mZ(VinvU_TA2VU_T);
 f_mZ(VinvU_TA2VU_TA2); 
/* ------------------------------------ */
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. 
 ----------------------------------
 invX_Value invU_TA2V:
 +5.4819e-02-9.3169e-03i +0.0000e+00+0.0000e+00i +0.0000e+00+0.0000e+00i 
 +0.0000e+00+0.0000e+00i -9.7152e-02-2.2338e-01i +0.0000e+00+0.0000e+00i 
 +0.0000e+00+0.0000e+00i +0.0000e+00+0.0000e+00i -2.5382e-01-2.2389e-01i 
 InvA = V * invX_Value * U_T:
 -1.8249e-01+1.1318e-01i +1.8095e-02-1.0508e-01i +1.4521e-01+5.9204e-02i 
 +1.1837e-01-1.3802e-01i -1.3405e-01-1.9483e-02i +4.6321e-02+6.3176e-02i 
 +9.0751e-02-1.5973e-02i +7.2655e-02+8.9111e-02i -5.1134e-02-1.1421e-01i 
 Ide = InvA * A 
 +1.0000 -0.0000i -0.0000 -0.0000i +0.0000 +0.0000i 
 +0.0000 -0.0000i +1.0000 +0.0000i +0.0000 +0.0000i 
 -0.0000 +0.0000i +0.0000 +0.0000i +1.0000 -0.0000i 
 Ide = A * InvA 
 +1.0000 +0.0000i -0.0000 -0.0000i +0.0000 +0.0000i 
 -0.0000 -0.0000i +1.0000 +0.0000i +0.0000 +0.0000i 
 +0.0000 +0.0000i +0.0000 +0.0000i +1.0000 -0.0000i 
 Press return to continue.

Mathc complexes/a54
Application
Installer et compiler ces fichiers dans votre répertoire de travail.
/* ------------------------------------ */
/* Save as : c00a.c */
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
int r = RA;
int c = CA; 
double a[RA*(CA*C2)] ={ -6, -4, -3, -8, 
 -9, -6, -2, +5, 
 -3, -7, -7, +7, 
 +6, -7, -4, +4 };
double **A = ca_A_mZ(a, i_mZ(r,c));
double **Q = i_mZ(r,c);
double **R = i_mZ(c,c);
 clrscrn();
 printf(" Copy/Past into the octave windows \n\n\n");
 p_Octave_mZ(A,"a",P0,P0); 
 printf(" [Q, R] = qr (a,0) \n\n");
 stop();
 clrscrn(); 
 QRuv_mZ(A,Q,R); 
 printf(" Q :");
 p_mZ(Q, S10,P4, S10,P4, C2); 
 printf(" R :");
 p_mZ(R, S10,P4, S10,P4, C2); 
 stop(); 
 clrscrn();
 printf(" A :");
 p_mZ(A, S3,P0, S3,P0, C10); 
 printf(" A = Q * R :"); 
 mul_mZ(Q,R, A);
 p_mZ(A, S3,P0, S3,P0, C10);
 stop(); 
 f_mZ(A);
 f_mZ(Q);
 f_mZ(R);
/* ------------------------------------ */
int main(void)
 fun();
 return 0;
/* ------------------------------------ */
 Vérifier avec octave les calculs.

Exemple de sortie écran :
 Copy/Past into the octave windows 
 a=[
-6-4*i,-3-8*i;
-9-6*i,-2+5*i;
-3-7*i,-7+7*i;
+6-7*i,-4+4*i]
 [Q, R] = qr (a,0) 
 Press return to continue. 
 -------------------------
 Q :
 -0.3397 -0.2265i -0.1843 -0.7377i 
 -0.5095 -0.3397i -0.0985 +0.1033i 
 -0.1698 -0.3963i -0.3752 +0.3661i 
 +0.3397 -0.3963i -0.0755 +0.3476i 
 R :
 +17.6635 -0.0000i -2.3778 -5.3783i 
 -0.0000 -0.0000i +14.0506 -0.0000i 
 Press return to continue. 
 A :
 -6 -4i -3 -8i 
 -9 -6i -2 +5i 
 -3 -7i -7 +7i 
 +6 -7i -4 +4i 
 A = Q * R :
 -6 -4i -3 -8i 
 -9 -6i -2 +5i 
 -3 -7i -7 +7i 
 +6 -7i -4 +4i 
 Press return to continue.

Mathc complexes/a55
Application
Utilitaire

Mathc complexes/a56
Application
Installer et compiler ces fichiers dans votre répertoire de travail.
/* ------------------------------------ */
/* Save as : c00a.c */
/* ------------------------------------ */
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 **U_TA2V = i_mZ(c,c); // c,r r,c :c,c X_Value
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);
/* 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, S10,P4, S9,P4, C3);
 stop();
 clrscrn();
 printf(" X_Value = U_T * A * V :");
 p_mZ(U_TA2V, S10,P4, S9,P4, C3);
 svduv_mZ(A,svdvalue);
 printf(" 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(U_TA2V); 
 f_mZ(svdvalue); 
/* ------------------------------------ */
int main(void)
time_t t;
 srand(time(&t));
do
 fun();
} while(stop_w());
 return 0;
/* ------------------------------------ */
Remarque :
 X_Values -> Singular value
 x = +167.2611 y = -148.6020i -> sqrt(x**2+y**2) = 223.7383
 x = +131.3255 y = +37.8114i -> sqrt(x**2+y**2) = 136.6605 
 x = -2.8497 y = +35.4677i -> sqrt(x**2+y**2) = 35.5820