编写一个程序实现N(N>=3)阶矩阵(方阵)的求逆运算 
要求:1.程序实现完成N阶方阵的输入输出及逆矩阵的输出 
2.求逆运算算法不限 要求数值精确到小数点后至少两位

解决方案 »

  1.   

    import  java.io.*;
    import java.text.*;public class Test
    {

    public static void main(String args[])
    {int N;
    String str[];

    try
    {
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    N=Integer.parseInt(br.readLine());
    double a[][]=new double[N][N],b[][]=new double[N][N];
    System.out.println("请输入"+N*N+"个数作为原始矩阵的元素,并以空格分隔");
    BufferedReader brr=new BufferedReader(new InputStreamReader(System.in));
            str=brr.readLine().split(" ");

            for (int j=0,k=0,i=0;j<N&&k<N ;i++ )
    {
                   a[k][j]=Double.parseDouble(str[i]);j++;
       if ((i+1)%N==0)
       {
       k++;
       j=0;
       }
    }
        
            System.out.println("原始矩阵为:");
       for (int i=0;i<N ;i++ )
    {
       for (int j=0;j<N ;j++ )
       {

           System.out.print(a[i][j]+"  ");
       if ((j+1)%N==0)
       {
       System.out.println();
       }
       }
    }
    System.out.println("逆矩阵为:");
    for (int i=0;i<N ;i++ )
    {
    for (int j=0;j<N ;j++ )
    {   
    b[i][j]=a[j][i];
    System.out.print(b[i][j]+"  ");
    if ((j+1)%N==0)
       {
       System.out.println();
       }
    }
    }
    }
    catch (IOException e)
    {

    }


    }
    }
      

  2.   

    import java.util.*;
    public class Structure
    {
    public static void change(int[][] a)
    {

    LinkedList<Integer> al=new LinkedList<Integer>();

    for(int i=0;i<a.length;i++)
    {
    for(int j=0;j<a[0].length;j++)
    {
    al.add(a[i][j]);
    }
    }


    System.out.println("转换前的矩阵:");
    int k=0;
    for(int i=0;i<a.length;i++)
    {
    for(int j=0;j<a[0].length;j++)
    {
    System.out.print(al.get(k)+" ");
    k++;
    }
    System.out.println();
    }


    k=0;
    for(int i=a.length-1;i>=0;i--)
    {
    for(int j=a[0].length-1;j>=0;j--)
    {
    a[i][j]=al.get(k);
    k++;
    }
    }


    System.out.println("转换后的矩阵:");
    for(int i=0;i<a.length;i++)
    {
    for(int j=0;j<a[0].length;j++)
    {
    System.out.print(a[i][j]+" ");
    }
    System.out.println();
    }

    }


    public static void main(String[] args)
    {
    int[][] a={{1,2,3},{4,5,6},{7,8,9}};
    change(a);
    }
    }
      

  3.   

    晕死~
    T×T^-1=E
    T^-1叫做T的逆矩阵!
    有点常识好不好?
      

  4.   

    代码,没有判断输入合法性:
    package chdw;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);
    }
    }