Linear Algebra and the C Language/a04t
Install and compile this file in your working directory.
/* ------------------------------------ */
/* Save as: c00a.c */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
#define RA R5
#define CA C3
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
{
double **A = r_mR( i_mR(RA,CA),9);
double **A_T = transpose_mR(A, i_mR(CA,RA));
double **A_TA = mul_mR(A_T,A, i_mR(CA,CA));
double **invA_TA = inv_mR(A_TA, i_mR(CA,CA));
double **invA_TAA_T = mul_mR(invA_TA,A_T, i_mR(CA,RA));
double **Ide = mul_mR(invA_TAA_T,A, i_mR(CA,CA));
clrscrn();
printf(" A:");
p_mR(A, S7,P2,C5);
printf(" A_T:");
p_mR(A_T, S7,P2,C5);
printf(" A_TA:");
p_mR(A_TA, S7,P2,C5);
stop();
clrscrn();
printf(" inv(A_TA):");
pE_mR(invA_TA, S12,P4,C5);
printf(" Pseudo Inverse = inv(A_TA) A_T");
pE_mR(invA_TAA_T, S12,P4,C5);
printf(" Ide = (inv(A_TA)A_T) A");
p_mR(Ide, S8,P2,C5);
f_mR(A);
f_mR(A_T);
f_mR(A_TA);
f_mR(invA_TA);
f_mR(invA_TAA_T);
f_mR(Ide);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun();
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Screen output example:
A:
+1.00 -3.00 -7.00
-5.00 -7.00 +8.00
+9.00 -1.00 -3.00
-4.00 +9.00 -7.00
+1.00 -2.00 -9.00
A_T:
+1.00 -5.00 +9.00 -4.00 +1.00
-3.00 -7.00 -1.00 +9.00 -2.00
-7.00 +8.00 -3.00 -7.00 -9.00
A_TA:
+124.00 -15.00 -55.00
-15.00 +144.00 -77.00
-55.00 -77.00 +252.00
Press return to continue.
inv(A_TA):
+9.6526e-03 +2.5484e-03 +2.8854e-03
+2.5484e-03 +8.9735e-03 +3.2981e-03
+2.8854e-03 +3.2981e-03 +5.6057e-03
Pseudo Inverse = inv(A_TA)*A_T
-1.8190e-02 -4.3018e-02 +7.5669e-02 -3.5873e-02 -2.1413e-02
-4.7459e-02 -4.9171e-02 +4.0675e-03 +4.7481e-02 -4.5081e-02
-4.6249e-02 +7.3325e-03 +5.8531e-03 -2.1099e-02 -5.4162e-02
Ide = (inv(A_TA) A_T) A
+1.00 +0.00 -0.00
+0.00 +1.00 -0.00
-0.00 -0.00 +1.00
Press return to continue
Press X return to stop