java实现的n*n矩阵求值及求逆矩阵算法示例

所属分类: 软件编程 / java 阅读数: 16
收藏 0 赞 0 分享

本文实例讲述了java实现的n*n矩阵求值及求逆矩阵算法。分享给大家供大家参考,具体如下:

先来看看运行结果:

java版的写出来了,用的跟c语言相同的算法,然后看看能不能以后加个框做成程序:

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;j<n;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;i<n+10;i++)
      for(j=0;j<n+10;j++)
        just[i][j]=1;
    for(i=1;i<=n-1;i++)//求余子式矩阵
      for(j=1;j<=n-1;j++)
      {
        if(i>=numi&&j<numj)
        just[i][j]=map[i+1][j];
        else if(i>=numi&&j>=numj)
        just[i][j]=map[i+1][j+1];
        else if(i<numi&&j>=numj)
        just[i][j]=map[i][j+1];
        else if(i<numi&&j<numj)
        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(m<n)
//   matrix.gcd(n,m);
//   if(n==0)
//   return m;
//
//   else
//   return matrix.gcd(n,m%n);
    int mm=m;
    int nn=n;
    if(mm<nn)
    {
      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*m<0)
    {
      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;i<n+10;i++)
        for(j=0;j<n+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算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

更多精彩内容其他人还在看

Java数据类型的规则

这篇文章主要介绍了Java数据类型的规则的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring整合TimerTask实现定时任务调度

这篇文章主要介绍了Spring整合TimerTask实现定时任务调度的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解SpringMVC使用MultipartFile实现文件的上传

本篇文章主要介绍了SpringMVC使用MultipartFile实现文件的上传,本地的文件上传到资源服务器上,比较好的办法就是通过ftp上传。这里是结合SpringMVC+ftp的形式上传的,有兴趣的可以了解一下。
收藏 0 赞 0 分享

SpringMVC上传文件的三种实现方式

本篇文章主要介绍了SpringMVC上传文件的三种实现方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例

本篇文章主要介绍了微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
收藏 0 赞 0 分享

浅析Java中的继承与组合

本文将介绍组合和继承的概念及区别,并从多方面分析在写代码时如何进行选择。文中通过示例代码介绍的很详细,有需要的朋友可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

利用反射获取Java类中的静态变量名及变量值的简单实例

下面小编就为大家带来一篇利用反射获取Java类中的静态变量名及变量值的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java启动线程的3种方式对比分析

这篇文章主要为大家对比分析了java启动线程的3种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

SpringMVC上传和解析Excel方法

这篇文章主要介绍了SpringMVC上传和解析Excel方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

JAVA中String类与StringBuffer类的区别

这篇文章主要为大家详细介绍了JAVA中String类与StringBuffer类的区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多