Linear Algebra and the C Language/a0hr


The Maclaurin series of the exponential function is :

      Exp(A) = Ide + A + (1/2) A2 + (1/6) A3 + ... + 1/(n-1)! A(n-1)

Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :   c00d.c                  */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define   RCA        RC4
/* ------------------------------------ */
void fun(void)
{
double **A    =  i_mR(RCA,RCA); 
double **B    =  i_mR(RCA,RCA);
double **ExpA =  i_mR(RCA,RCA); 
double **ExpB =  i_mR(RCA,RCA);  

double **AplsB    = i_mR(RCA,RCA); 
double **ExpAplsB = i_mR(RCA,RCA);
        
   r_commute2_mR(A,B,9);
   add_mR(A,B,AplsB);
    
   clrscrn();   
   printf(" Copy/Paste into the octave window.\n\n");
   p_Octave_mR(A, "A", P12);
   printf(" expm (A)\n\n");
   
   p_Octave_mR(B, "B", P12);
   printf(" expm (B)\n\n");  
   stop();
   
   clrscrn();     
   printf(" Copy/Paste into the octave window.\n\n"); 
   p_Octave_mR(AplsB, "AplsB", P12);
   printf(" expm (AplsB)\n\n");
   
   printf(" expm (A)*expm (B)\n"); 
   printf(" expm (B)*expm (A)\n\n");   
   stop();
   
   clrscrn(); 
   Exp_mR(A, ExpA);
   Exp_mR(B, ExpB);
   Exp_mR(AplsB, ExpAplsB);
           
   printf(" ExpA:");
   p_mR(ExpA,S8,P6,C6);
   printf(" ExpB:");
   p_mR(ExpB, S8,P6,C6);
   stop();
   
   clrscrn();
   printf("  Exp(A+B):");
   pE_mR( ExpAplsB, S10,P6,C6);   
       
   printf(" ExpA ExpB:");
   mul_mR(ExpA,ExpB,A);
   pE_mR(A, S10,P6,C6); 

   printf(" ExpB ExpA:");
   mul_mR(ExpB,ExpA,A);
   pE_mR(A, S10,P6,C6); 
     
   f_mR(A);
   f_mR(ExpA);
   f_mR(B);
   f_mR(ExpB);
   f_mR(AplsB);
   f_mR(ExpAplsB);  
}    
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
    fun();
    
} while(stop_w());

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

Screen output example:

                                                                                       
 Copy/Paste into the octave window.

 A=[
+0.651229676410,-0.042844371482,+0.109735572993,-0.287314150671;
+0.578135767082,+0.078551237862,+0.679891832956,-0.018866033171;
-0.220829464815,+0.457464704573,-0.074343208669,-0.226287988476;
-0.439114053451,-0.186677981792,-0.698919450592,-0.231944296903]

 expm (A)

 B=[
-0.665366299106,+0.065593888084,+0.173117996013,-0.101562674808;
+0.216500041694,-0.806237016140,+0.076268748746,-0.210533755400;
+0.170408010976,+0.034803770499,-0.719144373990,+0.066358267503;
-0.121352197976,-0.176587033764,+0.002992514224,-0.780165526660]

 expm (B)

 Press return to continue. 


 Copy/Paste into the octave window.

 AplsB=[
-0.014136622696,+0.022749516602,+0.282853569006,-0.388876825479;
+0.794635808776,-0.727685778279,+0.756160581702,-0.229399788571;
-0.050421453839,+0.492268475072,-0.793487582659,-0.159929720973;
-0.560466251427,-0.363265015556,-0.695926936368,-1.012109823563]

 expm (AplsB)

 expm (A)*expm (B)
 expm (B)*expm (A)

 Press return to continue. 


 ExpA:
+1.982502 +0.018941 +0.269631 -0.393089 
+0.812836 +1.253644 +0.801838 -0.192909 
-0.087226 +0.515684 +1.152554 -0.196678 
-0.586173 -0.341313 -0.756688 +0.941441 

 ExpB:
+0.528662 +0.037534 +0.088757 -0.050648 
+0.114680 +0.459455 +0.045400 -0.100303 
+0.085867 +0.016648 +0.495185 +0.025597 
-0.069021 -0.082736 -0.007438 +0.470078 

 Press return to continue. 


  Exp(A+B):
+1.100528e+00 +1.201253e-01 +3.132607e-01 -2.801912e-01 
+6.556531e-01 +6.358089e-01 +5.275610e-01 -2.370650e-01 
+1.255617e-01 +2.691235e-01 +5.878515e-01 -1.102654e-01 
-4.789877e-01 -2.693045e-01 -4.492359e-01 +4.870977e-01 

 ExpA ExpB:
+1.100529e+00 +1.201250e-01 +3.132618e-01 -2.801904e-01 
+6.556490e-01 +6.358118e-01 +5.275533e-01 -2.370704e-01 
+1.255663e-01 +2.691202e-01 +5.878604e-01 -1.102592e-01 
-4.789825e-01 -2.693081e-01 -4.492259e-01 +4.871048e-01 

 ExpB ExpA:
+1.100529e+00 +1.201250e-01 +3.132618e-01 -2.801904e-01 
+6.556490e-01 +6.358118e-01 +5.275533e-01 -2.370704e-01 
+1.255663e-01 +2.691202e-01 +5.878604e-01 -1.102592e-01 
-4.789825e-01 -2.693081e-01 -4.492259e-01 +4.871048e-01 


 Press   return to continue
 Press X return to stop