eigenmath/37.c
2005-11-29 12:19:21 -07:00

577 lines
18 KiB
C

/* Derive $\Lambda$ such that $\Lambda F \Lambda^{-1} = F_R$. */
#include <stdio.h>
#include <math.h>
double E1 = 4.0;
double E2 = 4.0;
double E3 = 4.0;
double B1 = 0.0;
double B2 = 0.0;
double B3 = 0.0;
double e1, e2, e3;
double b1, b2, b3;
double t1, t2, t3;
double a11, a12, a13, a14;
double a21, a22, a23, a24;
double a31, a32, a33, a34;
double a41, a42, a43, a44;
double b11, b12, b13, b14;
double b21, b22, b23, b24;
double b31, b32, b33, b34;
double b41, b42, b43, b44;
double t_11, t_12, t_13;
double t_21, t_22, t_23;
double t_31, t_32, t_33;
double R11, R12, R13, R14;
double R21, R22, R23, R24;
double R31, R32, R33, R34;
double R41, R42, R43, R44;
double r1_11, r1_12, r1_13;
double r1_21, r1_22, r1_23;
double r1_31, r1_32, r1_33;
double r2_11, r2_12, r2_13;
double r2_21, r2_22, r2_23;
double r2_31, r2_32, r2_33;
double r3_11, r3_12, r3_13;
double r3_21, r3_22, r3_23;
double r3_31, r3_32, r3_33;
double beta, ygamma;
double L11, L12, L13, L14;
double L21, L22, L23, L24;
double L31, L32, L33, L34;
double L41, L42, L43, L44;
double F11, F12, F13, F14;
double F21, F22, F23, F24;
double F31, F32, F33, F34;
double F41, F42, F43, F44;
double LRFRL11, LRFRL12, LRFRL13, LRFRL14;
double LRFRL21, LRFRL22, LRFRL23, LRFRL24;
double LRFRL31, LRFRL32, LRFRL33, LRFRL34;
double LRFRL41, LRFRL42, LRFRL43, LRFRL44;
double FsubR11, FsubR12, FsubR13, FsubR14;
double FsubR21, FsubR22, FsubR23, FsubR24;
double FsubR31, FsubR32, FsubR33, FsubR34;
double FsubR41, FsubR42, FsubR43, FsubR44;
/* R F R^-1 */
double RFR11, RFR12, RFR13, RFR14;
double RFR21, RFR22, RFR23, RFR24;
double RFR31, RFR32, RFR33, RFR34;
double RFR41, RFR42, RFR43, RFR44;
double R1_11, R1_12, R1_13, R1_14;
double R1_21, R1_22, R1_23, R1_24;
double R1_31, R1_32, R1_33, R1_34;
double R1_41, R1_42, R1_43, R1_44;
double Lambda11, Lambda12, Lambda13, Lambda14;
double Lambda21, Lambda22, Lambda23, Lambda24;
double Lambda31, Lambda32, Lambda33, Lambda34;
double Lambda41, Lambda42, Lambda43, Lambda44;
main()
{
F11 = 0.0;
F12 = B3;
F13 = -B2;
F14 = E1;
F21 = -B3;
F22 = 0.0;
F23 = B1;
F24 = E2;
F31 = B2;
F32 = -B1;
F33 = 0.0;
F34 = E3;
F41 = E1;
F42 = E2;
F43 = E3;
F44 = 0.0;
printf(" $$ F = \\left [ \\matrix { \n");
printf(" %15g & %15g & %15g & %15g \\cr \n", F11, F12, F13, F14);
printf(" %15g & %15g & %15g & %15g \\cr \n", F21, F22, F23, F24);
printf(" %15g & %15g & %15g & %15g \\cr \n", F31, F32, F33, F34);
printf(" %15g & %15g & %15g & %15g \\cr \n", F41, F42, F43, F44);
printf(" } \\right ] $$ \n\n");
DeriveFsubR();
ComputeLambda();
}
DeriveFsubR()
{
double d;
DeriveL();
d = sqrt(LRFRL42 * LRFRL42 + LRFRL43 * LRFRL43);
R1_11 = 1.0;
R1_12 = 0.0;
R1_13 = 0.0;
R1_14 = 0.0;
R1_21 = 0.0;
R1_22 = LRFRL43 / d;
R1_23 = -LRFRL42 / d;
R1_24 = 0.0;
R1_31 = 0.0;
R1_32 = LRFRL42 / d;
R1_33 = LRFRL43 / d;
R1_34 = 0.0;
R1_41 = 0.0;
R1_42 = 0.0;
R1_43 = 0.0;
R1_44 = 1.0;
/* R1 LRFRL */
a11 = R1_11 * LRFRL11 + R1_12 * LRFRL21 + R1_13 * LRFRL31 + R1_14 * LRFRL41;
a12 = R1_11 * LRFRL12 + R1_12 * LRFRL22 + R1_13 * LRFRL32 + R1_14 * LRFRL42;
a13 = R1_11 * LRFRL13 + R1_12 * LRFRL23 + R1_13 * LRFRL33 + R1_14 * LRFRL43;
a14 = R1_11 * LRFRL14 + R1_12 * LRFRL24 + R1_13 * LRFRL34 + R1_14 * LRFRL44;
a21 = R1_21 * LRFRL11 + R1_22 * LRFRL21 + R1_23 * LRFRL31 + R1_24 * LRFRL41;
a22 = R1_21 * LRFRL12 + R1_22 * LRFRL22 + R1_23 * LRFRL32 + R1_24 * LRFRL42;
a23 = R1_21 * LRFRL13 + R1_22 * LRFRL23 + R1_23 * LRFRL33 + R1_24 * LRFRL43;
a24 = R1_21 * LRFRL14 + R1_22 * LRFRL24 + R1_23 * LRFRL34 + R1_24 * LRFRL44;
a31 = R1_31 * LRFRL11 + R1_32 * LRFRL21 + R1_33 * LRFRL31 + R1_34 * LRFRL41;
a32 = R1_31 * LRFRL12 + R1_32 * LRFRL22 + R1_33 * LRFRL32 + R1_34 * LRFRL42;
a33 = R1_31 * LRFRL13 + R1_32 * LRFRL23 + R1_33 * LRFRL33 + R1_34 * LRFRL43;
a34 = R1_31 * LRFRL14 + R1_32 * LRFRL24 + R1_33 * LRFRL34 + R1_34 * LRFRL44;
a41 = R1_41 * LRFRL11 + R1_42 * LRFRL21 + R1_43 * LRFRL31 + R1_44 * LRFRL41;
a42 = R1_41 * LRFRL12 + R1_42 * LRFRL22 + R1_43 * LRFRL32 + R1_44 * LRFRL42;
a43 = R1_41 * LRFRL13 + R1_42 * LRFRL23 + R1_43 * LRFRL33 + R1_44 * LRFRL43;
a44 = R1_41 * LRFRL14 + R1_42 * LRFRL24 + R1_43 * LRFRL34 + R1_44 * LRFRL44;
/* R1 LRFRL R1^-1 */
FsubR11 = a11 * R1_11 + a12 * R1_12 + a13 * R1_13 - a14 * R1_14;
FsubR12 = a11 * R1_21 + a12 * R1_22 + a13 * R1_23 - a14 * R1_24;
FsubR13 = a11 * R1_31 + a12 * R1_32 + a13 * R1_33 - a14 * R1_34;
FsubR14 = -a11 * R1_41 - a12 * R1_42 - a13 * R1_43 + a14 * R1_44;
FsubR21 = a21 * R1_11 + a22 * R1_12 + a23 * R1_13 - a24 * R1_14;
FsubR22 = a21 * R1_21 + a22 * R1_22 + a23 * R1_23 - a24 * R1_24;
FsubR23 = a21 * R1_31 + a22 * R1_32 + a23 * R1_33 - a24 * R1_34;
FsubR24 = -a21 * R1_41 - a22 * R1_42 - a23 * R1_43 + a24 * R1_44;
FsubR31 = a31 * R1_11 + a32 * R1_12 + a33 * R1_13 - a34 * R1_14;
FsubR32 = a31 * R1_21 + a32 * R1_22 + a33 * R1_23 - a34 * R1_24;
FsubR33 = a31 * R1_31 + a32 * R1_32 + a33 * R1_33 - a34 * R1_34;
FsubR34 = -a31 * R1_41 - a32 * R1_42 - a33 * R1_43 + a34 * R1_44;
FsubR41 = a41 * R1_11 + a42 * R1_12 + a43 * R1_13 - a44 * R1_14;
FsubR42 = a41 * R1_21 + a42 * R1_22 + a43 * R1_23 - a44 * R1_24;
FsubR43 = a41 * R1_31 + a42 * R1_32 + a43 * R1_33 - a44 * R1_34;
FsubR44 = -a41 * R1_41 - a42 * R1_42 - a43 * R1_43 + b44 * R1_44;
if (fabs(FsubR11) < 1e-6) FsubR11 = 0.0;
if (fabs(FsubR12) < 1e-6) FsubR12 = 0.0;
if (fabs(FsubR13) < 1e-6) FsubR13 = 0.0;
if (fabs(FsubR14) < 1e-6) FsubR14 = 0.0;
if (fabs(FsubR21) < 1e-6) FsubR21 = 0.0;
if (fabs(FsubR22) < 1e-6) FsubR22 = 0.0;
if (fabs(FsubR23) < 1e-6) FsubR23 = 0.0;
if (fabs(FsubR24) < 1e-6) FsubR24 = 0.0;
if (fabs(FsubR31) < 1e-6) FsubR31 = 0.0;
if (fabs(FsubR32) < 1e-6) FsubR32 = 0.0;
if (fabs(FsubR33) < 1e-6) FsubR33 = 0.0;
if (fabs(FsubR34) < 1e-6) FsubR34 = 0.0;
if (fabs(FsubR41) < 1e-6) FsubR41 = 0.0;
if (fabs(FsubR42) < 1e-6) FsubR42 = 0.0;
if (fabs(FsubR43) < 1e-6) FsubR43 = 0.0;
if (fabs(FsubR44) < 1e-6) FsubR44 = 0.0;
printf(" $$ R_1 = \\left [ \\matrix { \n");
printf(" %15g & %15g & %15g & %15g \\cr \n", R1_11, R1_12, R1_13, R1_14);
printf(" %15g & %15g & %15g & %15g \\cr \n", R1_21, R1_22, R1_23, R1_24);
printf(" %15g & %15g & %15g & %15g \\cr \n", R1_31, R1_32, R1_33, R1_34);
printf(" %15g & %15g & %15g & %15g \\cr \n", R1_41, R1_42, R1_43, R1_44);
printf(" } \\right ] $$ \n\n");
printf(" $$ F_R = R_1 \\Lambda(\\theta) R_2 F R_2^{-1} \\Lambda(\\theta)^{-1} R_1^{-1} \\left [ \\matrix { \n");
printf(" %15g & %15g & %15g & %15g \\cr \n", FsubR11, FsubR12, FsubR13, FsubR14);
printf(" %15g & %15g & %15g & %15g \\cr \n", FsubR21, FsubR22, FsubR23, FsubR24);
printf(" %15g & %15g & %15g & %15g \\cr \n", FsubR31, FsubR32, FsubR33, FsubR34);
printf(" %15g & %15g & %15g & %15g \\cr \n", FsubR41, FsubR42, FsubR43, FsubR44);
printf(" } \\right ] $$ \n\n");
}
DeriveL()
{
double a, b, c;
DeriveR();
/* construct an L such that e2 / e3 = b2 / b3 */
a = RFR43 * RFR31;
b = RFR43 * RFR43 + RFR31 * RFR31 + RFR12 * RFR12;
c = RFR43 * RFR31;
beta = (-b + sqrt(b * b - 4.0 * a * c)) / a / 2.0;
ygamma = 1.0 / sqrt(1 - beta * beta);
L11 = ygamma;
L12 = 0.0;
L13 = 0.0;
L14 = -beta * ygamma;
L21 = 0.0;
L22 = 1.0;
L23 = 0.0;
L24 = 0.0;
L31 = 0.0;
L32 = 0.0;
L33 = 1.0;
L34 = 0.0;
L41 = -beta * ygamma;
L42 = 0.0;
L43 = 0.0;
L44 = ygamma;
/* L RFR */
a11 = L11 * RFR11 + L12 * RFR21 + L13 * RFR31 + L14 * RFR41;
a12 = L11 * RFR12 + L12 * RFR22 + L13 * RFR32 + L14 * RFR42;
a13 = L11 * RFR13 + L12 * RFR23 + L13 * RFR33 + L14 * RFR43;
a14 = L11 * RFR14 + L12 * RFR24 + L13 * RFR34 + L14 * RFR44;
a21 = L21 * RFR11 + L22 * RFR21 + L23 * RFR31 + L24 * RFR41;
a22 = L21 * RFR12 + L22 * RFR22 + L23 * RFR32 + L24 * RFR42;
a23 = L21 * RFR13 + L22 * RFR23 + L23 * RFR33 + L24 * RFR43;
a24 = L21 * RFR14 + L22 * RFR24 + L23 * RFR34 + L24 * RFR44;
a31 = L31 * RFR11 + L32 * RFR21 + L33 * RFR31 + L34 * RFR41;
a32 = L31 * RFR12 + L32 * RFR22 + L33 * RFR32 + L34 * RFR42;
a33 = L31 * RFR13 + L32 * RFR23 + L33 * RFR33 + L34 * RFR43;
a34 = L31 * RFR14 + L32 * RFR24 + L33 * RFR34 + L34 * RFR44;
a41 = L41 * RFR11 + L42 * RFR21 + L43 * RFR31 + L44 * RFR41;
a42 = L41 * RFR12 + L42 * RFR22 + L43 * RFR32 + L44 * RFR42;
a43 = L41 * RFR13 + L42 * RFR23 + L43 * RFR33 + L44 * RFR43;
a44 = L41 * RFR14 + L42 * RFR24 + L43 * RFR34 + L44 * RFR44;
/* L RFR L^-1 */
LRFRL11 = a11 * L11 + a12 * L12 + a13 * L13 - a14 * L14;
LRFRL12 = a11 * L21 + a12 * L22 + a13 * L23 - a14 * L24;
LRFRL13 = a11 * L31 + a12 * L32 + a13 * L33 - a14 * L34;
LRFRL14 = -a11 * L41 - a12 * L42 - a13 * L43 + a14 * L44;
LRFRL21 = a21 * L11 + a22 * L12 + a23 * L13 - a24 * L14;
LRFRL22 = a21 * L21 + a22 * L22 + a23 * L23 - a24 * L24;
LRFRL23 = a21 * L31 + a22 * L32 + a23 * L33 - a24 * L34;
LRFRL24 = -a21 * L41 - a22 * L42 - a23 * L43 + a24 * L44;
LRFRL31 = a31 * L11 + a32 * L12 + a33 * L13 - a34 * L14;
LRFRL32 = a31 * L21 + a32 * L22 + a33 * L23 - a34 * L24;
LRFRL33 = a31 * L31 + a32 * L32 + a33 * L33 - a34 * L34;
LRFRL34 = -a31 * L41 - a32 * L42 - a33 * L43 + a34 * L44;
LRFRL41 = a41 * L11 + a42 * L12 + a43 * L13 - a44 * L14;
LRFRL42 = a41 * L21 + a42 * L22 + a43 * L23 - a44 * L24;
LRFRL43 = a41 * L31 + a42 * L32 + a43 * L33 - a44 * L34;
LRFRL44 = -a41 * L41 - a42 * L42 - a43 * L43 + b44 * L44;
if (fabs(LRFRL11) < 1e-6) LRFRL11 = 0.0;
if (fabs(LRFRL12) < 1e-6) LRFRL12 = 0.0;
if (fabs(LRFRL13) < 1e-6) LRFRL13 = 0.0;
if (fabs(LRFRL14) < 1e-6) LRFRL14 = 0.0;
if (fabs(LRFRL21) < 1e-6) LRFRL21 = 0.0;
if (fabs(LRFRL22) < 1e-6) LRFRL22 = 0.0;
if (fabs(LRFRL23) < 1e-6) LRFRL23 = 0.0;
if (fabs(LRFRL24) < 1e-6) LRFRL24 = 0.0;
if (fabs(LRFRL31) < 1e-6) LRFRL31 = 0.0;
if (fabs(LRFRL32) < 1e-6) LRFRL32 = 0.0;
if (fabs(LRFRL33) < 1e-6) LRFRL33 = 0.0;
if (fabs(LRFRL34) < 1e-6) LRFRL34 = 0.0;
if (fabs(LRFRL41) < 1e-6) LRFRL41 = 0.0;
if (fabs(LRFRL42) < 1e-6) LRFRL42 = 0.0;
if (fabs(LRFRL43) < 1e-6) LRFRL43 = 0.0;
if (fabs(LRFRL44) < 1e-6) LRFRL44 = 0.0;
printf(" $$ \\Lambda(\\beta) = \\left [ \\matrix { \n");
printf(" %15g & %15g & %15g & %15g \\cr \n", L11, L12, L13, L14);
printf(" %15g & %15g & %15g & %15g \\cr \n", L21, L22, L23, L24);
printf(" %15g & %15g & %15g & %15g \\cr \n", L31, L32, L33, L34);
printf(" %15g & %15g & %15g & %15g \\cr \n", L41, L42, L43, L44);
printf(" } \\right ] $$ \n\n");
printf(" $$ \\Lambda(\\beta) R_2 F R_2^{-1} \\Lambda(\\beta)^{-1} = \\left [ \\matrix { \n");
printf(" %15g & %15g & %15g & %15g \\cr \n", LRFRL11, LRFRL12, LRFRL13, LRFRL14);
printf(" %15g & %15g & %15g & %15g \\cr \n", LRFRL21, LRFRL22, LRFRL23, LRFRL24);
printf(" %15g & %15g & %15g & %15g \\cr \n", LRFRL31, LRFRL32, LRFRL33, LRFRL34);
printf(" %15g & %15g & %15g & %15g \\cr \n", LRFRL41, LRFRL42, LRFRL43, LRFRL44);
printf(" } \\right ] $$ \n\n");
}
DeriveR()
{
double d;
e1 = F41; e2 = F42; e3 = F43;
b1 = F23; b2 = F31; b3 = F12;
/* eliminate e1 */
d = sqrt(e1 * e1 + e2 * e2);
r1_11 = e2 / d; r1_12 = -e1 / d; r1_13 = 0.0;
r1_21 = e1 / d; r1_22 = e2 / d; r1_23 = 0.0;
r1_31 = 0.0; r1_32 = 0.0; r1_33 = 1.0;
t1 = r1_11 * e1 + r1_12 * e2 + r1_13 * e3;
t2 = r1_21 * e1 + r1_22 * e2 + r1_23 * e3;
t3 = r1_31 * e1 + r1_32 * e2 + r1_33 * e3;
e1 = t1;
e2 = t2;
e3 = t3;
t1 = r1_11 * b1 + r1_12 * b2 + r1_13 * b3;
t2 = r1_21 * b1 + r1_22 * b2 + r1_23 * b3;
t3 = r1_31 * b1 + r1_32 * b2 + r1_33 * b3;
b1 = t1;
b2 = t2;
b3 = t3;
/* eliminate e2 */
d = sqrt(e2 * e2 + e3 * e3);
r2_11 = 1.0; r2_12 = 0.0; r2_13 = 0.0;
r2_21 = 0.0; r2_22 = e3 / d; r2_23 = -e2 / d;
r2_31 = 0.0; r2_32 = e2 / d; r2_33 = e3 / d;
t1 = r2_11 * e1 + r2_12 * e2 + r2_13 * e3;
t2 = r2_21 * e1 + r2_22 * e2 + r2_23 * e3;
t3 = r2_31 * e1 + r2_32 * e2 + r2_33 * e3;
e1 = t1;
e2 = t2;
e3 = t3;
t1 = r2_11 * b1 + r2_12 * b2 + r2_13 * b3;
t2 = r2_21 * b1 + r2_22 * b2 + r2_23 * b3;
t3 = r2_31 * b1 + r2_32 * b2 + r2_33 * b3;
b1 = t1;
b2 = t2;
b3 = t3;
/* eliminate b1 */
d = sqrt(b1 * b1 + b2 * b2);
r3_11 = b2 / d; r3_12 = -b1 / d; r3_13 = 0.0;
r3_21 = b1 / d; r3_22 = b2 / d; r3_23 = 0.0;
r3_31 = 0.0; r3_32 = 0.0; r3_33 = 1.0;
/* put them all together */
t_11 = r3_11 * r2_11 + r3_12 * r2_21 + r3_13 * r2_31;
t_12 = r3_11 * r2_12 + r3_12 * r2_22 + r3_13 * r2_32;
t_13 = r3_11 * r2_13 + r3_12 * r2_23 + r3_13 * r2_33;
t_21 = r3_21 * r2_11 + r3_22 * r2_21 + r3_23 * r2_31;
t_22 = r3_21 * r2_12 + r3_22 * r2_22 + r3_23 * r2_32;
t_23 = r3_21 * r2_13 + r3_22 * r2_23 + r3_23 * r2_33;
t_31 = r3_31 * r2_11 + r3_32 * r2_21 + r3_33 * r2_31;
t_32 = r3_31 * r2_12 + r3_32 * r2_22 + r3_33 * r2_32;
t_33 = r3_31 * r2_13 + r3_32 * r2_23 + r3_33 * r2_33;
R11 = t_11 * r1_11 + t_12 * r1_21 + t_13 * r1_31;
R12 = t_11 * r1_12 + t_12 * r1_22 + t_13 * r1_32;
R13 = t_11 * r1_13 + t_12 * r1_23 + t_13 * r1_33;
R14 = 0.0;
R21 = t_21 * r1_11 + t_22 * r1_21 + t_23 * r1_31;
R22 = t_21 * r1_12 + t_22 * r1_22 + t_23 * r1_32;
R23 = t_21 * r1_13 + t_22 * r1_23 + t_23 * r1_33;
R24 = 0.0;
R31 = t_31 * r1_11 + t_32 * r1_21 + t_33 * r1_31;
R32 = t_31 * r1_12 + t_32 * r1_22 + t_33 * r1_32;
R33 = t_31 * r1_13 + t_32 * r1_23 + t_33 * r1_33;
R34 = 0.0;
R41 = 0.0;
R42 = 0.0;
R43 = 0.0;
R44 = 1.0;
/* R F */
a11 = R11 * F11 + R12 * F21 + R13 * F31 + R14 * F41;
a12 = R11 * F12 + R12 * F22 + R13 * F32 + R14 * F42;
a13 = R11 * F13 + R12 * F23 + R13 * F33 + R14 * F43;
a14 = R11 * F14 + R12 * F24 + R13 * F34 + R14 * F44;
a21 = R21 * F11 + R22 * F21 + R23 * F31 + R24 * F41;
a22 = R21 * F12 + R22 * F22 + R23 * F32 + R24 * F42;
a23 = R21 * F13 + R22 * F23 + R23 * F33 + R24 * F43;
a24 = R21 * F14 + R22 * F24 + R23 * F34 + R24 * F44;
a31 = R31 * F11 + R32 * F21 + R33 * F31 + R34 * F41;
a32 = R31 * F12 + R32 * F22 + R33 * F32 + R34 * F42;
a33 = R31 * F13 + R32 * F23 + R33 * F33 + R34 * F43;
a34 = R31 * F14 + R32 * F24 + R33 * F34 + R34 * F44;
a41 = R41 * F11 + R42 * F21 + R43 * F31 + R44 * F41;
a42 = R41 * F12 + R42 * F22 + R43 * F32 + R44 * F42;
a43 = R41 * F13 + R42 * F23 + R43 * F33 + R44 * F43;
a44 = R41 * F14 + R42 * F24 + R43 * F34 + R44 * F44;
/* R F R^-1 */
RFR11 = a11 * R11 + a12 * R12 + a13 * R13 - a14 * R14;
RFR12 = a11 * R21 + a12 * R22 + a13 * R23 - a14 * R24;
RFR13 = a11 * R31 + a12 * R32 + a13 * R33 - a14 * R34;
RFR14 = -a11 * R41 - a12 * R42 - a13 * R43 + a14 * R44;
RFR21 = a21 * R11 + a22 * R12 + a23 * R13 - a24 * R14;
RFR22 = a21 * R21 + a22 * R22 + a23 * R23 - a24 * R24;
RFR23 = a21 * R31 + a22 * R32 + a23 * R33 - a24 * R34;
RFR24 = -a21 * R41 - a22 * R42 - a23 * R43 + a24 * R44;
RFR31 = a31 * R11 + a32 * R12 + a33 * R13 - a34 * R14;
RFR32 = a31 * R21 + a32 * R22 + a33 * R23 - a34 * R24;
RFR33 = a31 * R31 + a32 * R32 + a33 * R33 - a34 * R34;
RFR34 = -a31 * R41 - a32 * R42 - a33 * R43 + a34 * R44;
RFR41 = a41 * R11 + a42 * R12 + a43 * R13 - a44 * R14;
RFR42 = a41 * R21 + a42 * R22 + a43 * R23 - a44 * R24;
RFR43 = a41 * R31 + a42 * R32 + a43 * R33 - a44 * R34;
RFR44 = -a41 * R41 - a42 * R42 - a43 * R43 + a44 * R44;
if (fabs(RFR11) < 1e-6) RFR11 = 0.0;
if (fabs(RFR12) < 1e-6) RFR12 = 0.0;
if (fabs(RFR13) < 1e-6) RFR13 = 0.0;
if (fabs(RFR14) < 1e-6) RFR14 = 0.0;
if (fabs(RFR21) < 1e-6) RFR21 = 0.0;
if (fabs(RFR22) < 1e-6) RFR22 = 0.0;
if (fabs(RFR23) < 1e-6) RFR23 = 0.0;
if (fabs(RFR24) < 1e-6) RFR24 = 0.0;
if (fabs(RFR31) < 1e-6) RFR31 = 0.0;
if (fabs(RFR32) < 1e-6) RFR32 = 0.0;
if (fabs(RFR33) < 1e-6) RFR33 = 0.0;
if (fabs(RFR34) < 1e-6) RFR34 = 0.0;
if (fabs(RFR41) < 1e-6) RFR41 = 0.0;
if (fabs(RFR42) < 1e-6) RFR42 = 0.0;
if (fabs(RFR43) < 1e-6) RFR43 = 0.0;
if (fabs(RFR44) < 1e-6) RFR44 = 0.0;
printf(" $$ R_2 = \\left [ \\matrix { \n");
printf(" %15g & %15g & %15g & %15g \\cr \n", R11, R12, R13, R14);
printf(" %15g & %15g & %15g & %15g \\cr \n", R21, R22, R23, R24);
printf(" %15g & %15g & %15g & %15g \\cr \n", R31, R32, R33, R34);
printf(" %15g & %15g & %15g & %15g \\cr \n", R41, R42, R43, R44);
printf(" } \\right ] $$ \n\n");
printf(" $$ R_2 F R_2^{-1} = \\left [ \\matrix { \n");
printf(" %15g & %15g & %15g & %15g \\cr \n", RFR11, RFR12, RFR13, RFR14);
printf(" %15g & %15g & %15g & %15g \\cr \n", RFR21, RFR22, RFR23, RFR24);
printf(" %15g & %15g & %15g & %15g \\cr \n", RFR31, RFR32, RFR33, RFR34);
printf(" %15g & %15g & %15g & %15g \\cr \n", RFR41, RFR42, RFR43, RFR44);
printf(" } \\right ] $$ \n\n");
}
ComputeLambda()
{
/* R1 L */
a11 = R1_11 * L11 + R1_12 * L21 + R1_13 * L31 + R1_14 * L41;
a12 = R1_11 * L12 + R1_12 * L22 + R1_13 * L32 + R1_14 * L42;
a13 = R1_11 * L13 + R1_12 * L23 + R1_13 * L33 + R1_14 * L43;
a14 = R1_11 * L14 + R1_12 * L24 + R1_13 * L34 + R1_14 * L44;
a21 = R1_21 * L11 + R1_22 * L21 + R1_23 * L31 + R1_24 * L41;
a22 = R1_21 * L12 + R1_22 * L22 + R1_23 * L32 + R1_24 * L42;
a23 = R1_21 * L13 + R1_22 * L23 + R1_23 * L33 + R1_24 * L43;
a24 = R1_21 * L14 + R1_22 * L24 + R1_23 * L34 + R1_24 * L44;
a31 = R1_31 * L11 + R1_32 * L21 + R1_33 * L31 + R1_34 * L41;
a32 = R1_31 * L12 + R1_32 * L22 + R1_33 * L32 + R1_34 * L42;
a33 = R1_31 * L13 + R1_32 * L23 + R1_33 * L33 + R1_34 * L43;
a34 = R1_31 * L14 + R1_32 * L24 + R1_33 * L34 + R1_34 * L44;
a41 = R1_41 * L11 + R1_42 * L21 + R1_43 * L31 + R1_44 * L41;
a42 = R1_41 * L12 + R1_42 * L22 + R1_43 * L32 + R1_44 * L42;
a43 = R1_41 * L13 + R1_42 * L23 + R1_43 * L33 + R1_44 * L43;
a44 = R1_41 * L14 + R1_42 * L24 + R1_43 * L34 + R1_44 * L44;
/* R1 L R2 */
Lambda11 = a11 * R11 + a12 * R21 + a13 * R31 + a14 * R41;
Lambda12 = a11 * R12 + a12 * R22 + a13 * R32 + a14 * R42;
Lambda13 = a11 * R13 + a12 * R23 + a13 * R33 + a14 * R43;
Lambda14 = a11 * R14 + a12 * R24 + a13 * R34 + a14 * R44;
Lambda21 = a21 * R11 + a22 * R21 + a23 * R31 + a24 * R41;
Lambda22 = a21 * R12 + a22 * R22 + a23 * R32 + a24 * R42;
Lambda23 = a21 * R13 + a22 * R23 + a23 * R33 + a24 * R43;
Lambda24 = a21 * R14 + a22 * R24 + a23 * R34 + a24 * R44;
Lambda31 = a31 * R11 + a32 * R21 + a33 * R31 + a34 * R41;
Lambda32 = a31 * R12 + a32 * R22 + a33 * R32 + a34 * R42;
Lambda33 = a31 * R13 + a32 * R23 + a33 * R33 + a34 * R43;
Lambda34 = a31 * R14 + a32 * R24 + a33 * R34 + a34 * R44;
Lambda41 = a41 * R11 + a42 * R21 + a43 * R31 + a44 * R41;
Lambda42 = a41 * R12 + a42 * R22 + a43 * R32 + a44 * R42;
Lambda43 = a41 * R13 + a42 * R23 + a43 * R33 + a44 * R43;
Lambda44 = a41 * R14 + a42 * R24 + a43 * R34 + a44 * R44;
printf(" $$ \\Lambda = R_1 \\Lambda(\\beta) R_2 = \\left [ \\matrix { \n");
printf(" %15g & %15g & %15g & %15g \\cr \n", Lambda11, Lambda12, Lambda13, Lambda14);
printf(" %15g & %15g & %15g & %15g \\cr \n", Lambda21, Lambda22, Lambda23, Lambda24);
printf(" %15g & %15g & %15g & %15g \\cr \n", Lambda31, Lambda32, Lambda33, Lambda34);
printf(" %15g & %15g & %15g & %15g \\cr \n", Lambda41, Lambda42, Lambda43, Lambda44);
printf(" } \\right ] $$ \n\n");
}