Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

Linear Algebra and the C Language/a0oq

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

__NOTOC__ Install and compile this file in your working directory. /* ------------------------------------ */ /* Save as : c00c.c */ /* ------------------------------------ */ #include "v_a.h" /* ------------------------------------ */ /* ------------------------------------ */ #define V R3 /* ------------------------------------ */ #define RAb R3 #define CA C4 #define Cb C1 /* ------------------------------------ */ # define FREEV C1 /* ------------------------------------ */ /* ------------------------------------ */ #define UARRAY FREEV #define VARRAY V /* ------------------------------------ */ /* ------------------------------------ */ int main(void) { double ab[RAb*(CA+C1)]={ -944, +337, -777, -131, -0, /* V[0]|0 */ +509, +581, -475, -544, -0, /* V[1]|0 */ +69, +777, -245, -51, +0 /* V[2]|0 */ }; double **Ab = ca_A_mR(ab, i_Abr_Ac_bc_mR(RAb, CA, Cb)); double **Ab_free = i_Abr_Ac_bc_mR(CA, CA, Cb + FREEV); double **b_free = i_mR(CA, Cb + FREEV); double **A = c_Ab_A_mR(Ab, i_mR(RAb, CA)); double **At = transpose_mR(A, i_mR(CA, RAb)); /* ------------------------------------ */ double **u [UARRAY]; double **vt[VARRAY]; /* ------------------------------------ */ int c,r; /* Compute the free variables (b_free) */ gj_PP_mR(Ab,NO); put_zeroR_mR(Ab,Ab_free); put_freeV_mR(Ab_free); gj_PP_mR(Ab_free,YES); c_Ab_b_mR(Ab_free,b_free); clrscrn(); printf(" Compute the orthogonal vectors to V :\n\n\n"); for(c=C0; c<VARRAY; c++) { vt[c] = i_mR(CA,C1); c_c_mR(At,(c+C1),vt[c],C1); printf(" v^t[%d]:",c); p_mR(vt[c], S10,P4,C1); } stop(); clrscrn(); for(c=C0; c<UARRAY; c++) { u[c] = i_mR(CA,C1); c_c_mR(b_free,(c+C2), u[c],C1); printf(" u[%d] :",c); p_mR(u[c], S10,P4,C1); } printf(" The free vectors of the system" " are the orthogonal vectors to V :\n\n\n"); stop(); clrscrn(); printf(" \n\n\n" " You can verify if" " the free vectors of the system\n" " are orthogonal to V : \n\n" " <u,v> = v^t u \n\n"); for(c=C0; c<VARRAY; c++) for(r=C0; r<UARRAY; r++) printf(" v^t[%d] u[%d] = %+.4f\n",c,r, dot_R(vt[c],u[r])); printf("\n\n\n"); stop(); f_mR(Ab); f_mR(Ab_free); f_mR(b_free); /* --- Free the memory of the Arrays -- */ for(c=C0; c<UARRAY; c++) f_mR( u[c]); for(c=C0; c<VARRAY; c++) f_mR(vt[c]); return 0; } /* ------------------------------------ */ /* ------------------------------------ */ In this example there are three lines. The library does not work with single-line systems. If the dot product of two vectors is zero, it means that they are orthogonal to each other. Screen output example: Compute the orthogonal vectors to V : v^t[0]: -944.0000 +337.0000 -777.0000 -131.0000 v^t[1]: +509.0000 +581.0000 -475.0000 -544.0000 v^t[2]: +69.0000 +777.0000 -245.0000 -51.0000 Press return to continue. u[0] : +0.5204 -0.2700 -0.9179 +1.0000 The free vectors of the system are the orthogonal vectors to V : Press return to continue. You can verify if the free vectors of the system are orthogonal to V : <u,v> = v^t u v^t[0] u[0] = +0.0000 v^t[1] u[0] = +0.0000 v^t[2] u[0] = -0.0000 Press return to continue.