Linear Algebra and the C Language/a0bz
Install and compile this file in your working directory.
/* ------------------------------------ */
/* Save as : c00a.c */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define RCA RC5
/* ------------------------------------ */
/* ------------------------------------ */
double f(
double x)
{
return(sin(x)*sin(x));
}
char feq[] = "sin(x)*sin(x)";
/* ------------------------------------ */
double g(
double x)
{
return(cos(x)*cos(x));
}
char geq[] = "cos(x)*cos(x)";
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
{
double **A = rsymmetric_mR(i_mR(RCA,RCA),999.);
double **sin_A = i_mR(RCA,RCA);
double **cos_A = i_mR(RCA,RCA);
double **Ide = i_mR(RCA,RCA);
double **EigsVector = i_mR(RCA,RCA);
double **T_EigsVector = i_mR(RCA,RCA);
double **EigsValue = i_mR(RCA,RCA);
double **sin_EigsValue = i_mR(RCA,RCA);
double **cos_EigsValue = i_mR(RCA,RCA);
double **T1 = i_mR(RCA,RCA);
clrscrn();
printf(" A :");
p_mR(A,S10,P4,C6);
stop();
clrscrn();
eigs_V_mR(A,EigsVector);
transpose_mR(EigsVector,T_EigsVector);
/* EigsValue : T_EigsVector * A * EigsVector */
mul_mR(T_EigsVector,A,T1);
mul_mR(T1,EigsVector,EigsValue);
printf(" sin(A)**2");
f_eigs_mR(f,EigsValue,sin_EigsValue);
mul_mR(EigsVector,sin_EigsValue,T1);
mul_mR(T1,T_EigsVector,sin_A);
p_mR(sin_A,S10,P4,C6);
printf(" cos(A)**2");
f_eigs_mR(g,EigsValue,cos_EigsValue);
mul_mR(EigsVector,cos_EigsValue,T1);
mul_mR(T1,T_EigsVector,cos_A);
p_mR(cos_A,S10,P4,C6);
printf(" Ide : cos(A)**2 + sin(A)**2");
add_mR(sin_A,cos_A,Ide);
p_mR(Ide,S10,P4,C6);
f_mR(A);
f_mR(sin_A);
f_mR(cos_A);
f_mR(Ide);
f_mR(EigsVector);
f_mR(T_EigsVector);
f_mR(EigsValue);
f_mR(cos_EigsValue);
f_mR(sin_EigsValue);
f_mR(T1);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun();
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Screen output example:
A :
+30.0000 +889.0000 +459.0000 +460.0000 -952.0000
+889.0000 +470.0000 -503.0000 +704.0000 -395.0000
+459.0000 -503.0000 +94.0000 -22.0000 +494.0000
+460.0000 +704.0000 -22.0000 -681.0000 +384.0000
-952.0000 -395.0000 +494.0000 +384.0000 +916.0000
Press return to continue.
sin(A)**2
+0.4141 -0.1427 -0.2166 -0.0190 +0.2122
-0.1427 +0.4549 +0.2308 -0.1967 +0.1080
-0.2166 +0.2308 +0.2668 -0.0143 -0.0338
-0.0190 -0.1967 -0.0143 +0.7270 -0.0386
+0.2122 +0.1080 -0.0338 -0.0386 +0.3433
cos(A)**2
+0.5859 +0.1427 +0.2166 +0.0190 -0.2122
+0.1427 +0.5451 -0.2308 +0.1967 -0.1080
+0.2166 -0.2308 +0.7332 +0.0143 +0.0338
+0.0190 +0.1967 +0.0143 +0.2730 +0.0386
-0.2122 -0.1080 +0.0338 +0.0386 +0.6567
Ide : cos(A)**2 + sin(A)**2
+1.0000 -0.0000 +0.0000 +0.0000 +0.0000
-0.0000 +1.0000 +0.0000 +0.0000 -0.0000
+0.0000 +0.0000 +1.0000 -0.0000 -0.0000
+0.0000 +0.0000 -0.0000 +1.0000 -0.0000
+0.0000 -0.0000 -0.0000 -0.0000 +1.0000
Press return to continue
Press X return to stop