[java] Matrix inverse 계산


광고 한번만 클릭 부탁드립니다^^

포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^ 

Subject java Matrix inverse

최종수정일 : 2011.06.06

Android 에서 사용하는 Java 입니다. 물론 기본 Java 에서 사용하는 문법이나, 때로는 Android 에서 사용되지 않는 패키지도 있습니다. 앞으로도 계속 포스팅 되는 Java code들은 전부 Android 에서 실험하기 위한 소스임을 말씀드립니다. 
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

댓글

Designed by JB FACTORY