?? matrix.java
字號:
/*
*@(#)Matrix.java 2.0 2005/05/05
*
*清華大學 精密儀器與機械學系
*范燦升 fancansheng@163.com
*/
package algorithm;
/**
*這個類提供一些基本的矩陣運算。
*<p>隨著程序功能的加強,這個類需要不斷地擴展。
*@version 2.0, 2005/05/05
*@author 范燦升
*@see Modeling
*/
public class Matrix
{
/**
*對矩陣執行轉置運算。
*<p>該運行不會改變輸入矩陣。
*@param matrix 要進行轉置的矩陣。
*@return 轉置后的矩陣。如果輸入不是有效的矩陣,則返回null。
*/
public static double[][] transpose(double[][] matrix)
{
int i,j;
if(matrix==null)
return null;
int row=matrix.length;
for(i=0;i<row;i++)
{
if(matrix[i]==null)
return null;
}
int column=matrix[0].length;//檢查完才知道有沒有column
double[][] matrixT=new double[column][row];
for(i=0;i<row;i++)
{
for(j=0;j<column;j++)
matrixT[j][i]=matrix[i][j];
}
return matrixT;
}
/**
*對輸入的兩個矩陣執行乘法運算。
*@param m1 第一個矩陣
*@param m2 另一個矩陣
*@return 相乘后的矩陣。如果m1的列與m2的行數不相等,或者輸入不是有效的矩陣則返回null。
*/
public static double[][] product(double[][] m1,double[][] m2)
{
int i,j,k;
if(m1==null)
return null;
int row1=m1.length;
for(i=0;i<row1;i++)
{
if(m1[i]==null)
return null;
}
int column1=m1[0].length;
if(m2==null)
return null;
int row2=m2.length;
for(i=0;i<row2;i++)
{
if(m2[i]==null)
return null;
}
int column2=m2[0].length;
if(column1!=row2)
return null;
//該返回null的都返回了
double[][] prod=new double[row1][column2];
for(i=0;i<row1;i++)
{
for(j=0;j<column2;j++)
{
prod[i][j]=0;
for(k=0;k<column1;k++)
prod[i][j]+=(m1[i][k]*m2[k][j]);
}
}
return prod;
}
/**
*對輸入的兩個矩陣執行乘法運算。其中第二個參數為列向量。
*@param m1 第一個矩陣
*@param m2 另一個矩陣,是列向量。
*@return 相乘后的矩陣(列向量)。如果m1的列與m2的行數不相等,或者輸入不是有效的矩陣則返回null。
*/
public static double[] product(double[][] m1,double[] m2)
{
double[] prod=new double[m1.length];
//列向量
int i,j;
if(m1==null)
return null;
if(m1[0].length!=m2.length)
return null;
for(i=0;i<m1.length;i++)
{
prod[i]=0;
for(j=0;j<m2.length;j++)
prod[i]+=(m1[i][j]*m2[j]);
}
return prod;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -