[java] Matrix inverse 계산
- Language/Java
- 2011. 6. 6.
광고 한번만 클릭 부탁드립니다^^
포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^
Subject : java Matrix inverse
최종수정일 : 2011.06.06
최종수정일 : 2011.06.06
C/C++ Code 로만 살아와서 Java의 언어의 특성을 깊이 모릅니다. 어떠한 패키지가 있고 어떠한...부품들이 있는지.
필요에 따라서 포스팅을 하려고합니다. 많은 도움이 있었으면 합니다.
열공하세요^___________^*
by 퓨림노
[소스코드]
/////////////////////////////////////////////////////////////////////////// // // // Program file name: Inverse.java // // // // ?Tao Pang 2006 // // // // Last modified: January 18, 2006 // // // // (1) This Java program is part of the book, "An Introduction to // // Computational Physics, 2nd Edition," written by Tao Pang and // // published by Cambridge University Press on January 19, 2006. // // // // (2) No warranties, express or implied, are made for this program. // // // ///////////////////////////////////////////////////////////////////////////
//An example of performing matrix inversion through the //partial-pivoting Gaussian elimination. import java.lang.*; public class Matrix { public static double[][] invert(double a[][]) { int n = a.length; double x[][] = new double[n][n]; double b[][] = new double[n][n]; int index[] = new int[n]; for (int i = 0; i < n; ++i) b[i][i] = 1; // Transform the matrix into an upper triangle gaussian(a, index); // Update the matrix b[i][j] with the ratios stored for (int i = 0; i < n - 1; ++i) for (int j = i + 1; j < n; ++j) for (int k = 0; k < n; ++k) b[index[j]][k] -= a[index[j]][i] * b[index[i]][k]; // Perform backward substitutions for (int i = 0; i < n; ++i) { x[n - 1][i] = b[index[n - 1]][i] / a[index[n - 1]][n - 1]; for (int j = n - 2; j >= 0; --j) { x[j][i] = b[index[j]][i]; for (int k = j + 1; k < n; ++k) { x[j][i] -= a[index[j]][k] * x[k][i]; } x[j][i] /= a[index[j]][j]; } } return x; } // Method to carry out the partial-pivoting Gaussian // elimination. Here index[] stores pivoting order. public static void gaussian(double a[][], int index[]) { int n = index.length; double c[] = new double[n]; // Initialize the index for (int i = 0; i < n; ++i) index[i] = i; // Find the rescaling factors, one from each row for (int i = 0; i < n; ++i) { double c1 = 0; for (int j = 0; j < n; ++j) { double c0 = Math.abs(a[i][j]); if (c0 > c1) c1 = c0; } c[i] = c1; } // Search the pivoting element from each column int k = 0; for (int j = 0; j < n - 1; ++j) { double pi1 = 0; for (int i = j; i < n; ++i) { double pi0 = Math.abs(a[index[i]][j]); pi0 /= c[index[i]]; if (pi0 > pi1) { pi1 = pi0; k = i; } } // Interchange rows according to the pivoting order int itmp = index[j]; index[j] = index[k]; index[k] = itmp; for (int i = j + 1; i < n; ++i) { double pj = a[index[i]][j] / a[index[j]][j]; // Record pivoting ratios below the diagonal a[index[i]][j] = pj; // Modify other elements accordingly for (int l = j + 1; l < n; ++l) a[index[i]][l] -= pj * a[index[j]][l]; } } } }
[결과]
없음~~
[Reference]
[1] Java Matrix Information
- http://sunshine.chpc.utah.edu/
[2] java matrix class
- http://sunshine.chpc.utah.edu/javalabs/java12/seasons/matrix/Matrix.java
[3] java inverse 를 구하는 방법
- http://www.daniweb.com/software-development/java/threads/118289'Language > Java' 카테고리의 다른 글
[java] realloc 하기 (0) | 2011.06.06 |
---|---|
[java] 파일 입출력 (0) | 2011.06.06 |
[java] java byte to string (0) | 2011.06.06 |
[java] java byte to string (0) | 2011.05.30 |
[java] ArrayList 안에 ArrayList 사용하자 (0) | 2011.05.26 |