java實現(xiàn)的n*n矩陣求值及求逆矩陣算法示例
本文實例講述了java實現(xiàn)的n*n矩陣求值及求逆矩陣算法。分享給大家供大家參考,具體如下:
先來看看運行結(jié)果:

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("轉(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é)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
java?web實現(xiàn)簡單登錄注冊功能全過程(eclipse,mysql)
前期我們學(xué)習(xí)了javaweb項目用JDBC連接數(shù)據(jù)庫,還有數(shù)據(jù)庫的建表功能,下面這篇文章主要給大家介紹了關(guān)于java?web實現(xiàn)簡單登錄注冊功能的相關(guān)資料,需要的朋友可以參考下2022-07-07
Java使用openOffice對于word的轉(zhuǎn)換及遇到的問題解決
開發(fā)過程中經(jīng)常會使用java將office系列文檔轉(zhuǎn)換為PDF, 一般都使用微軟提供的openoffice+jodconverter 實現(xiàn)轉(zhuǎn)換文檔,下面這篇文章主要給大家介紹了關(guān)于Java通過openOffice對于word的轉(zhuǎn)換及遇到問題的解決方法,需要的朋友可以參考下2018-09-09
PowerJobAutoConfiguration自動配置源碼流程解析
這篇文章主要為大家介紹了PowerJobAutoConfiguration自動配置源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
JavaWeb JDBC + MySql 通訊錄實現(xiàn)簡單的增刪改查功能案例詳解
這篇文章主要介紹了JavaWeb JDBC + MySql 通訊錄實現(xiàn)簡單的增刪改查功能,結(jié)合具體案例形式詳細分析了JavaWeb JDBC + MySql數(shù)據(jù)庫連接、增刪改查等相關(guān)操作技巧與注意事項,需要的朋友可以參考下2019-08-08
使用SpringBoot實現(xiàn)自動發(fā)送注冊驗證碼郵件功能
一直以來,我都對程序如何自動發(fā)送郵件感到好奇,想象一下,當你在某個網(wǎng)站注冊時,輸入郵箱后不久就收到一封帶有驗證碼的郵件,這種體驗既方便又高效,所以本文給大家介紹了如何用?Spring?Boot?實現(xiàn)自動發(fā)送注冊驗證碼郵件,需要的朋友可以參考下2025-04-04

