欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

逆矩陣java代碼 矩陣求逆編程算法

如何用java程序利用二維數(shù)組創(chuàng)建一個(gè)矩陣,編寫方法完成該矩陣的逆轉(zhuǎn),兩個(gè)矩陣之和。

兩個(gè)類,一個(gè)是矩陣對(duì)象類Matrix,另一個(gè)是測(cè)試類MatrixTest

創(chuàng)新互聯(lián)公司基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺(tái)為眾多戶提供內(nèi)蒙古服務(wù)器托管 四川大帶寬租用 成都機(jī)柜租用 成都服務(wù)器租用。

可以實(shí)現(xiàn)矩陣創(chuàng)建,賦值,轉(zhuǎn)置,加法,支持行列數(shù)不同的矩陣

注1,轉(zhuǎn)置方法將輸出一個(gè)新的矩陣,并不改變?cè)芯仃嚨膬?nèi)容

注2:加法方法是a.add(b),b不發(fā)生變化,a發(fā)生變化,加法將改變a矩陣的內(nèi)容,不會(huì)產(chǎn)生新矩陣

public class Matrix {

private int rows;

private int columns;

private Integer[][] m;

// 行列構(gòu)造法

public Matrix(int rows, int columns) {

this.rows = rows;

this.columns = columns;

this.m = new Integer[rows][columns];

}

// 二維數(shù)組構(gòu)造法

public Matrix(Integer[][] m) {

this.m = m;

this.rows = m.length;

this.columns = m[0].length;

}

// 轉(zhuǎn)置

public Matrix exchange() {

Integer[][] result = new Integer[columns][rows];

for (int i = 0; i rows; i++) {

for (int j = 0; j columns; j++) {

result[j][i] = m[i][j];

}

}

return new Matrix(result);

}

// 加法

public void add(Matrix obj) {

if (obj.getRows() != rows || obj.getColumns() != columns) {

System.out.println("不同行列的矩陣不能相加");

} else {

Integer[][] objarray = obj.toArray();

for (int i = 0; i rows; i++) {

for (int j = 0; j columns; j++) {

m[i][j] += objarray[i][j];

}

}

}

}

// 矩陣賦值

public void setValue(int row, int column, int value) {

if (row rows column columns) {

m[row][column] = value;

} else {

System.out.println("索引超出邊界");

}

}

public int getRows() {

return rows;

}

public int getColumns() {

return columns;

}

public Integer[][] toArray() {

return m;

}

public String toString() {

String result = "";

for (int i = 0; i rows; i++) {

for (int j = 0; j columns; j++) {

result = result + m[i][j] + " ";

}

result += "\r\n";

}

return result;

}

}

public class MatrixTest {

public static void main(String[] args) {

Matrix m1 = new Matrix(2, 3);

for (int i = 0; i 2; i++) {

for (int j = 0; j 3; j++) {

m1.setValue(i, j, i + j);

}

}

System.out.println(m1.toString());

System.out.println(m1.exchange().toString());

Matrix m2 = new Matrix(2, 3);

for (int i = 0; i 2; i++) {

for (int j = 0; j 3; j++) {

m2.setValue(i, j, (i + 1) * (j + 1));

}

}

System.out.println(m2.toString());

m1.add(m2);

System.out.println(m1.toString());

}

}

java n*n矩陣求值及求逆矩陣

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;jn;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;in+10;i++)??

for(j=0;jn+10;j++)??

just[i][j]=1;??

for(i=1;i=n-1;i++)//求余子式矩陣???

for(j=1;j=n-1;j++)??

{??

if(i=numijnumj)??

just[i][j]=map[i+1][j];??

else?if(i=numij=numj)??

just[i][j]=map[i+1][j+1];??

else?if(inumij=numj)??

just[i][j]=map[i][j+1];??

else?if(inumijnumj)??

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(mn)??

//??????matrix.gcd(n,m);??

//??????if(n==0)??

//??????return?m;??

//????????

//??????else??

//??????return?matrix.gcd(n,m%n);??

int?mm=m;??

int?nn=n;??

if(mmnn)??

{??

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*m0)??

{??

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;in+10;i++)??

for(j=0;jn+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();??

}??

}??

}

