public static VEC LU_Solve(MAT A1, VEC b1) { MAT A = new MAT(A1); VEC b = new VEC(b1); int n = A.dim(); A = luFact(A); MAT L = new MAT(n); MAT U = new MAT(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] = 1; } for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { U[i][j] = A[i][j]; } } VEC y = fwdSubs(L, b); VEC x = bckSubs(U, y); return(x); }
public MAT(MAT m1) { n = m1.dim(); va = new VEC[n]; for (int i = 0; i < n; i++) { va[i] = new VEC(m1[i]); } }
public static MAT InverseM3(MAT A) { MAT I = unit(3); int n = A.dim(); A = numericalFunctions.luFact(A); MAT L = new MAT(n); MAT U = new MAT(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] = 1; } for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { U[i][j] = A[i][j]; } } MAT yT = new MAT(3); for (int i = 0; i < 3; i++) { yT[i] = numericalFunctions.LU_Solve(L, I[i]); } MAT y = yT.tpose(); MAT xT = new MAT(3); for (int i = 0; i < 3; i++) { xT[i] = numericalFunctions.LU_Solve(U, yT[i]); } return(xT.tpose()); }
public static MAT luFact(MAT 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); }