求N阶矩阵的逆矩阵 java
别妄想泡我
818次浏览
2020年08月01日 16:49
最佳经验
本文由作者推荐
1毫升等于多少升-岂止的意思
import r;
public class 求逆矩阵 {
** * @param args *
public static void main(String[] args) {
TODO Auto-generated method stub
Scanner input = new Scanner( );
int n;
n("请输入要求的矩阵的阶数:");
n = t();
double[][] Vp=new double[n][n];
n("您所要计算的矩阵是"+n+"阶矩阵,请按行输入矩阵
的元素,并按Enter键换行,您需要输入"+n*n+"个整数。");
for( int row1 =0;row1 < n;row1++){
for( int column1 =0;column1 < n;column1++){
Vp[ row1 ][ column1 ] = uble();
}
}
*int n=5; 数组的长度
double[][] Vp=new double[n][n];
Vp[0][0] = 4;
Vp[0][1] = 1;
Vp[0][2] = 5;
Vp[0][3] = 3;
Vp[0][4] = 2;
Vp[1][0] = 3;
Vp[1][1] = 1;
Vp[1][2] = 2;
Vp[1][3] = 3;
Vp[1][4] = 7;
Vp[2][0] = 4;
Vp[2][1] = 1;
Vp[2][2] = 2;
Vp[2][3] = 5;
Vp[2][4] = 2;
Vp[3][0] = 4;
Vp[3][1] = 6;
Vp[3][2] = 2;
Vp[3][3] = 3;
Vp[3][4] = 2;
Vp[4][0] = 4;
Vp[4][1] = 1;
Vp[4][2] = 3;
Vp[4][3] = 3;
Vp[4][4] = 2;
*
*
* for(int i=1;i<;i++)
* for(int j=1;j<Vp[0].length;j++)
* Vp[i][j]=(int)(()*100);
* *
n("原矩阵为:");
trix(Vp);
double[][] rvs=e(Vp);
n("逆矩阵为:");
trix(rvs);
n("注意:如逆矩阵与原矩阵相同,则说明该矩阵不可逆.");
}
} 封装对于矩阵操作的方法,包含显示矩阵,求逆矩阵等
class Matrix
{
private Matrix(){}
public static double[][] reverse(double[][] matrix)
{
double[][] temp;
double[][] back_temp;
得到矩阵的阶数
int m_length=;
创建n*(2n-1)行列式,用来求逆矩阵,原矩阵和单位矩阵
temp=new double[m_length][2*m_length];
创建返回的矩阵,初始化
back_temp=matrix;
将原矩阵的值赋给 temp矩阵,并添加单位矩阵的值
for(int x=0;x<m_length;x++)
{
for(int y=0;y<temp[0].length;y++)
{
if(y>m_length-1)
{
if(x==(y-m_length))
temp[x][y]=1;
else
temp[x][y]=0;
}
else
{
temp[x][y]=matrix[x][y];
}
}
}
n("组合矩阵:");
showMatrix(temp);
高斯消元求逆矩阵
for(int x=0;x<m_length;x++)
{
double var=temp[x][x];
判断对角线上元素是否为0,是的话与后面的行进行交换行,如没有满足条件的
则可认为原矩阵没有逆矩阵。然后取值要化为0的列的值
for(int w=x;w<temp[0].length;w++)
{
if(temp[x][x]==0)
{
int k;
for(k=x+1;k<;k++)
{
if(temp[k][k]!=0)
{
for(int t=0;t<temp[0].length;t++)
{
n(">>>"+k+"<<<");
double tmp=temp[x][t];
temp[x][t]=temp[k][t];
temp[k][t]=tmp;
}
break;
}
}
n(""+k);
如果出现无法将temp矩阵的左边化为单位矩阵,返回原矩阵
if(k>=) return back_temp;
var=temp[x][x];
("第 " + x + "次变换前替换主元上的 0");
n("(将 " + x + " 行与第 " + k +" 行进
行交换):");
showMatrix(temp); }
temp[x][w] =var; }
将第x列的元素出对角线上的元素外都化为0,即构建单位矩阵
for(int z=0;z<m_length;z++)
{ double var_tmp=0.0;
for(int w=x;w<temp[0].length;w++)
{
n("-"+x+"-"+z+"-"+w+"+++&q
uot; + temp[z][w]);
if(w==x)
var_tmp=temp[z][x];
if(x!=z) temp[z][w] -=(var_tmp*temp[x][w]);
}
}
n("第 " + x + "次变换:");
showMatrix(temp); }
取逆矩阵的值
for(int x=0;x<m_length;x++)
{
for(in
t y=0;y<m_length;y++)
{
back_temp[x][y]=temp[x][y+m_length-1];
}
}
return back_temp;
}
public static void showMatrix(double[][] ma)
{
int x=;
int y=ma[0].length;
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
("t" + ma[i][j]);
n();
}
}
}
import r;
public class 求逆矩阵 {
** * @param args *
public static void main(String[] args) {
TODO Auto-generated method stub
Scanner input = new Scanner( );
int n;
n("请输入要求的矩阵的阶数:");
n = t();
double[][] Vp=new double[n][n];
n("您所要计算的矩阵是"+n+"阶矩阵,请按行输入矩阵
的元素,并按Enter键换行,您需要输入"+n*n+"个整数。");
for( int row1 =0;row1 < n;row1++){
for( int column1 =0;column1 < n;column1++){
Vp[ row1 ][ column1 ] = uble();
}
}
*int n=5; 数组的长度
double[][] Vp=new double[n][n];
Vp[0][0] = 4;
Vp[0][1] = 1;
Vp[0][2] = 5;
Vp[0][3] = 3;
Vp[0][4] = 2;
Vp[1][0] = 3;
Vp[1][1] = 1;
Vp[1][2] = 2;
Vp[1][3] = 3;
Vp[1][4] = 7;
Vp[2][0] = 4;
Vp[2][1] = 1;
Vp[2][2] = 2;
Vp[2][3] = 5;
Vp[2][4] = 2;
Vp[3][0] = 4;
Vp[3][1] = 6;
Vp[3][2] = 2;
Vp[3][3] = 3;
Vp[3][4] = 2;
Vp[4][0] = 4;
Vp[4][1] = 1;
Vp[4][2] = 3;
Vp[4][3] = 3;
Vp[4][4] = 2;
*
*
* for(int i=1;i<;i++)
* for(int j=1;j<Vp[0].length;j++)
* Vp[i][j]=(int)(()*100);
* *
n("原矩阵为:");
trix(Vp);
double[][] rvs=e(Vp);
n("逆矩阵为:");
trix(rvs);
n("注意:如逆矩阵与原矩阵相同,则说明该矩阵不可逆.");
}
} 封装对于矩阵操作的方法,包含显示矩阵,求逆矩阵等
class Matrix
{
private Matrix(){}
public static double[][] reverse(double[][] matrix)
{
double[][] temp;
double[][] back_temp;
得到矩阵的阶数
int m_length=;
创建n*(2n-1)行列式,用来求逆矩阵,原矩阵和单位矩阵
temp=new double[m_length][2*m_length];
创建返回的矩阵,初始化
back_temp=matrix;
将原矩阵的值赋给 temp矩阵,并添加单位矩阵的值
for(int x=0;x<m_length;x++)
{
for(int y=0;y<temp[0].length;y++)
{
if(y>m_length-1)
{
if(x==(y-m_length))
temp[x][y]=1;
else
temp[x][y]=0;
}
else
{
temp[x][y]=matrix[x][y];
}
}
}
n("组合矩阵:");
showMatrix(temp);
高斯消元求逆矩阵
for(int x=0;x<m_length;x++)
{
double var=temp[x][x];
判断对角线上元素是否为0,是的话与后面的行进行交换行,如没有满足条件的
则可认为原矩阵没有逆矩阵。然后取值要化为0的列的值
for(int w=x;w<temp[0].length;w++)
{
if(temp[x][x]==0)
{
int k;
for(k=x+1;k<;k++)
{
if(temp[k][k]!=0)
{
for(int t=0;t<temp[0].length;t++)
{
n(">>>"+k+"<<<");
double tmp=temp[x][t];
temp[x][t]=temp[k][t];
temp[k][t]=tmp;
}
break;
}
}
n(""+k);
如果出现无法将temp矩阵的左边化为单位矩阵,返回原矩阵
if(k>=) return back_temp;
var=temp[x][x];
("第 " + x + "次变换前替换主元上的 0");
n("(将 " + x + " 行与第 " + k +" 行进
行交换):");
showMatrix(temp); }
temp[x][w] =var; }
将第x列的元素出对角线上的元素外都化为0,即构建单位矩阵
for(int z=0;z<m_length;z++)
{ double var_tmp=0.0;
for(int w=x;w<temp[0].length;w++)
{
n("-"+x+"-"+z+"-"+w+"+++&q
uot; + temp[z][w]);
if(w==x)
var_tmp=temp[z][x];
if(x!=z) temp[z][w] -=(var_tmp*temp[x][w]);
}
}
n("第 " + x + "次变换:");
showMatrix(temp); }
取逆矩阵的值
for(int x=0;x<m_length;x++)
{
for(in
t y=0;y<m_length;y++)
{
back_temp[x][y]=temp[x][y+m_length-1];
}
}
return back_temp;
}
public static void showMatrix(double[][] ma)
{
int x=;
int y=ma[0].length;
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
("t" + ma[i][j]);
n();
}
}
}