詳細はjavaでマトリックス求逆のアルゴリズムを説明します。
今日はとても楽しかったです。何日間の問題を解決しました。線形代数という科目を勉強する時です。プログラムを通して、中の計算方法を実現したいです。例えば、行列が逆を求めるなら、javaコードでどう説明すればいいですか?
まず、私達はまず交流言語でアルゴリズムの考えを説明します。
1.行列Aに対応する行列式がi番目であることを求め、j(iは行、jは列を表す)位置の余子式(余子式の前に−1^(i+j)を乗じた代数余式)。
2.マトリックスAの行列式の値を代数的余子式に基づいて求める(行列式展開法)
3.代数的余子式と行列式の値から付随行列を求める。
4.付随行列と行列行列の値から逆行列を求めます。A^-1=A*/124)
上記のアルゴリズムの考え方を理解したら、無駄話は少なく言って、コードをつけます。
1.行列Aに対応する行列式がi番目であることを求め、j(iは行、jは列を表す)位置の余子式(余子式の前に−1^(i+j)を乗じた代数余式)。
まず、私達はまず交流言語でアルゴリズムの考えを説明します。
1.行列Aに対応する行列式がi番目であることを求め、j(iは行、jは列を表す)位置の余子式(余子式の前に−1^(i+j)を乗じた代数余式)。
2.マトリックスAの行列式の値を代数的余子式に基づいて求める(行列式展開法)
3.代数的余子式と行列式の値から付随行列を求める。
4.付随行列と行列行列の値から逆行列を求めます。A^-1=A*/124)
上記のアルゴリズムの考え方を理解したら、無駄話は少なく言って、コードをつけます。
1.行列Aに対応する行列式がi番目であることを求め、j(iは行、jは列を表す)位置の余子式(余子式の前に−1^(i+j)を乗じた代数余式)。
/**
* i,j
* @param mat
* @param i
* @param j
* @return
*/
public static Matrix getComplementMinor(Matrix mat, int i, int j) {
// ,
Matrix m = new Matrix(mat.getRow()-1,mat.getCol()-1);
// m
int row =0 ,col=0;
/*
* ,j2 ,k
*/
for (int j2 = 0; j2 < mat.getRow(); j2++) {
// i
if(j2 == i) continue;
for (int k = 0; k < mat.getCol(); k++) {
// j
if(k == j) continue;
//
m.setValue(row, col,mat.getValue(j2, k));
//
col++;
if(col >= m.getCol() ) {
col = 0;
row++;
}
}
}
return m;
}
A列の値(行列式展開法)
/**
*
* @param mat
* @return
*/
public static double getMatrixValue(Matrix mat) {
if(mat.getRow() != mat.getCol()) {
System.out.println(" , ");
return Double.MIN_VALUE;
}
// 1*1
if(mat.getRow() == 1) return mat.getValue(0, 0);
// 2*2
if(mat.getRow() == 2) {
return mat.getValue(0, 0)*mat.getValue(1, 1) - mat.getValue(0, 1)*mat.getValue(1, 0);
}
//
double matrixValue = 0;
for (int i = 0; i < mat.getCol(); i++) {
// 0,i ,
Matrix m = getComplementMinor(mat, 0, i);
// ,
matrixValue += Math.pow(-1, i) * getMatrixValue(m);
}
return matrixValue;
}
3.代数的余子式と行列式の値から付随行列を求める。
/**
*
* @param mat
* @return
*/
public static Matrix getWithMatrix(Matrix mat) {
//
Matrix withMatrix = new Matrix(mat.getRow(),mat.getCol());
// withMatrix mat
for (int i = 0; i < withMatrix.getRow(); i++) {
for (int j = 0; j < withMatrix.getCol(); j++) {
double temp = Math.pow(-1, i+j) * MatrixUtil.getMatrixValue(MatrixUtil.getComplementMinor(mat, j, i));
if(Math.abs(temp) <= 10e-6) temp = 0;
withMatrix.setValue(i, j,temp);
}
}
//
return withMatrix;
}
4.付随行列と行列行列の値から逆行列を求めます。A^-1=A*/124)
/**
*
* @param mat
* @return
*/
public static Matrix getReMatrix(Matrix mat) {
//
Matrix reMatrix = new Matrix(mat.getRow(),mat.getCol());
//
double value = MatrixUtil.getMatrixValue(mat);
//
if(Math.abs(value) <= 10e-6) {
System.out.println(" !");
return null;
}
// mat value
for (int i = 0; i < reMatrix.getRow(); i++) {
for (int j = 0; j < reMatrix.getCol(); j++) {
reMatrix.setValue(i, j, MatrixUtil.getWithMatrix(mat).getValue(i, j) / value);
}
}
return reMatrix;
}
以上述べたのは小编が绍介したjavaでマトリックスを说明して逆を求めるアルゴリズムを详しく整理して、皆さんに役に立つことを望んでいます。ここでも私たちのサイトを応援してくれてありがとうございます。