「java矩阵逆」编程求矩阵的逆
今天给各位分享java矩阵逆的知识,其中也会对编程求矩阵的逆进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
用 JAVA 编写 求 3*3 方阵的逆阵
package com.karin;
import java.io.*;
import java.util.StringTokenizer;
public class Test {
private int N;
private double[][] src;
private double[][] result;
public Test() {
}
public static void main(String[] args) throws Exception {
new Test().exec();
}
private void exec() throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print( "Input N: ");
System.out.flush();
String line = reader.readLine();
N = Integer.parseInt(line);
src = new double[N][];result = new double[N][];
for(int i = 0; i N; i++) {
line = reader.readLine();
src[i] = new double[N];
result[i] = new double[N];
result[i][i] = 1;
StringTokenizer st = new StringTokenizer(line, ", ");
int index = 0;
while(st.hasMoreTokens()) {
src[i][index] = Double.parseDouble(st.nextToken());
index++;
}
}
calCol(0);
calColBack(N - 1);
reInit();
for (int i = 0; i N; i++) {
for (int j = 0; j N; j++) {
System.out.print(src[i][j] + ", ");
}
System.out.print( "\t ");
for (int j = 0; j N; j++) {
System.out.print(result[i][j] + ", ");
}
System.out.println();
}
}
private void reInit() {
for(int i = 0; i N; i++) {
double coefficient = 1 / src[i][i];
src[i][i] = 1;
for(int j = 0; j N; j++)
result[i][j] *= coefficient;
}
}
private void calColBack(int col) {
for(int i = col - 1; i = 0; i--) {
double coefficient = -1 * src[i][col] / src[col][col];
for(int z = 0; z N; z++) {
src[i][z] += coefficient * src[col][z];
result[i][z] += coefficient * result[col][z];
}
}
if(col 0)
calColBack(col - 1);
}
private void calCol(int col) {
for(int i = col + 1; i N; i++) {
double coefficient = -1 * src[i][col] / src[col][col];
for(int z = 0; z N; z++) {
src[i][z] += coefficient * src[col][z];
result[i][z] += coefficient * result[col][z];
}
}
if(col + 1 N)
calCol(col + 1);
}
}
java n*n矩阵求值及求逆矩阵
import java.math.*;
import java.util.*;
import java.text.*;
public class matrix {
static int map1[][]=new int [110][110];
static int just[][]=new int [110][110];
public static void printf(int n,int map[][])
{
int i,j;
for(i=1;i=n;i++ )
{
for(j=1;jn;j++)
System.out.print(map[i][j]+" ");
System.out.println(map[i][j]);
}
}
public static void get(int numi,int numj,int map[][],int n)
{
int i,j,k,l;
for(i=0;in+10;i++)
for(j=0;jn+10;j++)
just[i][j]=1;
for(i=1;i=n-1;i++)//求余子式矩阵
for(j=1;j=n-1;j++)
{
if(i=numijnumj)
just[i][j]=map[i+1][j];
else if(i=numij=numj)
just[i][j]=map[i+1][j+1];
else if(inumij=numj)
just[i][j]=map[i][j+1];
else if(inumijnumj)
just[i][j]=map[i][j];
}
}
//static int map[][]=new int [110][110];
public static int getans(int nn)
{
int map[][]=new int [110][110];
for(int i=1;i=nn;i++)
for(int j=1;j=nn;j++)
map[i][j]=just[i][j];
if(nn==2)
return map[1][1]*map[2][2]-map[1][2]*map[2][1];
else if(nn==1)
return map[1][1];
else
{
int cnb=0;
for(int i=1;i=nn;i++)
{
get(1,i,map,nn);//得到当前余子式 just
// printf("pay attention!\n");
//print(map,nn);
//print(just,nn-1);
if(i%2==1)
cnb+=map[1][i]*getans(nn-1);
else
cnb-=map[1][i]*getans(nn-1);
}
return cnb;
}
}
public static int gcd(int m,int n)
{
// if(mn)
// matrix.gcd(n,m);
// if(n==0)
// return m;
//
// else
// return matrix.gcd(n,m%n);
int mm=m;
int nn=n;
if(mmnn)
{
int c=mm;
mm=nn;
nn=c;
}
int w=1;
while(w!=0)
{
w=mm%nn;
mm=nn;
nn=w;
}
return mm;
}
public static void ans(int n,int m)
{
if(n*m0)
{
System.out.print("-");
ans(Math.abs(n),Math.abs(m));
return ;
}
if(m==1)
System.out.print(n+"\t");
else if(n%m==0)
System.out.print(n/m+"\t");
else
System.out.print((n/matrix.gcd(m, n))+"/"+(m/matrix.gcd(m, n))+"\t");
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner cin=new Scanner(System.in);
int i,j,k,l,m,p;
while(true)
{
int n=cin.nextInt();
int ans=0;
for(i=0;in+10;i++)
for(j=0;jn+10;j++)
map1[i][j]=1;
for(i=1;i=n;i++)
for(j=1;j=n;j++)
{
map1[i][j]=cin.nextInt();
just[i][j]=map1[i][j];
}
int ans1=matrix.getans(n);
System.out.println("矩阵的值为:");
System.out.println(ans1);
int map2[][]=new int [110][110];
for(i=1;i=n;i++)
for(j=1;j=n;j++)
{
map2[i][j]=map1[j][i];
just[i][j]=map2[i][j];
}
System.out.println("转置矩阵为:");
matrix.printf(n, map2);
int help2=matrix.getans(n);
System.out.println(help2);
if(help2==0)
{
System.out.println("No inverse matrix");
continue;
}
System.out.println("逆矩阵为:");
for(i=1;i=n;i++)
{
for(j=1;j=n;j++)
{
matrix.get(i, j, map2, n);
//boolean b=((i+j)%2==0);
if((i+j)%2==0)
matrix.ans(matrix.getans(n-1), help2);
else
matrix.ans(matrix.getans(n-1)*-1, help2);
}
System.out.println();
}
System.out.println();
}
}
}
java里怎么求一个矩阵的逆?
1,2,3,1,0,0
4,5,6,0,1,0
7,8,9,0,0,1
经过变换成
1,0,0,*,*,*
0,1,0,*,*,*
0,0,1,*,*,*就可以了,右边星号表示的矩阵就是你要求的逆
简单的说(A,E)变换成(E,A的逆)
java矩阵逆的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于编程求矩阵的逆、java矩阵逆的信息别忘了在本站进行查找喔。