本文实例讲述了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(); } }}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1142
183.71 KB下载数642
644.84 KB下载数2755
相关文章
发现更多好内容猜你喜欢
AI推送时光机java实现的n*n矩阵求值及求逆矩阵算法示例
后端开发2023-05-31
怎么在Java项目中实现一个求逆矩阵算法
后端开发2023-05-31
Python实现求解斐波那契第n项的解法(包括矩阵乘法+快速幂)
后端开发2024-04-02
咦!没有更多了?去看看其它编程学习网 内容吧