Linear Algebra and the C Language/a0bz


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :  c00a.c                   */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define   RCA        RC5
/* ------------------------------------ */
/* ------------------------------------ */
double f(
double x)
{  
        return(sin(x)*sin(x));
}
char  feq[] =  "sin(x)*sin(x)";
/* ------------------------------------ */
double g(
double x)
{  
        return(cos(x)*cos(x));
}
char  geq[] =  "cos(x)*cos(x)";
/* ------------------------------------ */
/* ------------------------------------ */
void fun(void)
{
double **A             = rsymmetric_mR(i_mR(RCA,RCA),999.);
double **sin_A         =               i_mR(RCA,RCA);
double **cos_A         =               i_mR(RCA,RCA);

double **Ide           =               i_mR(RCA,RCA);

double **EigsVector    =               i_mR(RCA,RCA);
double **T_EigsVector  =               i_mR(RCA,RCA);

double **EigsValue     =               i_mR(RCA,RCA);
double **sin_EigsValue =               i_mR(RCA,RCA);
double **cos_EigsValue =               i_mR(RCA,RCA);

double **T1            =               i_mR(RCA,RCA);
  
  clrscrn();
  printf(" A :");
  p_mR(A,S10,P4,C6); 
  stop();

  clrscrn();
  eigs_V_mR(A,EigsVector); 
  transpose_mR(EigsVector,T_EigsVector);
      
/* EigsValue : T_EigsVector * A * EigsVector */
  mul_mR(T_EigsVector,A,T1);
  mul_mR(T1,EigsVector,EigsValue);     

  printf(" sin(A)**2");
  f_eigs_mR(f,EigsValue,sin_EigsValue);
    mul_mR(EigsVector,sin_EigsValue,T1);
    mul_mR(T1,T_EigsVector,sin_A); 
      p_mR(sin_A,S10,P4,C6); 
 
  printf(" cos(A)**2");
  f_eigs_mR(g,EigsValue,cos_EigsValue); 
     mul_mR(EigsVector,cos_EigsValue,T1);
     mul_mR(T1,T_EigsVector,cos_A);
       p_mR(cos_A,S10,P4,C6); 
            
  printf(" Ide : cos(A)**2 + sin(A)**2");
  add_mR(sin_A,cos_A,Ide);
    p_mR(Ide,S10,P4,C6);        
   
  f_mR(A);
  f_mR(sin_A);
  f_mR(cos_A);
  
  f_mR(Ide);
    
  f_mR(EigsVector);
  f_mR(T_EigsVector);
  
  f_mR(EigsValue);
  f_mR(cos_EigsValue);    
  f_mR(sin_EigsValue);    
      
  f_mR(T1);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun();

} while(stop_w());

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


Screen output example:

                                                                                       
 A :
  +30.0000  +889.0000  +459.0000  +460.0000  -952.0000 
 +889.0000  +470.0000  -503.0000  +704.0000  -395.0000 
 +459.0000  -503.0000   +94.0000   -22.0000  +494.0000 
 +460.0000  +704.0000   -22.0000  -681.0000  +384.0000 
 -952.0000  -395.0000  +494.0000  +384.0000  +916.0000 

 Press return to continue. 


 sin(A)**2
   +0.4141    -0.1427    -0.2166    -0.0190    +0.2122 
   -0.1427    +0.4549    +0.2308    -0.1967    +0.1080 
   -0.2166    +0.2308    +0.2668    -0.0143    -0.0338 
   -0.0190    -0.1967    -0.0143    +0.7270    -0.0386 
   +0.2122    +0.1080    -0.0338    -0.0386    +0.3433 

 cos(A)**2
   +0.5859    +0.1427    +0.2166    +0.0190    -0.2122 
   +0.1427    +0.5451    -0.2308    +0.1967    -0.1080 
   +0.2166    -0.2308    +0.7332    +0.0143    +0.0338 
   +0.0190    +0.1967    +0.0143    +0.2730    +0.0386 
   -0.2122    -0.1080    +0.0338    +0.0386    +0.6567 

 Ide : cos(A)**2 + sin(A)**2
   +1.0000    -0.0000    +0.0000    +0.0000    +0.0000 
   -0.0000    +1.0000    +0.0000    +0.0000    -0.0000 
   +0.0000    +0.0000    +1.0000    -0.0000    -0.0000 
   +0.0000    +0.0000    -0.0000    +1.0000    -0.0000 
   +0.0000    -0.0000    -0.0000    -0.0000    +1.0000 


 Press   return to continue
 Press X return to stop