Mathc complexes/089
Apparence
Fonctions matricielles dans C. Matrices Non symétriques conjugués
Installer et compiler ces fichiers dans votre répertoire de travail.
c00c.c |
|---|
/* ------------------------------------ */
/* Save as : c00c.c */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define FACTOR_E +1.E-0
#define RCA RC3
/* ------------------------------------ */
/* ------------------------------------ */
double **EV_cos2A_mZ(
double **EV,
double **EV_cos2A
)
{
int r;
int c;
nb_Z cos2A;
for ( r=R1; r<EV[R_SIZE][C0]; r++)
for ( c=C1; c<EV[C_SIZE][C0]; c+=C2)
if(((r-R1)*C2)==c-C1)
{
cos2A = cos_Z(i_Z(2.*EV[r][c],2.*EV[r][c+C1]));
EV_cos2A[r][c ] = cos2A.r;
EV_cos2A[r][c+C1] = cos2A.i;
}
return(EV_cos2A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **EV_Imns2sinA_2_mZ(
double **EV,
double **EV_Imns2sinA_2
)
{
int r;
int c;
nb_Z sina;
nb_Z Imns = {1,0};
nb_Z Imns2sinA_2;
for ( r=R1; r<EV[R_SIZE][C0]; r++)
for ( c=C1; c<EV[C_SIZE][C0]; c+=C2)
if(((r-R1)*C2)==c-C1)
{
sina = sin_Z(i_Z( EV[r][c], EV[r][c+C1]));
Imns2sinA_2 = sub_Z(Imns,smul_Z(2., mul_Z(sina,sina)));
EV_Imns2sinA_2[r][c ] = Imns2sinA_2.r;
EV_Imns2sinA_2[r][c+C1] = Imns2sinA_2.i;
}
return(EV_Imns2sinA_2);
}
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
{
double **A = i_mZ(RCA,RCA);
double **V = i_mZ(RCA,RCA);
double **invV = i_mZ(RCA,RCA);
double **T = i_mZ(RCA,RCA);
double **EV = i_mZ(RCA,RCA);
double **EV_cos2a = i_mZ(RCA,RCA);
double **EV_Imns2sinA_2 = i_mZ(RCA,RCA);
double **cos2a = i_mZ(RCA,RCA);
double **Imns2sinA_2 = i_mZ(RCA,RCA);
do
{
rE_mZ(A,999,+1.E-4);
eigs_V_mZ(A,V,FACTOR_E);
}while(!det_Z(V).r);
clrscrn();
printf(" A :");
p_mZ(A, S9,P4, S8,P4, C3);
printf(" V :");
eigs_V_mZ(A,V,FACTOR_E);
pE_mZ(V, S12,P4, S12,P4, C3);
printf(" inv(V) ... Some time the matrix is not invertible :");
inv_mZ(V,invV);
pE_mZ(invV, S12,P4, S12,P4, C3);
printf(" EV = invV * A * V");
mul_mZ(invV,A,T);
mul_mZ(T,V,EV);
pE_mZ(clean_eyes_mZ(EV), S12,P4, S12,P4, C3);
stop();
clrscrn();
printf(" cos(2*A) :");
EV_cos2A_mZ(EV,EV_cos2a);
mul_mZ(V,EV_cos2a,T);
mul_mZ(T,invV,cos2a);
pE_mZ(cos2a, S12,P4, S8,P4, C3);
printf(" 1-2sin(A)**2 :");
EV_Imns2sinA_2_mZ(EV,EV_Imns2sinA_2);
mul_mZ(V,EV_Imns2sinA_2,T);
mul_mZ(T,invV,Imns2sinA_2);
pE_mZ(Imns2sinA_2, S12,P4, S8,P4, C3);
f_mZ(A);
f_mZ(V);
f_mZ(invV);
f_mZ(T);
f_mZ(EV);
f_mZ(EV_cos2a);
f_mZ(cos2a);
f_mZ(EV_Imns2sinA_2);
f_mZ(Imns2sinA_2);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun();
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Nous avons vu que :
cos(x+y) = cos(x)cos(y)-sin(x)sin(y)
posons x = y
cos(x+x) = cos(x)cos(x)-sin(x)sin(x)
cos(2x) = cos(x)**2-sin(x)**2 cos(x)**2 + sin(x)**2 = 1
cos(x)**2 = 1-sin(x)**2
cos(2x) = (1-sin(x)**2)-sin(x)**2
cos(2x) = 1-2*sin(x)**2
Exemple de sortie écran :
A :
-0.0411 +0.0759i -0.0650 -0.0906i +0.0567 +0.0918i
+0.0870 -0.0133i +0.0491 +0.0001i -0.0668 +0.0037i
-0.0445 -0.0012i +0.0516 +0.0638i +0.0324 -0.0773i
V :
-3.8191e-01 +2.7475e-01i -2.5750e-01 -8.1920e-01i +3.1283e-01 +2.0515e-02i
-2.8710e-01 -4.4859e-01i -1.1446e-01 +4.3936e-01i +6.3082e-01 +3.1546e-01i
+7.0356e-01 +0.0000e+00i +2.3762e-01 -1.3191e-17i +6.3582e-01 +0.0000e+00i
inv(V) ... Some time the matrix is not invertible :
-2.7417e-01 -1.5521e-01i -4.4496e-01 +4.0485e-01i +7.7220e-01 -9.5684e-02i
-3.0189e-01 +7.8396e-01i -3.0753e-01 -4.0763e-01i +2.7669e-01 +1.8103e-01i
+4.1620e-01 -1.2124e-01i +6.0729e-01 -2.9564e-01i +6.1489e-01 +3.8222e-02i
EV = invV * A * V
+7.6647e-02 -1.5296e-01i +0.0000e+00 +0.0000e+00i +0.0000e+00 +0.0000e+00i
+0.0000e+00 +0.0000e+00i -6.6331e-02 +1.4209e-01i +0.0000e+00 +0.0000e+00i
+0.0000e+00 +0.0000e+00i +0.0000e+00 +0.0000e+00i +3.0084e-02 +9.5729e-03i
Press return to continue.
cos(2*A) :
+1.0266e+00+3.5186e-02i -6.8502e-03-5.4283e-03i -8.6142e-03-1.0005e-02i
-9.3504e-03-1.2972e-02i +1.0162e+00+2.2405e-02i -1.8044e-03-2.5526e-02i
-1.1424e-02-1.0004e-02i -2.3890e-02-1.0892e-02i +1.0220e+00+2.6799e-02i
1-2sin(A)**2 :
+1.0266e+00+3.5186e-02i -6.8502e-03-5.4283e-03i -8.6142e-03-1.0005e-02i
-9.3504e-03-1.2972e-02i +1.0162e+00+2.2405e-02i -1.8044e-03-2.5526e-02i
-1.1424e-02-1.0004e-02i -2.3890e-02-1.0892e-02i +1.0220e+00+2.6799e-02i
Press return to continue
Press X return to stop