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

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: c00d.c */ /* ------------------------------------ */ #include "v_a.h" /* ------------------------------------ */ #define ARRAY A3 /* ------------------------------------ */ #define RC RC3 /* ------------------------------------ */ void fun(void) { double **A = rsymmetric_mR( i_mR(RC,RC),999); double **AEVect = eigs_V_mR(A, i_mR(RC,RC)); double **InvAEVect = transpose_mR(AEVect, i_mR(RC,RC)); double **T = i_mR(RC,RC); double **b [ARRAY]; double **r [ARRAY]; double **br[ARRAY]; int i; for(i=A0; i<ARRAY; i++) { b[i] = c_c_mR( AEVect,i+C1, i_mR(RC,C1),C1); r[i] = c_r_mR(InvAEVect,i+R1, i_mR(R1,RC),R1); br[i] = mul_mR(b[i],r[i], i_mR(RC,RC)); } clrscrn(); printf(" A:"); p_mR(A, S10,P4,C6); printf(" AEVect: Eigenvectors of A"); p_mR(AEVect, S10,P4,C6); transpose_mR(AEVect,InvAEVect); printf(" Inverse of AEVect = InvAEVect"); p_mR(InvAEVect, S10,P4,C6); stop(); clrscrn(); printf(" The bnrn are projectors. \n" " Several consecutive projections\n\n" " bnrn**p \n\n" " give the same result \n\n\n" " b1r1:"); p_mR(br[0], S10,P4,C6); pow_mR(2, br[0], T); printf(" b1r1**2 = b1r1"); p_mR(T, S10,P4,C6); pow_mR(6, br[0], T); printf(" b1r1**6 = b1r1"); p_mR(T, S10,P4,C6); stop(); clrscrn(); printf(" The bnrn are projectors. \n" " Several consecutive projections\n\n" " bnrn**p \n\n" " give the same result \n\n\n" " b2r2:"); p_mR(br[1], S10,P4,C6); pow_mR(2, br[1], T); printf(" b2r2**2 = b2r2"); p_mR(T, S10,P4,C6); pow_mR(6, br[1], T); printf(" b2r2**6 = b2r2"); p_mR(T, S10,P4,C6); stop(); clrscrn(); printf(" The bnrn are projectors. \n" " Several consecutive projections\n\n" " bnrn**p \n\n" " give the same result \n\n\n" " b3r3:"); p_mR(br[2], S10,P4,C6); pow_mR(2, br[2], T); printf(" b3r3**2 = b3r3"); p_mR(T, S10,P4,C6); pow_mR(6, br[2], T); printf(" b3r3**6 = b3r3"); p_mR(T, S10,P4,C6); f_mR(A); f_mR(AEVect); f_mR(InvAEVect); f_mR(T); for(i=A0; i<ARRAY; i++) { f_mR (b[i]); f_mR( r[i]); f_mR(br[i]); } } /* ------------------------------------ */ int main(void) { time_t t; srand(time(&t)); do { fun(); } while(stop_w()); return 0; } /* ------------------------------------ */ /* ------------------------------------ */ A property of spectral decomposition: The b*r* are projectors. For example, if I project point P onto the x-axis, P is on the x-axis. Once P is on the x-axis, I can project it an infinite number of times onto the x-axis, and it will not move. This is materialized in our case by the fact : b1r1**2 = b1r1 b1r1**3 = b1r1 b1r1**4 = b1r1 ... b1r1**n = b1r1 b: The columns of the eigenvectors of A r: The rows of eigenvectors of the inverse of A b1r1 is obtained by multiplying the first column of the eigenvector of A by the first row of the eigenvector of the inverse of A. Screen output example: A: -871.0000 -392.0000 -378.0000 -392.0000 -457.0000 +455.0000 -378.0000 +455.0000 +377.0000 AEVect: Eigenvectors of A +0.8795 -0.3038 -0.3664 +0.4692 +0.4244 +0.7744 +0.0798 +0.8530 -0.5158 Inverse of AEVect = InvAEVect +0.8795 +0.4692 +0.0798 -0.3038 +0.4244 +0.8530 -0.3664 +0.7744 -0.5158 Press return to continue. The bnrn are projectors. Several consecutive projections bnrn**p give the same result b1r1: +0.7735 +0.4127 +0.0701 +0.4127 +0.2202 +0.0374 +0.0701 +0.0374 +0.0064 b1r1**2 = b1r1 +0.7735 +0.4127 +0.0701 +0.4127 +0.2202 +0.0374 +0.0701 +0.0374 +0.0064 b1r1**6 = b1r1 +0.7735 +0.4127 +0.0701 +0.4127 +0.2202 +0.0374 +0.0701 +0.0374 +0.0064 Press return to continue. The bnrn are projectors. Several consecutive projections bnrn**p give the same result b2r2: +0.0923 -0.1289 -0.2591 -0.1289 +0.1801 +0.3620 -0.2591 +0.3620 +0.7276 b2r2**2 = b2r2 +0.0923 -0.1289 -0.2591 -0.1289 +0.1801 +0.3620 -0.2591 +0.3620 +0.7276 b2r2**6 = b2r2 +0.0923 -0.1289 -0.2591 -0.1289 +0.1801 +0.3620 -0.2591 +0.3620 +0.7276 Press return to continue. The bnrn are projectors. Several consecutive projections bnrn**p give the same result b3r3: +0.1342 -0.2837 +0.1890 -0.2837 +0.5997 -0.3994 +0.1890 -0.3994 +0.2661 b3r3**2 = b3r3 +0.1342 -0.2837 +0.1890 -0.2837 +0.5997 -0.3994 +0.1890 -0.3994 +0.2661 b3r3**6 = b3r3 +0.1342 -0.2837 +0.1890 -0.2837 +0.5997 -0.3994 +0.1890 -0.3994 +0.2661 Press return to continue Press X return to stop