MyMatrix我的矩陣的實現。

開發一個矩陣運算的 java 開發包,定義一個 MyMatrix 類
實現構造方法,矩陣加法,矩陣乘法,矩陣轉置,打印函數
public MyMatrix(double[][] a);
public MyMatrix plus(MyMatrix B);
public MyMatrix times(MyMatrix B);
public MyMatrix transpose();
public void print(int w,int d);
其中 打印矩陣
1.起始一個空行,結束一個空行。
2.第一個參數是每一列的寬度,第二個參數是保留的小數點位數。

這道題目的難點在於矩陣的乘法,加法不是問題,對應元素相加即可。矩陣的轉置,如果加上一個輔助矩陣去做的話也沒啥難度。
不加輔助矩陣的矩陣轉置也可以做,但需要限制矩陣的類型爲n*n的呢。
對於乘法,我選擇的是三層循環,最外層是控制,返回數組的行數,第二層是返回數組的列數。同時第二層第三層都是爲了累加行和之積。
代碼如下:

package Test2017;

import java.text.DecimalFormat;
public class MyMatrix {
	double[][] a;
	public MyMatrix(double[][] a){
		this.a=a;
	}
	public MyMatrix plus(MyMatrix B){
	
		double[][] t=B.a;
		int len=t.length;
		double[][] re =new double[len][t[0].length];
		for(int i=0;i<a.length;i++){
			for(int j=0;j<a[0].length;j++){
				re[i][j]=a[i][j]+t[i][j];
			}
		}
		return new MyMatrix(re);
		
	}
	public MyMatrix times(MyMatrix B){
		double[][] t=B.a;
		int len=t.length;
		double[][] re =new double[len][len];
		for(int i=0;i<len;i++){
			for(int j=0;j<len;j++)
				for(int k=0;k<len;k++){
					re[i][j]=a[i][k]*t[k][j]+re[i][j];
				}
		}
		return new MyMatrix(re);
		
	}
	public MyMatrix transpose(){
//		double[][] b=new double[a[0].length][a.length];
//		for(int i=0;i<b.length;i++){
//			for(int j=0;j<a.length;j++){
//				b[i][j]=a[j][i];
//			}
//		}
		for(int i=0;i<a.length;i++){
		for(int j=i;j<a[0].length;j++){
			double k=a[i][j];
			a[i][j]=a[j][i];
			a[j][i]=k;
		}
	}
		return new MyMatrix(a);
	}
	
	
	public void print(int w,int d){
		System.out.println();
		String s="0.";
		for(int i=0;i<d;i++)
			s=s+"0";
		DecimalFormat df=new DecimalFormat(s);
		df.setMaximumFractionDigits(d);
		 for(int i=0;i<a.length;i++){
			  for(int j=0;j<a[i].length;j++){
				  System.out.print(df.format(a[i][j]));
				  for(int k=0;k<w;k++){
					  System.out.print(" ");
				  }
			  }
			  System.out.println();
		  }
		 System.out.println();
	}
	public static void main(String[] args) {
		double[][] a={{1,1,2},{1,1,3},{32,1,3}};
		MyMatrix mm=new MyMatrix(a);
		mm.print(5,5);
		System.out.println();
		
	MyMatrix m2=mm.transpose();
	m2.print(2, 2);
	System.out.println();
	
//	MyMatrix m3=mm.plus(m2);
//	m3.print(2, 3);
//	System.out.println();
//	
//	MyMatrix m4=mm.times(m2);
//	m4.print(2, 3);
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章