invertiblematrix.java~1~
来自「一个一元曲线多项式数值演示例子」· JAVA~1~ 代码 · 共 91 行
JAVA~1~
91 行
package numbercruncher.matrix;import numbercruncher.mathutils.Epsilon;/** * A matrix that can be inverted. Also, compute its determinant, * norm, and condition number. */public class InvertibleMatrix extends LinearSystem{ /** * Constructor. * @param n the number of rows = the number of columns */ public InvertibleMatrix(int n) { super(n); } /** * Constructor. * @param values the array of values */ public InvertibleMatrix(float values[][]) { super(values); } /** * Compute the inverse of this matrix. * @return the inverse matrix * @throws matrix.MatrixException if an error occurred */ public InvertibleMatrix inverse() throws MatrixException { InvertibleMatrix inverse = new InvertibleMatrix(nRows); IdentityMatrix identity = new IdentityMatrix(nRows); // Compute each column of the inverse matrix // using columns of the identity matrix. for (int c = 0; c < nCols; ++c) { ColumnVector col = solve(identity.getColumn(c), true); inverse.setColumn(col, c); } return inverse; } /** * Compute the determinant. * @return the determinant * @throws matrix.MatrixException if an error occurred */ public float determinant() throws MatrixException { decompose(); // Each row exchange during forward elimination flips the sign // of the determinant, so check for an odd number of exchanges. float determinant = ((exchangeCount & 1) == 0) ? 1 : -1; // Form the product of the diagonal elements of matrix U. for (int i = 0; i < nRows; ++i) { int pi = permutation[i]; // permuted index determinant *= LU.at(pi, i); } return determinant; } /** * Compute the Euclidean norm of this matrix. * @return the norm */ public float norm() { float sum = 0; for (int r = 0; r < nRows; ++r) { for (int c = 0; c < nCols; ++c) { float v = values[r][c]; sum += v*v; } } return (float) Math.sqrt(sum); } /** * Compute the condition number based on the Euclidean norm. * @return the condition number */ public float condition() throws MatrixException { return norm() * inverse().norm(); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?