Linear Algebra and the C Language/a0kq
Install and compile this file in your working directory.
/* ------------------------------------ */
/* Save as: c00f.c */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
double **X_sort_c_mR(
double **Ab
)
{
double **T = i_RC_mR(Ab[R_SIZE][C0],Ab[C_SIZE][C0]);
int c;
for(c=C1; c<Ab[C_SIZE][C0]; c++)
c_c_withR0_mR(Ab, c, /* Copy the columns of Ab into */
T, Ab[R0][c]); /* T in the good order */
c_withR0_mR(T,Ab); /* Copy T into Ab */
f_mR(T);
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);
printf(" AID: Before sort_c_mR();\n");
pall_mR(AID, S8,P4,C7);
X_sort_c_mR(AID);
printf(" See above for the function code: sort_c_mR();\n"
" The rows are not sorted:\n\n\n\n AID: After sort_c_mR();\n");
pall_mR(AID, S8,P4,C7);
/* sort_r_mR(AID); */
/* 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(A);
f_mR(InvA);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun(C3);
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Screen output example:
AID: Before sort_c_mR();
+4 +1 +3 +2 +4 +6 +5
+7 +1.0000 +0.0000 +0.0000 +0.3783 +0.2513 +5.4544
+4 +0.0000 +1.0000 +0.0000 -0.5338 +0.9207 +2.5858
+0 -0.0000 -0.0000 +1.0000 +0.3948 +0.2888 -4.5107
See above for the function code: sort_c_mR();
The rows are not sorted:
AID: After sort_c_mR();
+4 +1 +2 +3 +4 +5 +6
+7 +1.0000 +0.0000 +0.0000 +0.3783 +5.4544 +0.2513
+4 +0.0000 +0.0000 +1.0000 -0.5338 +2.5858 +0.9207
+0 -0.0000 +1.0000 -0.0000 +0.3948 -4.5107 +0.2888
Press return to continue
Press X return to stop