Linear Algebra and the C Language/a0ks
Install and compile this file in your working directory.
/* ------------------------------------ */
/* Save as: c00h.c */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
double **X_sort_r_mR(
double **Ab
)
{
double pivot;
int c;
int r;
int r_pivot = R1;
for ( c=C1; c<Ab[C_SIZE_A][C0]; c++) /* From the first row */
{ /* to the last */
r = r_pivot;
pivot = 0.;
while( (pivot<ERROR_E) && r<Ab[R_SIZE][C0] )
{
pivot = fabs( Ab[r][c] );
if(pivot>ERROR_E) /* If the pivot is not zero */
{ /* swap the row */
swapR_mR(Ab, r, r_pivot);
r_pivot++;
}
r++;
}
}
return(Ab);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **X_invgj_mR(
double **A,
double **invA
)
{
double **ID = i_RC_mR(A[R_SIZE][C0],A[C_SIZE][C0]);
double **AID;
int r = A[R_SIZE][C0];
r--;
AID = i_Abr_Ac_bc_mR(r,r,r);
eye_mR(ID);
c_A_b_Ab_mR(A,ID,AID);
invgj_pivot_mR(AID);
sort_c_mR(AID);
printf(" AID: Before sort_r_mR();");
p_mR(AID, S8,P4,C9);
X_sort_r_mR(AID);
printf(" See above for the function code: sort_r_mR(); \n\n"
" AID: After sort_r_mR();");
p_mR(AID, S8,P4,C9);
/* c_Inv_A_mR(AID,invA); */
f_mR(AID);
f_mR(ID);
return(invA);
}
/* ------------------------------------ */
/* ------------------------------------ */
void fun(int r)
{
double **A = rE_mR( i_mR(r,r), 999.,1E-3);
double **InvA = i_mR(r,r);
clrscrn();
X_invgj_mR(A,InvA);
f_mR(InvA);
f_mR(A);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun(C4);
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Screen output example:
AID: Before sort_r_mR();
+0.0000 +0.0000 +0.0000 +1.0000 +0.2946 +1.2943 +1.3303 -0.2471
-0.0000 +0.0000 +1.0000 +0.0000 -0.2263 -2.0882 -0.6958 +0.4428
+1.0000 +0.0000 +0.0000 +0.0000 +0.5957 -2.3363 -1.4111 +0.9384
+0.0000 +1.0000 -0.0000 -0.0000 +0.3923 -3.0599 -1.9884 -0.3303
See above for the function code: sort_r_mR();
AID: After sort_r_mR();
+1.0000 +0.0000 +0.0000 +0.0000 +0.5957 -2.3363 -1.4111 +0.9384
+0.0000 +1.0000 -0.0000 -0.0000 +0.3923 -3.0599 -1.9884 -0.3303
-0.0000 +0.0000 +1.0000 +0.0000 -0.2263 -2.0882 -0.6958 +0.4428
+0.0000 +0.0000 +0.0000 +1.0000 +0.2946 +1.2943 +1.3303 -0.2471
Press return to continue
Press X return to stop