Linear Algebra and the C Language/a0km
Install and compile this file in your working directory.
/* ------------------------------------ */
/* Save as: c00b.c */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
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);
clrscrn();
printf("/* --------- DEBUG 1 ---------- */\n");
printf(" A:");
p_mR(A, S3,P3,C8);
printf(" ID:");
p_mR(eye_mR(ID), S3,P3,C8);
printf(" AID:");
p_mR(AID, S3,P3,C8);
printf("/* --------- DEBUG 2 ---------- */\n");
c_A_b_Ab_mR(A,ID,AID);
/* --------------------------- */
printf(" AID: c_A_b_Ab_mR(A,ID,AID);");
p_mR(AID, S3,P3,C8);
stop();
clrscrn();
printf("/* --------- DEBUG 3 ---------- */\n");
invgj_pivot_mR(AID);
/* --------------------------- */
printf(" AID: invgj_pivot_mR(AID);");
p_mR(AID, S6,P2,C8);
printf("/* --------- DEBUG 4 ---------- */\n");
printf(" AID:\n");
pall_mR(AID, S6,P2,C8);
sort_c_mR(AID);
/* --------------------------- */
printf(" AID: sort_c_mR(AID);\n");
pall_mR(AID, S6,P2,C8);
stop();
clrscrn();
printf("/* --------- DEBUG 5 ---------- */\n");
printf(" AID:");
p_mR(AID, S6,P2,C8);
sort_r_mR(AID);
/* --------------------------- */
printf(" AID: sort_r_mR(AID);");
p_mR(AID, S6,P2,C8);
printf("/* --------- DEBUG 6 ---------- */\n");
c_Inv_A_mR(AID,invA);
/* --------------------------- */
printf(" invA: c_Inv_A_mR(AID,invA);");
p_mR(invA, S6,P2,C8);
stop();
clrscrn();
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);
X_invgj_mR(A,InvA);
printf(" Copy/Paste into the octave window.\n\n");
printf("format short e\n");
p_Octave_mR(A,"A",P4);
printf(" inv(A)\n\n");
printf(" invA:");
pE_mR(InvA, S12,P4,C8);
f_mR(InvA);
f_mR(A);
}
/* ------------------------------------ */
int main(void)
{
time_t t;
srand(time(&t));
do
{
fun(C3);
} while(stop_w());
return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */
Screen output example:
/* --------- DEBUG 3 ---------- */
AID: invgj_pivot_mR(AID);
+1.00 +0.00 +0.00 -0.51 -0.52 +0.68
-0.00 +1.00 +0.00 -0.96 -2.32 -1.94
-0.00 -0.00 +1.00 -3.84 -2.75 -2.01
/* --------- DEBUG 4 ---------- */
AID:
+4 +2 +1 +3 +5 +4 +6
+7 +1.00 +0.00 +0.00 -0.51 -0.52 +0.68
+4 -0.00 +1.00 +0.00 -0.96 -2.32 -1.94
+0 -0.00 -0.00 +1.00 -3.84 -2.75 -2.01
AID: sort_c_mR(AID);
+4 +1 +2 +3 +4 +5 +6
+7 +0.00 +1.00 +0.00 -0.52 -0.51 +0.68
+4 +1.00 -0.00 +0.00 -2.32 -0.96 -1.94
+0 -0.00 -0.00 +1.00 -2.75 -3.84 -2.01
Press return to continue.
/* --------- DEBUG 5 ---------- */
AID:
+0.00 +1.00 +0.00 -0.52 -0.51 +0.68
+1.00 -0.00 +0.00 -2.32 -0.96 -1.94
-0.00 -0.00 +1.00 -2.75 -3.84 -2.01
AID: sort_r_mR(AID);
+1.00 -0.00 +0.00 -2.32 -0.96 -1.94
+0.00 +1.00 +0.00 -0.52 -0.51 +0.68
-0.00 -0.00 +1.00 -2.75 -3.84 -2.01
/* --------- DEBUG 6 ---------- */
invA: c_Inv_A_mR(AID,invA);
-2.32 -0.96 -1.94
-0.52 -0.51 +0.68
-2.75 -3.84 -2.01
Press return to continue.
Copy/Paste into the octave window.
format short e
A=[
-0.5360,-0.8130,+0.2430;
+0.4300,+0.1020,-0.3820;
-0.0880,+0.9190,-0.1010]
inv(A)
invA:
-2.3169e+00 -9.6007e-01 -1.9431e+00
-5.2385e-01 -5.1348e-01 +6.8170e-01
-2.7479e+00 -3.8356e+00 -2.0052e+00
Press return to continue
Press X return to stop