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/a0ou

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 : c00g.c */ /* ------------------------------------ */ #include "v_a.h" /* ------------------------------------ */ /* ------------------------------------ */ #define V R2 /* ------------------------------------ */ #define RAb R2 #define CA C6 #define Cb C1 /* ------------------------------------ */ # define FREEV C4 /* ------------------------------------ */ /* ------------------------------------ */ #define UARRAY FREEV #define VARRAY V /* ------------------------------------ */ /* ------------------------------------ */ int main(void) { double ab[RAb*(CA+C1)]={ -18, -549, -119, -715, -233, -640, 0, /* V[0]|0*/ +152, -42, -910, -730, +359, -799, 0 /* V[1]|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 two 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]: -18.0000 -549.0000 -119.0000 -715.0000 -233.0000 -640.0000 v^t[1]: +152.0000 -42.0000 -910.0000 -730.0000 +359.0000 -799.0000 Press return to continue. u[0] : +5.8737 -0.4093 +1.0000 +0.0000 +0.0000 +0.0000 u[1] : +4.4029 -1.4467 +0.0000 +1.0000 +0.0000 +0.0000 u[2] : -2.4569 -0.3439 +0.0000 +0.0000 +1.0000 +0.0000 u[3] : +4.8902 -1.3261 +0.0000 +0.0000 +0.0000 +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[0] u[1] = +0.0000 v^t[0] u[2] = +0.0000 v^t[0] u[3] = +0.0000 v^t[1] u[0] = -0.0000 v^t[1] u[1] = -0.0000 v^t[1] u[2] = -0.0000 v^t[1] u[3] = -0.0000 Press return to continue.