Linear Algebra and the C Language/a0j6


Install and compile this file in your working directory.

/* ------------------------------------ */
/*  Save as :   c00c.c                  */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
double **X_c_Ab_subArxr_mR(
double **Ab,
double **subA
)
{
int r;
int c;

 	for    (r=R1; r<Ab[R_SIZE][C0]; r++)
 	   for (c=C1; c<Ab[R_SIZE][C0]; c++)

            subA[r][c] = Ab[r][c];
            
return(subA);
}
/* ------------------------------------ */
/* ------------------------------------ */
void fun(int r, int c)
{	
double **Ab    = r_mR(i_Abr_Ac_bc_mR(r,c,C1),999.);
double **A     = i_mR(r,c);        
double **subA  = i_mR(r,r);
                        
  clrscrn();
  printf(" Ab :");
  p_mR(Ab,S8,P0,C7);
  
  printf(" A    : i_mR(r,c);");
  p_mR(c_Ab_A_mR(Ab,A),S8,P0,C7);
  
  printf(" subA : i_mR(r,r); \t\t c_Ab_subArxr_mR(Ab,subA); ");
  p_mR(c_Ab_subArxr_mR(Ab,subA),S8,P0,C7);

  f_mR(A);    
  f_mR(Ab);
  f_mR(subA);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));
do
{
  fun(rp_I(R3)+R1, rp_I(R3)+R3);


} while(stop_w());

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Copy the submatrix of Ab into subA:Gauss-Jordan
This function allows, for example, to make the det_mR() function believe that the matrix is ​​square. We can calculate the determinant of this submatrix. If it is not zero, the system Ab can be solved with the Total Pivoting algorithm.

Screen output example:

                                                                                       
 Ab :
    +630     -423     +365     -416     -402     -720     +164 
    +630     -178     +504     +689     -302     +302     -839 
    +546     -684     +974     +714     -644     +779     -155 

 A    : i_mR(r,c);
    +630     -423     +365     -416     -402     -720 
    +630     -178     +504     +689     -302     +302 
    +546     -684     +974     +714     -644     +779 

 subA : i_mR(r,r); 		 c_Ab_subArxr_mR(Ab,subA); 
    +630     -423     +365 
    +630     -178     +504 
    +546     -684     +974 


 Press   return to continue
 Press X return to stop