Mathc complexes/a170
Installer et compiler ces fichiers dans votre répertoire de travail.
c00a.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 = rcsymmetric_mZ(i_mZ(r,c),9);
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 U_TA2V
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(" Singular value : ");
p_mZ(svdvalue, S10,P4, S9,P4, C10);
printf(" Copy/Past into the octave window.\n\n");
p_Octave_mZ(A,"A",P0, P0);
printf(" SvdValue = svd (A,10) \n");
printf(" EigenValues = eigs (A,10) \n");
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;
}
/* ------------------------------------ */
/* ------------------------------------ */
Je vais utiliser les fonctions X_U_mZ(); X_V_mZ(); sur une matrice conjuguée symétrique.
Cela va me donner les valeurs propres et les valeurs singulières de A.
Exemple de sortie écran :
----------------------------------
A :
+193.00 +0.00i -5.00 -56.00i +39.00 -52.00i
-5.00 +56.00i +88.00 +0.00i -1.00 +40.00i
+39.00 +52.00i -1.00 -40.00i +304.00 +0.00i
U :
+0.2956 -0.3257i -0.6179 +0.5202i +0.2581 +0.2960i
+0.0616 +0.2057i -0.2910 -0.2012i +0.6403 -0.6471i
+0.8721 +0.0000i +0.4717 -0.0000i +0.1305 -0.0000i
V :
+0.2956 -0.3257i -0.6179 +0.5202i +0.2581 +0.2960i
+0.0616 +0.2057i -0.2910 -0.2012i +0.6403 -0.6471i
+0.8721 +0.0000i +0.4717 -0.0000i +0.1305 -0.0000i
S = U_T * A * V :
+345.9988 +0.0000i +0.0000 +0.0000i +0.0000 -0.0000i
+0.0000 +0.0000i +179.1120 -0.0000i -0.0000 +0.0000i
+0.0000 +0.0000i -0.0000 -0.0000i +59.8892 -0.0000i
Press return to continue.
----------------------------------
S = U_T * A * V :
+345.9988 +0.0000i +0.0000 +0.0000i +0.0000 -0.0000i
+0.0000 +0.0000i +179.1120 -0.0000i -0.0000 +0.0000i
+0.0000 +0.0000i -0.0000 -0.0000i +59.8892 -0.0000i
Singular value :
+345.9988 +0.0000i
+179.1120 +0.0000i
+59.8892 +0.0000i
Copy/Past into the octave window.
A=[
+193+0*i,-5-56*i,+39-52*i;
-5+56*i,+88+0*i,-1+40*i;
+39+52*i,-1-40*i,+304+0*i]
SvdValue = svd (A,10)
EigenValues = eigs (A,10)
Exemple de sortie écran dans la fenêtre de octave :
----------------------------------
>> A=[
+193+0*i,-5-56*i,+39-52*i;
-5+56*i,+88+0*i,-1+40*i;
+39+52*i,-1-40*i,+304+0*i]
SvdValue = svd (A,10)
EigenValues = eigs (A,10)
A =
193 + 0i -5 - 56i 39 - 52i
-5 + 56i 88 + 0i -1 + 40i
39 + 52i -1 - 40i 304 + 0i
SvdValue =
345.999
179.112
59.889
EigenValues =
345.999
179.112
59.889
>>