Linear Algebra and the C Language/a0ij


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :   c00d.c                  */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
void fun(int r)
{
double s = rp_I(7)+2;

double **A      = rdefinite_negative_mR(     i_mR(r,r), 99);
double **sA     =               smul_mR(s,A, i_mR(r,r));
double **EValue =               eigs_mR(sA,  i_mR(r,C1));

  clrscrn();  
  printf(" A: Definite negative");
  p_mR(A,S12,P6,C6);
  
  printf(" %+.0f A:   s > 0 ",s);
  p_mR(sA,S12,P6,C6);
  
  printf(" Eigenvalues: eigs_mR(%+.0f A,EValue);",s);
  p_mR(EValue,S9,P3,C1);    
  
  f_mR(A);
  f_mR(sA);
  f_mR(EValue);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
  fun(RC4);

} while(stop_w());

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
If A is negative-definite and if s is a strictly positive real number, then s*A is negative definite.

Screen output example:

                                                                                       
 A: Definite negative
  -23.547463   -10.165334   +23.026402    -2.054072 
  -10.165334   -14.589254   +13.136219    -0.078367 
  +23.026402   +13.136219   -32.343357   +10.311199 
   -2.054072    -0.078367   +10.311199   -25.519927 

 +5 A:   s > 0 
 -117.737314   -50.826671  +115.132012   -10.270360 
  -50.826671   -72.946269   +65.681093    -0.391836 
 +115.132012   +65.681093  -161.716783   +51.555995 
  -10.270360    -0.391836   +51.555995  -127.599633 

 Eigenvalues: eigs_mR(+5 A,EValue);
 -300.000 
 -125.000 
  -40.000 
  -15.000 


 Press   return to continue
 Press X return to stop