java实现的n*n矩阵求值及求逆矩阵算法示例
作者:hpuzsk 时间:2022-07-19 06:45:06
本文实例讲述了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,矩阵,算法
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
spring 自定义让@Value被解析到
2022-12-21 13:27:49
基于spring security实现登录注销功能过程解析
2023-11-29 06:09:05
![](https://img.aspxhome.com/file/2023/8/59378_0s.png)
Android模仿微信收藏文件的标签处理功能
2022-07-17 05:32:18
![](https://img.aspxhome.com/file/2023/2/138492_0s.png)
剖析Java中阻塞队列的实现原理及应用场景
2023-09-01 17:33:07
java 解析由String类型拼接的XML文件方法
2022-07-10 12:47:14
详解使用Spring AOP和自定义注解进行参数检查
2021-11-27 00:06:49
![](https://img.aspxhome.com/file/2023/1/70261_0s.jpg)
Android使用HttpURLConnection实现网络访问流程
2023-09-04 10:40:31
![](https://img.aspxhome.com/file/2023/5/106845_0s.png)
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
![](https://img.aspxhome.com/file/2023/5/59745_0s.png)
Java计时新姿势StopWatch的使用方法详解
2022-01-28 00:49:57
![](https://img.aspxhome.com/file/2023/2/70512_0s.png)
基于spring中的aop简单实例讲解
2023-10-16 21:01:10
![](https://img.aspxhome.com/file/2023/9/75449_0s.png)
IntelliJ IDEA中查看当前类的所有继承关系图
2023-08-06 12:40:19
![](https://img.aspxhome.com/file/2023/6/57906_0s.png)
Java基础之数组模拟循环队列
2022-08-29 12:58:06
![](https://img.aspxhome.com/file/2023/9/78929_0s.png)
Android 文件操作方法
2023-06-02 12:51:17
C#多线程学习之Thread、ThreadPool、Task、Parallel四者区别
2023-08-27 05:32:14
![](https://img.aspxhome.com/file/2023/2/108772_0s.png)
android 一些工具类汇总
2023-08-29 11:32:05
基于SSM实现学生管理系统
2023-11-24 18:17:39
![](https://img.aspxhome.com/file/2023/0/59190_0s.jpg)
详解C# ConcurrentBag的实现原理
2022-11-17 02:26:05
![](https://img.aspxhome.com/file/2023/2/76422_0s.jpg)