Mathc complexes/08a
Apparence
Fonctions matricielles dans C. Matrices Non symétriques conjugués
Installer et compiler ces fichiers dans votre répertoire de travail.
c00b.c |
|---|
/* ------------------------------------ */
/* Save as : c00c.c */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define FACTOR_E +1.E-0
#define RCA RC3
/* ------------------------------------ */
/* ------------------------------------ */
double **EV_cosh2A_mZ(
double **EV,
double **EV_cosh2A
)
{
int r;
int c;
nb_Z cosh2A;
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)
{
cosh2A = cosh_Z(i_Z(2.*EV[r][c],2.*EV[r][c+C1]));
EV_cosh2A[r][c ] = cosh2A.r;
EV_cosh2A[r][c+C1] = cosh2A.i;
}
return(EV_cosh2A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **EV_Ipls2sinhA_2_mZ(
double **EV,
double **EV_Ipls2sinhA_2
)
{
int r;
int c;
nb_Z sinha;
nb_Z Ipls = {1,0};
nb_Z Ipls2sinhA_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)
{
sinha = sinh_Z(i_Z( EV[r][c], EV[r][c+C1]));
Ipls2sinhA_2 = add_Z(Ipls,smul_Z(2., mul_Z(sinha,sinha)));
EV_Ipls2sinhA_2[r][c ] = Ipls2sinhA_2.r;
EV_Ipls2sinhA_2[r][c+C1] = Ipls2sinhA_2.i;
}
return(EV_Ipls2sinhA_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_cosh2a = i_mZ(RCA,RCA);
double **EV_Ipls2sinhA_2 = i_mZ(RCA,RCA);
double **cosh2a = i_mZ(RCA,RCA);
double **Ipls2sinhA_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(" cosh(2*A) :");
EV_cosh2A_mZ(EV,EV_cosh2a);
mul_mZ(V,EV_cosh2a,T);
mul_mZ(T,invV,cosh2a);
pE_mZ(cosh2a, S12,P4, S8,P4, C3);
printf(" 1+2sinh(A)**2 :");
EV_Ipls2sinhA_2_mZ(EV,EV_Ipls2sinhA_2);
mul_mZ(V,EV_Ipls2sinhA_2,T);
mul_mZ(T,invV,Ipls2sinhA_2);
pE_mZ(Ipls2sinhA_2, S12,P4, S8,P4, C3);
f_mZ(A);
f_mZ(V);
f_mZ(invV);
f_mZ(T);
f_mZ(EV);
f_mZ(EV_cosh2a);
f_mZ(cosh2a);
f_mZ(EV_Ipls2sinhA_2);
f_mZ(Ipls2sinhA_2);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun();
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Nous avons vu que :
cosh(x+y) = cosh(x) cosh(y) + sinh(x) sinh(y)
posons x = y
cosh(x+x) = cosh(x) cosh(x) + sinh(x) sinh(x)
1) cosh(2x) = cosh(x)**2 + sinh(x)**2 cosh(x)**2-sinh(x)**2 = 1
cosh(x)**2 = 1+sinh(x)**2
cosh(2x) = (1+sinh(x)**2) + sinh(x)**2
cosh(2x) = 1 + 2*sinh(x)**2
Exemple de sortie écran :
A :
+0.0672 +0.0364i +0.0693 +0.0531i +0.0753 +0.0813i
+0.0556 -0.0418i +0.0351 -0.0991i +0.0752 -0.0426i
-0.0002 -0.0505i +0.0676 +0.0001i +0.0380 -0.0699i
V :
+9.2607e-03 +6.8623e-01i -1.8211e-01 -8.7905e-02i -6.8387e-01 -3.1647e-01i
+5.0729e-01 +6.4267e-03i -6.5271e-01 +9.1736e-03i -1.3753e-01 +9.0461e-02i
+5.2118e-01 +0.0000e+00i +7.3007e-01 +0.0000e+00i +6.3645e-01 -1.7665e-17i
inv(V) ... Some time the matrix is not invertible :
+4.5804e-01 -3.4885e-01i +6.9352e-01 -3.0249e-01i +7.7250e-01 -3.1102e-01i
+4.1535e-01 -5.7891e-01i -1.2384e+00 -2.3696e-01i +4.3288e-01 -2.9069e-01i
-8.5153e-01 +9.4972e-01i +8.5267e-01 +5.1952e-01i +4.4208e-01 +5.8813e-01i
EV = invV * A * V
+1.7029e-01 -7.0130e-02i +0.0000e+00 +0.0000e+00i +0.0000e+00 +0.0000e+00i
+0.0000e+00 +0.0000e+00i -2.8469e-02 -5.6519e-02i +0.0000e+00 +0.0000e+00i
+0.0000e+00 +0.0000e+00i +0.0000e+00 +0.0000e+00i -1.5172e-03 -5.9514e-03i
Press return to continue.
cosh(2*A) :
+1.0269e+00+2.0726e-03i +3.1368e-02+1.3015e-02i +3.6644e-02+1.3976e-02i
+1.6731e-03-2.3282e-02i +1.0050e+00-1.9828e-02i +1.1652e-02-2.9202e-02i
+3.9557e-03-1.6438e-02i +1.5133e-02-3.0124e-02i +1.0113e+00-2.4320e-02i
1+2sinh(A)**2 :
+1.0269e+00+2.0726e-03i +3.1368e-02+1.3015e-02i +3.6644e-02+1.3976e-02i
+1.6731e-03-2.3282e-02i +1.0050e+00-1.9828e-02i +1.1652e-02-2.9202e-02i
+3.9557e-03-1.6438e-02i +1.5133e-02-3.0124e-02i +1.0113e+00-2.4320e-02i
Press return to continue
Press X return to stop