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

作者:hpuzsk 时间:2022-07-19 06:45:06 

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

先来看看运行结果:

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程序设计有所帮助。

来源:http://blog.csdn.net/z8110/article/details/51691577

标签:java,矩阵,算法
0
投稿

猜你喜欢

  • spring 自定义让@Value被解析到

    2022-12-21 13:27:49
  • 基于spring security实现登录注销功能过程解析

    2023-11-29 06:09:05
  • Android模仿微信收藏文件的标签处理功能

    2022-07-17 05:32:18
  • 剖析Java中阻塞队列的实现原理及应用场景

    2023-09-01 17:33:07
  • java 解析由String类型拼接的XML文件方法

    2022-07-10 12:47:14
  • 详解使用Spring AOP和自定义注解进行参数检查

    2021-11-27 00:06:49
  • Android使用HttpURLConnection实现网络访问流程

    2023-09-04 10:40:31
  • C#预处理器指令的用法实例分析

    2023-03-09 16:21:07
  • java实现图片分割指定大小

    2021-07-02 16:56:34
  • C#实现json的序列化和反序列化实例代码

    2022-07-18 01:50:34
  • 通过实例解析Spring Ioc项目实现过程

    2023-11-24 10:12:33
  • Java计时新姿势StopWatch的使用方法详解

    2022-01-28 00:49:57
  • 基于spring中的aop简单实例讲解

    2023-10-16 21:01:10
  • IntelliJ IDEA中查看当前类的所有继承关系图

    2023-08-06 12:40:19
  • Java基础之数组模拟循环队列

    2022-08-29 12:58:06
  • Android 文件操作方法

    2023-06-02 12:51:17
  • C#多线程学习之Thread、ThreadPool、Task、Parallel四者区别

    2023-08-27 05:32:14
  • android 一些工具类汇总

    2023-08-29 11:32:05
  • 基于SSM实现学生管理系统

    2023-11-24 18:17:39
  • 详解C# ConcurrentBag的实现原理

    2022-11-17 02:26:05
  • asp之家 软件编程 m.aspxhome.com