`
鬼大来晚了
  • 浏览: 66240 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

java 求矩阵乘法及行列式的值

    博客分类:
  • Java
 
阅读更多
最近用到矩阵的数学计算,写了两个简单的程序,贴在这里:

1、矩阵的乘法:

/**
	 * 矩阵乘法
	 * @param a
	 * @param b
	 * @return
	 */
     public static double[][] mulMatrix(double[][] a,double[][] b){
    	 double[][] c=new double[a.length][b[0].length];
    	 //相乘的两个行列式需要满足,第一个行列式的列于第二个行列式的行相等
    	 if(a[0].length!=b.length){
    		 System.out.println("Wrong parameters.");
    		 return c;
    	 }
    	 //若A为mXn矩阵,B为nXp矩阵,返回一个mXp的矩阵
    	 for (int i = 0; i < c.length; i++) {
			for (int j = 0; j < c[0].length; j++) {
               for (int j2 = 0; j2 < a[0].length; j2++) {
				c[i][j]=c[i][j]+a[i][j2]*b[j2][j];
			}
			}
		}
    	 return c;
     }



2、递归方式求行列式的值

/**
	 * 计算行列式的值
	 * @param a
	 * @return
	 */
    static double determinant(double[][] a){
        double result2 = 0;
        if(a.length>2){
       	 //每次选择第一行展开
            for(int i=0;i<a[0].length;i++){
           	    //系数符号
                double f=Math.pow(-1,i);
                //求余子式
                double[][] yuzs=new double[a.length-1][a[0].length-1];
                for (int j = 0; j < yuzs.length; j++) {
					for (int j2 = 0; j2 < yuzs[0].length; j2++) {
						//去掉第一行,第i列之后的行列式即为余子式
						if(j2<i){
							yuzs[j][j2]=a[j+1][j2];
						}else {
							yuzs[j][j2]=a[j+1][j2+1];
						}
						
					}
				} 
                //行列式的拉普拉斯展开式,递归计算
                result2+=a[0][i]*determinant(yuzs)*f;
            }
        }
        else{
        	//两行两列的行列式使用公式
            if(a.length==2){
                result2=a[0][0]*a[1][1]-a[0][1]*a[1][0];
            }
            //单行行列式的值即为本身
            else{
                result2=a[0][0];
            }
        }
        return result2;
    }
	

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics