當前位置:首頁 » 操作系統 » java矩陣演算法

java矩陣演算法

發布時間: 2023-01-29 08:45:11

A. 魔方矩陣的java版的魔方矩陣演算法

/***魔術矩陣,也被稱為魔方矩陣。目前魔術矩陣主要有三種結構:N為奇數、N為4的倍數、N為其它偶數(4n+2)。<br/>*其中目前很多數學家都還在研究「N為4的倍數」、「N為其它偶數(4n+2)」,可見它們對於初學者而言太難。<br/>*因此此處演示的代碼,僅僅考慮N為奇數的情況。<br/>*此代碼作為課件提供給學生參考,在學完數組、循環、判斷後練習。<br/>*@authorluo_wenqiang在126點com*@version1.0.0*/classMagicArray{publicstaticvoidmain(String[]args){/*1.把1放在第一行的最中間2.每個數字向右上角填充3.如果往右已經是最大數了,就從最左邊重新繼續4.如果往上已經是最大數了,就從最下邊重新繼續5.如果遇到行數的整數倍,則下一個數直接放到該數的下面*//*1.聲明一個n*n二維數組2.聲明一個int類型的變數記錄每個元素遞增的值,每次自加即可3.需要一個嵌套循環來填充二維數組3.1.把橫向的索引認為x,x=n/23.2.把縱向的所應認為y,y=03.3.在循環中,先把x、y坐標上的值填充,然後計算下一個坐標*/intn=3;int[][]array=newint[n][n];intcounter=1;//自加的計數器intx=n/2;inty=0;//二維數組,需要用兩層的嵌套循環來完成比較簡單for(inti=0;i<n*n;i++){//根據坐標填充值array[y][x]=counter;//計算下一個坐標的位置if(counter%n==0){//如果counter是n的整數倍,下一個坐標是在當前數字的下面y++;}else{x++;y--;if(y<0){//如果y超出范圍,把y設置成最大y=n-1;}if(x==n){//如果x超出范圍,把x設置成最小x=0;}}//使用完以後計數器需要自加counter++;}for(int[]row:array){for(inti:row){System.out.print(i);System.out.print( );}System.out.println();}}}

B. java實現矩陣相加、相乘,判斷是否上(下)三角矩陣、對稱矩陣、相等的演算法

class Matrix
{
private int value[][]; //存儲矩陣元素的二維數組

public Matrix(int m, int n) //構造m行n列的空矩陣
{
this.value=new int[m][n];
}

public Matrix(int n) //構造n行n列的空矩陣
{
this(n,n);
}

public Matrix()
{
this(10,10);
}

public Matrix(int mat[][]) //構造矩陣,由數組mat提供矩陣元素
{
this(mat.length,mat[0].length);
for (int i=0; i<mat.length; i++)
for (int j=0; j<mat[i].length; j++)
this.value[i][j] = mat[i][j];
}

public int get(int i, int j) //獲得矩陣第i行第j列的元素,O(1)
{
return value[i][j];
}

public void set(int i, int j, int k) //設置矩陣第i行第j列的元素,O(1)
{
value[i][j]=k;
}

public void add(Matrix b) //this和b兩個矩陣相加,改變當前矩陣
{
for (int i=0; i<this.value.length; i++)
for (int j=0; j<this.value[i].length; j++)
this.value[i][j] += b.value[i][j];
}

public String toString() //行主序遍歷,訪問矩陣全部元素
{
String str="";
for (int i=0; i<value.length; i++)
{
for (int j=0; j<value[i].length; j++)
str += " "+value[i][j];
str += "\n";
}
return str;
}

public Matrix transpose() //矩陣的轉置
{
Matrix trans = new Matrix(value[0].length, value.length);
for (int i=0; i<this.value.length; i++)
for (int j=0; j<this.value[i].length; j++)
trans.value[j][i]=this.value[i][j];
return trans;
}

//判斷一個矩陣是否為上三角矩陣
public boolean isUpperTriangularMatrix() {
int i, j = 0;
int c = this.value[1][0];

for(i=1; i<this.value.length; i++)
for(j=0; j<i; j++)
if(this.value[i][j] != c)
break;
if(i>=this.value.length)
return true;
return false;
}

//判斷一個矩陣是否為下三角矩陣
public boolean isLowerTriangularMatrix() {
int i, j = 0;
int c = this.value[0][1];

for(i=0; i<this.value.length-1; i++)
for(j=i+1; j<this.value[0].length; j++)
if(this.value[i][j] != c)
break;
if(i>=this.value.length-1)
return true;
return false;
}

//判斷一個矩陣是否為對稱矩陣
public boolean isSymmetricMatrix () {
int i, j = 0;

for(i=1; i<this.value.length; i++)
for(j=0; j<i; j++)
if(this.value[i][j] != this.value[j][i])
break;
if(i>=this.value.length)
return true;
return false;
}

//比較兩個矩陣是否相等
public boolean equals(Matrix b) {
int i, j = 0;

if(this.value.length != b.value.length || this.value[0].length != b.value[0].length)
return false;

for(i=0; i<this.value.length; i++)
for(j=0; j<this.value[0].length; j++)
if(this.value[i][j] != b.value[j][i])
break;
if(i>=this.value.length)
return true;
return false;
}

//計算兩個矩陣的乘積
public Matrix multiply(Matrix b){
int i, j, k;
int sum;
Matrix mtr;

if(this.value[0].length != b.value.length) {
return null;
}

mtr = new Matrix(this.value.length, b.value[0].length);

for(i=0; i<this.value.length; i++)
{
for(k=0; k<b.value[0].length; k++){
for(sum=0,j=0; j<this.value[0].length; j++){
sum += this.value[i][j] * b.value[j][k];
mtr.value[i][k] = sum;
}
}
}

return mtr;
}
}

public class Test
{
public static void main(String args[])
{
int m1[][]={{1,2,3},{4,5,6}};
Matrix a=new Matrix(m1);
int m2[][]={{1,0,0},{0,1,0}};
Matrix b=new Matrix(m2);
System.out.print("Matrix a:\n"+a.toString());
System.out.print("Matrix b:\n"+b.toString());
a.add(b);
System.out.print("Matrix a:\n"+a.toString());
System.out.println("a的轉置矩陣:\n"+a.transpose().toString());

int m3[][] = {{1,2,1},{0,3,1},{0,0,2}};
int m4[][] = {{1,0,0},{2,1,0},{3,2,1}};
int m5[][] = {{1,0,2},{0,1,0},{2,0,2}};
Matrix mtr1 = new Matrix(m3);
Matrix mtr2 = new Matrix(m4);
Matrix mtr3 = new Matrix(m5);
if(mtr1.isUpperTriangularMatrix())
System.out.println("上三角矩陣:\n" + mtr1.toString());

if(mtr2.isLowerTriangularMatrix())
System.out.println("下三角矩陣:\n" + mtr2.toString());

if(mtr3.isSymmetricMatrix())
System.out.println("對稱矩陣:\n" + mtr3.toString());

System.out.println(mtr1.toString() + "\n乘以\n" + mtr2.toString() + "\n=\n");
Matrix tempM = mtr1.multiply(mtr2);
System.out.println(tempM.toString());
}
}

熱點內容
c語言fread返回值 發布:2025-07-12 16:57:32 瀏覽:678
王者榮耀在哪裡顯示賬號密碼 發布:2025-07-12 16:36:42 瀏覽:898
打包sql資料庫 發布:2025-07-12 16:19:27 瀏覽:797
php日誌查看 發布:2025-07-12 16:12:10 瀏覽:214
ftp目錄映射為本地盤符 發布:2025-07-12 16:06:59 瀏覽:645
nas存儲百科 發布:2025-07-12 16:03:17 瀏覽:126
python的sort函數 發布:2025-07-12 15:53:21 瀏覽:50
ensp伺服器怎麼設置web根目錄 發布:2025-07-12 15:47:56 瀏覽:286
安卓怎麼設置二卡發信息 發布:2025-07-12 15:43:50 瀏覽:743
如何看到無線密碼 發布:2025-07-12 15:43:13 瀏覽:677