「java矩阵逆」编程求矩阵的逆

博主:adminadmin 2022-12-29 12:42:05 636

今天给各位分享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矩阵逆的信息别忘了在本站进行查找喔。