Linear Algebra and the C Language/a03q
Install and compile this file in your working directory.
/* ------------------------------------ */
/* Save as: c02a.c */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define RA R3
#define CA C5
/* ------------------------------------ */
#define FACTOR_E +1.E-0
/* ------------------------------------ */
void fun(void)
{
double **A = r_mR( i_mR(RA,CA),9);
double **Pinv = Pinv_Cn_mR(A, i_mR(CA,RA),FACTOR_E);
double **Ide = mul_mR(A,Pinv, i_mR(RA,RA));
clrscrn();
printf(" A:");
p_mR(A, S7,P2,C7);
printf(" PseudoInverse = V invS_T U_T ");
pE_mR(Pinv, S12,P4,C10);
printf(" Ide = A Pinv (The right inverse of A)");
p_mR(Ide, S7,P2,C10);
f_mR(A);
f_mR(Pinv);
f_mR(Ide);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun();
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Screen output example:
A :
+6.00 -1.00 +1.00 -2.00 -9.00
-4.00 +5.00 +5.00 +2.00 -6.00
+4.00 -6.00 +3.00 +6.00 -6.00
PseudoInverse = V * invS_T * U_T
+5.7066e-02 -5.2471e-02 +4.6021e-03
+1.8842e-02 +5.2565e-02 -6.2457e-02
-1.8199e-02 +4.7341e-02 +2.6768e-02
-7.1415e-02 +2.3166e-02 +8.2423e-02
-6.1313e-02 -4.0709e-02 -5.3345e-03
Ide = A * Pinv (The right inverse of 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