Linear Algebra and the C Language/a0ls
Install and compile this file in your working directory.
/* ------------------------------------ */
/* Save as : c05c.c */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define RAT R2
#define CAT C5
#define Cb C1
/* ------------------------------------ */
#define CFREEV Cb+C3
/* ------------------------------------ */
int main(void)
{
double a_Tb[RAT*(CAT+Cb)]={
2,0,0,4,1,0,
0,3,0,5,0,0
};
double **ATb = ca_A_mR(a_Tb, i_Abr_Ac_bc_mR(RAT,CAT,Cb));
double **AT = c_Ab_A_mR(ATb, i_mR(RAT,CAT));
double **b = c_Ab_b_mR(ATb, i_mR(RAT,Cb));
double **ATb_free = i_Abr_Ac_bc_mR(CAT,CAT,CFREEV);
double **B = i_mR(CAT,CFREEV);
double **ATB = i_mR(RAT,CFREEV);
clrscrn();
printf("Find a basis B for the orthogonal complement of AT.\n\n"
" AT:");
p_mR(AT,S6,P1,C10);
printf(" b:");
p_mR(b,S6,P1,C10);
printf(" ATb:");
p_mR(ATb,S6,P1,C10);
stop();
clrscrn();
printf(" ATb: gj_PP_mR(ATb,NO);");
p_mR(gj_PP_mR(ATb,NO),S7,P3,C10);
put_zeroR_mR(ATb,ATb_free);
put_freeV_mR(ATb_free);
printf(" ATb_free: b CFREEV");
p_mR(gj_PP_mR(ATb_free,YES),S7,P3,C10);
printf(" The free variables of the system above \n"
" are a basis B for the orthogonal complement of AT. \n\n"
" B: Copy the coefficients in the next C file.");
P_mR(c_Ab_b_mR(ATb_free,B),S10,P12,C7);
stop();
clrscrn();
printf("Verify if B is a basis for"
" the orthogonal complement of AT\n\n"
" AT:" );
p_mR(AT, S7,P3,C10);
printf(" B:");
p_mR(B, S7,P3,C10);
printf(" AT B: AT and B are orthogonal");
p_mR(mul_mR(AT,B,ATB), S7,P6,C10);
stop();
f_mR(ATb);
f_mR(AT);
f_mR(b);
f_mR(ATb_free);
f_mR(B);
f_mR(ATB);
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Screen output example:
Find a basis B for the orthogonal complement of AT.
AT:
+2.0 +0.0 +0.0 +4.0 +1.0
+0.0 +3.0 +0.0 +5.0 +0.0
b:
+0.0
+0.0
ATb:
+2.0 +0.0 +0.0 +4.0 +1.0 +0.0
+0.0 +3.0 +0.0 +5.0 +0.0 +0.0
Press return to continue.
ATb: gj_PP_mR(ATb,NO);
+1.000 +0.000 +0.000 +2.000 +0.500 +0.000
+0.000 +1.000 +0.000 +1.667 +0.000 +0.000
ATb_free: b CFREEV
+1.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 -2.000 -0.500
+0.000 +1.000 +0.000 +0.000 +0.000 +0.000 +0.000 -1.667 +0.000
+0.000 +0.000 +1.000 +0.000 +0.000 +0.000 +1.000 +0.000 +0.000
+0.000 +0.000 +0.000 +1.000 +0.000 +0.000 +0.000 +1.000 +0.000
+0.000 +0.000 +0.000 +0.000 +1.000 +0.000 +0.000 +0.000 +1.000
The free variables of the system above
are a basis B for the orthogonal complement of AT.
B: Copy the coefficients in the next C file.
+0.000000000000, +0.000000000000, -2.000000000000, -0.500000000000,
+0.000000000000, +0.000000000000, -1.666666666667, +0.000000000000,
+0.000000000000, +1.000000000000, +0.000000000000, +0.000000000000,
+0.000000000000, +0.000000000000, +1.000000000000, +0.000000000000,
+0.000000000000, +0.000000000000, +0.000000000000, +1.000000000000
Press return to continue.
Verify if B is a basis for the orthogonal complement of AT
AT:
+2.000 +0.000 +0.000 +4.000 +1.000
+0.000 +3.000 +0.000 +5.000 +0.000
B:
+0.000 +0.000 -2.000 -0.500
+0.000 +0.000 -1.667 +0.000
+0.000 +1.000 +0.000 +0.000
+0.000 +0.000 +1.000 +0.000
+0.000 +0.000 +0.000 +1.000
AT B: AT and B are orthogonal
+0.000000 +0.000000 +0.000000 +0.000000
+0.000000 +0.000000 +0.000000 +0.000000
Press return to continue.