java如何編寫求矩陣的逆矩陣

/**

* 求矩陣的逆矩陣 為矩陣右加一個(gè)單位矩陣后進(jìn)行初等行變換,當(dāng)左邊變成單位矩陣時(shí),右邊就是求得的逆矩陣。 矩陣的初等行變換法則

* (1)交換變換:交換兩行 (2)倍法變換:給一行數(shù)據(jù)乘以一個(gè)非0常數(shù) (3)消法變換:把一行所有元素的k倍加到另一行的對(duì)應(yīng)元素上去

* 將上述規(guī)則中的行換成列同樣有效 只有方陣才可能有逆矩陣!

*

* @return

*/

public Matrix inverseMatrix() {

if (!this.isSquareMatrix()) {

System.out.println("不是方陣沒(méi)有逆矩陣!");

return null;

}

// 先在右邊加上一個(gè)單位矩陣。

Matrix tempM = this.appendUnitMatrix();

// 再進(jìn)行初等變換,把左邊部分變成單位矩陣

double[][] tempData = tempM.getMatrixData();

int tempRow = tempData.length;

int tempCol = tempData[0].length;

// 對(duì)角線上數(shù)字為0時(shí),用于交換的行號(hào)

int line = 0;

// 對(duì)角線上數(shù)字的大小

double bs = 0;

// 一個(gè)臨時(shí)變量,用于交換數(shù)字時(shí)做中間結(jié)果用

double swap = 0;

for (int i = 0; i tempRow; i++) {

// 將左邊部分對(duì)角線上的數(shù)據(jù)等于0,與其他行進(jìn)行交換

if (tempData[i][i] == 0) {

if (++line = tempRow) {

System.out.println("此矩陣沒(méi)有逆矩陣!");

return null;

}

for (int j = 0; j tempCol; j++) {

swap = tempData[i][j];

tempData[i][j] = tempData[line][j];

tempData[line][j] = swap;

}

// 當(dāng)前行(第i行)與第line行進(jìn)行交換后,需要重新對(duì)第i行進(jìn)行處理

// 因此,需要將行標(biāo)i減1,因?yàn)樵趂or循環(huán)中會(huì)將i加1。

i--;

// 繼續(xù)第i行處理,此時(shí)第i行的數(shù)據(jù)是原來(lái)第line行的數(shù)據(jù)。

continue;

}

// 將左邊部分矩陣對(duì)角線上的數(shù)據(jù)變成1.0

if (tempData[i][i] != 1) {

bs = tempData[i][i];

for (int j = tempCol - 1; j = 0; j--) {

tempData[i][j] /= bs;

}

// 將左邊部分矩陣變成上對(duì)角矩陣,

// 所謂上對(duì)角矩陣是矩陣的左下角元素全為0

for (int iNow = i + 1; iNow tempRow; iNow++) {

for (int j = tempCol - 1; j = i; j--) {

tempData[iNow][j] -= tempData[i][j] * tempData[iNow][i];

}

}

}

}

// 將左邊部分矩陣從上對(duì)角矩陣變成單位矩陣,即將矩陣的右上角元素也變?yōu)?

for (int i = 0; i tempRow - 1; i++) {

for (int iNow = i; iNow tempRow - 1; iNow++) {

for (int j = tempCol - 1; j = 0; j--) {

tempData[i][j] -= tempData[i][iNow + 1]

* tempData[iNow + 1][j];

}

}

}

// 右邊部分就是它的逆矩陣

Matrix c = null;

int cRow = tempRow;

int cColumn = tempCol / 2;

double[][] cData = new double[cRow][cColumn];

// 將右邊部分的值賦給cData

for (int i = 0; i cRow; i++) {

for (int j = 0; j cColumn; j++) {

cData[i][j] = tempData[i][cColumn + j];

}

}

// 得到逆矩陣,返回

c = new Matrix(cData);

return c;

}

標(biāo)題名稱:逆矩陣java代碼 矩陣求逆編程算法
分享鏈接:http://chinadenli.net/article30/ddodgpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)面包屑導(dǎo)航網(wǎng)站維護(hù)微信小程序商城網(wǎng)站動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管