📄 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 + -