java實(shí)現(xiàn)的n*n矩陣求值及求逆矩陣算法示例
本文實(shí)例講述了java實(shí)現(xiàn)的n*n矩陣求值及求逆矩陣算法。分享給大家供大家參考,具體如下:
先來(lái)看看運(yùn)行結(jié)果:
java版的寫(xiě)出來(lái)了,用的跟c語(yǔ)言相同的算法,然后看看能不能以后加個(gè)框做成程序:
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);//得到當(dāng)前余子式 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 自動(dòng)生成的方法存根 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("轉(zhuǎn)置矩陣為:"); 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(); } } }
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
sprinboot項(xiàng)目啟動(dòng)一半到圖形化界面卡住了的解決
這篇文章主要介紹了sprinboot項(xiàng)目啟動(dòng)一半到圖形化界面卡住了的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10Maven依賴中scope的runtime和provied的區(qū)別及說(shuō)明
這篇文章主要介紹了Maven依賴中scope的runtime和provied的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Spring(二):Spring通過(guò)IOC來(lái)創(chuàng)建對(duì)象
下面小編就為大家?guī)?lái)一篇詳談Spring對(duì)IOC的理解(推薦篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2021-07-07淺談java反射和自定義注解的綜合應(yīng)用實(shí)例
本篇文章主要介紹了java反射和自定義注解的綜合應(yīng)用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09Java線程通信中關(guān)于生產(chǎn)者與消費(fèi)者案例分析
這篇文章主要介紹了Java線程通信中關(guān)于生產(chǎn)者與消費(fèi)者案例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09springboot項(xiàng)目配置logback-spring.xml實(shí)現(xiàn)按日期歸檔日志的方法
本文主要介紹了springboot項(xiàng)目配置logback-spring.xml實(shí)現(xiàn)按日期歸檔日志的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08詳解Spring Cloud Zuul網(wǎng)關(guān)修改為短連接方法
本文主要介紹了詳解Spring Cloud Zuul網(wǎng)關(guān)修改為短連接方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04Spring Boot 項(xiàng)目啟動(dòng)自動(dòng)執(zhí)行方法的兩種實(shí)現(xiàn)方式
這篇文章主要介紹了Spring Boot 項(xiàng)目啟動(dòng)自動(dòng)執(zhí)行方法的兩種實(shí)現(xiàn)方式,幫助大家更好的理解和學(xué)習(xí)使用Spring Boot框架,感興趣的朋友可以了解下2021-05-05