Linear Algebra and the C Language/a0cm
Install and compile this file in your working directory.
/* ------------------------------------ */
/* Save as : c00a.c */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define RCA C3
/* ------------------------------------ */
int main(void)
{
double a[RCA*RCA]={
+3,-1,+2,
-1,+4,+3,
+2,+3,+7
};
double R = 6;
double **A = ca_A_mR(a, i_mR(RCA,RCA));
double **EVector = eigs_V_mR(A, i_mR(RCA,RCA));
double **EVectorT = transpose_mR(EVector, i_mR(RCA,RCA));
double **T1 = i_mR(RCA,RCA);
double **T2 = i_mR(RCA,RCA);
clrscrn();
printf(" If %+.0fx^2 %+.0fy^2 %+.0fz^2 "
" %+.0fxy %+.0fxz %+.0fyz= %+.0f \n\n"
" Can you give a description of the curve "
" in the standar basis?\n\n",
A[R1][C1], A[R2][C2], A[R3][C3],
2*(A[R2][C1]), 2*(A[R3][C1]), 2*(A[R3][C2]), R);
printf(" A:");
p_mR(A,S10,P4,C6);
printf(" EVector:");
p_mR(EVector,S10,P4,C6);
printf(" EValue : EVectorT A EVector");
mul_mR(EVectorT,A,T1);
mul_mR(T1,EVector,T2);
p_mR(T2,S10,P4,C6);
printf(" Then : %+.3f x^2 %+.3f y^2 %+.3f z^2 = %+.3f \n\n"
" It is an ellipsoid\n\n",
T2[R1][C1], T2[R2][C2], T2[R3][C3], R);
stop();
f_mR(A);
f_mR(EVector);
f_mR(EVectorT);
f_mR(T1);
f_mR(T2);
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Screen output example:
If +3x^2 +4y^2 +7z^2 -2xy +4xz +6yz= +6
Can you give a description of the curve in the standar basis?
A:
+3.0000 -1.0000 +2.0000
-1.0000 +4.0000 +3.0000
+2.0000 +3.0000 +7.0000
EVector:
+0.2058 +0.7416 +0.6385
+0.4658 -0.6481 +0.6026
+0.8607 +0.1734 -0.4788
EValue : EVectorT A EVector
+9.1017 -0.0000 +0.0000
-0.0000 +4.3416 +0.0000
-0.0000 +0.0000 +0.5567
Then : +9.102 x^2 +4.342 y^2 +0.557 z^2 = +6.000
It is an ellipsoid
Press return to continue.