開發一個矩陣運算的 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);
}
}