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 = i_mR(CA,RA);
double **A_TA = i_mR(CA,CA);
double **invA_TA = i_mR(CA,CA);
double **invA_TAA_T = i_mR(CA,RA);
double **Ide = i_mR(CA,CA);
clrscrn();
printf(" A:");
p_mR(A,S7,P2,C5);
printf(" A_T:");
p_mR(transpose_mR(A,A_T) ,S7,P2,C5);
printf(" A_TA:");
p_mR(mul_mR(A_T,A,A_TA) ,S7,P2,C5);
stop();
clrscrn();
printf(" inv(A_TA):");
pE_mR(inv_mR(A_TA,invA_TA), S12,P4,C5);
printf(" Pseudo Inverse = inv(A_TA)*A_T");
pE_mR(mul_mR(invA_TA,A_T,invA_TAA_T), S12,P4,C5);
printf(" Ide = (inv(A_TA) A_T) A");
mul_mR(invA_TAA_T,A,Ide);
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