Linear Algebra and the C Language/a09y


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :   c00b.c                  */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define   RA R3
#define   CA C3
#define   Cb C1
/* ------------------------------------ */
int main(void)
{
double at[RA*CA]={
     +10,     -150,     -148, 
    +207,     -215,     +997, 
    -858,     +803,     +289  
};

double bt[RA*Cb]={
    +437,  
    -233,     
    +444 
};

double **A    =  ca_A_mR(at,     i_mR(RA,CA));
double **B    =  ca_A_mR(bt,     i_mR(RA,Cb));

double **InvA = invgj_mR(A,      i_mR(RA,CA));
double **X    =   mul_mR(InvA,B, i_mR(RA,Cb)) ;
double **T    =   mul_mR(A,X,    i_mR(RA,Cb)) ;

  clrscrn();
  printf(" We want to find X such as,   \n\n");
  printf("         AX = B               \n\n");
  printf(" If A is a square matrix and, \n\n");
  printf(" If A has an inverse matrix,  \n\n");
  printf(" you can find X by this method\n\n");
  printf("         X = inv(A) B       \n\n\n");
  printf(" To verify the result you can \n\n");
  printf(" multiply the matrix A by X.  \n\n");
  printf(" You must refind B.           \n\n");
  stop();

  clrscrn();
  printf(" A:");
  p_mR(A,S5,P0,C7);
  printf(" B:");
  p_mR(B,S5,P0,C7);

  printf(" InvA:");
  pE_mR(InvA,S1,P3,C7);
  printf(" X = InvA B:");
  p_mR(X,S13,P4,C7);
  stop();

  clrscrn();
  printf("  B:");
  p_mR(B,S5,P0,C7);
  printf(" AX:");
  p_mR(T,S5,P0,C7);
  stop();

  f_mR(T);
  f_mR(X);
  f_mR(B);
  f_mR(InvA);
  f_mR(A);

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */


Screen output example:

 We want to find X such as,   

         AX = B               

 If A is a square matrix and, 

 If A has an inverse matrix,  

 you can find X by this method

         X = inv(A) B       


 To verify the result you can 

 multiply the matrix A by X.  

 You must refind B.  

 Press return to continue. 


 A :
  +10  -150  -148 
 +207  -215  +997 
 -858  +803  +289 

 B :
 +437 
 -233 
 +444 

 Press return to continue. 


 inv(A) :
-6.568e-03 -5.747e-04 -1.381e-03 
-6.967e-03 -9.447e-04 -3.091e-04 
-1.389e-04 +9.186e-04 +2.200e-04 

 X = inv(A) * B :

      -3.3492 
      -2.9619 
      -0.1771 

 Press return to continue. 


 B :
 +437 
 -233 
 +444 

  AX :
 +437 
 -233 
 +444 

 Press return to continue.