public MATM3(MATM3 m1) { n = m1.dim(); va = new VECM3[n]; for (int i = 0; i < n; i++) { va[i] = new VECM3(m1[i]); } }
public static MATM3 luFact(MATM3 m1) { int n = m1.dim(); for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { m1[j][i] /= m1[i][i]; } for (int j = i + 1; j < n; j++) { for (int k = i + 1; k < n; k++) { m1[j][k] -= m1[j][i] * m1[i][k]; } } } return(m1); }
public static VECV3 LU_Solve(MATM3 A1, VECV3 b1) { MATM3 A = new MATM3(A1); VECV3 b = new VECV3(b1); int n = A.dim(); A = luFact(A); MATM3 L = new MATM3(n); MATM3 U = new MATM3(n); for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { L[i][j] = A[i][j]; } } for (int i = 0; i < n; i++) { L[i][i] = MAT.unit(3); } for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { U[i][j] = A[i][j]; } } VECV3 y = fwdSubs(L, b); VECV3 x = bckSubs(U, y); return(x); }