Linear Algebra and the C Language/a0kn
Install and compile this file in your working directory.
/* ------------------------------------ */
/* Save as: c00g.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++)
{
clrscrn();
printf("/* --------- DEBUG 1 ---------- */ \n\n");
printf(" Copy C[%d] of AID into C[%.0f] of T\n",c,Ab[R0][c]);
pall_mR(Ab, S7,P3,C9);
c_c_withR0_mR( Ab, c,
T, Ab[R0][c]);
printf(" T[R0][%.0f]\n",Ab[R0][c]);
pall_mR(T, S7,P3,C9);
stop();
clrscrn();
/* --------- DEBUG 1 ---------- */
}
printf(" AID : before sort_c_mR();\n");
pall_mR(Ab, S7,P3,C9);
c_withR0_mR(T,Ab);
printf(" The rows are not sorted:\n\n"
" AID : after sort_c_mR();\n");
pall_mR(Ab, S7,P3,C9);
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);
X_sort_c_mR(AID);
/* 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(InvA);
f_mR(A);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun(C4);
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Screen output example:
/* --------- DEBUG 1 ---------- */
Copy C[1] of AID into C[3] of T
+5 +3 +4 +1 +2 +7 +8 +5 +6
+9 +1.000 +0.000 +0.000 +0.000 +0.523 -2.500 +1.598 -1.256
+5 +0.000 +1.000 +0.000 +0.000 +0.961 +0.109 -0.470 -0.133
+0 +0.000 +0.000 +1.000 +0.000 +0.431 +3.321 -1.079 +2.115
+0 +0.000 +0.000 +0.000 +1.000 +0.694 +3.979 -1.906 +0.313
T[R0][3]
+5 +1 +2 +3 +4 +5 +6 +7 +8
+9 +0.000 +0.000 +1.000 +0.000 +0.000 +0.000 +0.000 +0.000
+0 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000
+0 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000
+0 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000
Press return to continue.
/* --------- DEBUG 1 ---------- */
Copy C[2] of AID into C[4] of T
+5 +3 +4 +1 +2 +7 +8 +5 +6
+9 +1.000 +0.000 +0.000 +0.000 +0.523 -2.500 +1.598 -1.256
+5 +0.000 +1.000 +0.000 +0.000 +0.961 +0.109 -0.470 -0.133
+0 +0.000 +0.000 +1.000 +0.000 +0.431 +3.321 -1.079 +2.115
+0 +0.000 +0.000 +0.000 +1.000 +0.694 +3.979 -1.906 +0.313
T[R0][4]
+5 +1 +2 +3 +4 +5 +6 +7 +8
+9 +0.000 +0.000 +1.000 +0.000 +0.000 +0.000 +0.000 +0.000
+0 +0.000 +0.000 +0.000 +1.000 +0.000 +0.000 +0.000 +0.000
+0 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000
+0 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000
Press return to continue.
/* --------- DEBUG 1 ---------- */
Copy C[3] of AID into C[1] of T
+5 +3 +4 +1 +2 +7 +8 +5 +6
+9 +1.000 +0.000 +0.000 +0.000 +0.523 -2.500 +1.598 -1.256
+5 +0.000 +1.000 +0.000 +0.000 +0.961 +0.109 -0.470 -0.133
+0 +0.000 +0.000 +1.000 +0.000 +0.431 +3.321 -1.079 +2.115
+0 +0.000 +0.000 +0.000 +1.000 +0.694 +3.979 -1.906 +0.313
T[R0][1]
+5 +1 +2 +3 +4 +5 +6 +7 +8
+9 +0.000 +0.000 +1.000 +0.000 +0.000 +0.000 +0.000 +0.000
+0 +0.000 +0.000 +0.000 +1.000 +0.000 +0.000 +0.000 +0.000
+0 +1.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000
+0 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000 +0.000
Press return to continue.
*** **** ***
AID : before sort_c_mR();
+5 +3 +4 +1 +2 +7 +8 +5 +6
+9 +1.000 +0.000 +0.000 +0.000 +0.523 -2.500 +1.598 -1.256
+5 +0.000 +1.000 +0.000 +0.000 +0.961 +0.109 -0.470 -0.133
+0 +0.000 +0.000 +1.000 +0.000 +0.431 +3.321 -1.079 +2.115
+0 +0.000 +0.000 +0.000 +1.000 +0.694 +3.979 -1.906 +0.313
The rows are not sorted:
AID : after sort_c_mR();
+5 +1 +2 +3 +4 +5 +6 +7 +8
+9 +0.000 +0.000 +1.000 +0.000 +1.598 -1.256 +0.523 -2.500
+5 +0.000 +0.000 +0.000 +1.000 -0.470 -0.133 +0.961 +0.109
+0 +1.000 +0.000 +0.000 +0.000 -1.079 +2.115 +0.431 +3.321
+0 +0.000 +1.000 +0.000 +0.000 -1.906 +0.313 +0.694 +3.979
Press return to continue
Press X return to stop