java实现N阶行列式求解

import java.text.DecimalFormat;

/***
 * N阶行列式求解
 * @author imlilu
 *
 */
public class Test {

	public static void main(String[] args) {
//		double[][] test = {{2,1,-1},{4,-1,1},{201,102,-99}}; 			结果为-18
//		double[][] test = {{1,1,-1,3},{-1,-1,2,1},{2,5,2,4},{1,2,3,2}};  结果为33
//		double[][] test = {{1,0,-1,2},{-2,1,3,1},{0,1,0,-1},{1,3,4,-2}}; 结果为31
		//结果为12
		double[][] test = {{1,-1,2,-3,1},{-3,3,-7,9,-5},{2,0,4,-2,1},{3,-5,7,-14,6},{4,-4,10,-10,2}};
		double result;
		try {
			result = mathDeterminantCalculation(test);
			System.out.println(result);
		} catch (Exception e) {
			System.out.println("不是正确的行列式!!");
		}
	}
	
	/***
	 * 求行列式的算法
	 * @param value 需要算的行列式
	 * @return 计算的结果
	 */
	public static double mathDeterminantCalculation(double[][] value) throws Exception{
		if (value.length == 1) {
			//当行列式为1阶的时候就直接返回本身
			return value[0][0];
		}else if (value.length == 2) {
			//如果行列式为二阶的时候直接进行计算
			return value[0][0]*value[1][1]-value[0][1]*value[1][0];
		}
		//当行列式的阶数大于2时
		double result = 1;
		for (int i = 0; i < value.length; i++) {       
			//检查数组对角线位置的数值是否是0,如果是零则对该数组进行调换,查找到一行不为0的进行调换
			if (value[i][i] == 0) {
				value = changeDeterminantNoZero(value,i,i);
				result*=-1;
			}
			for (int j = 0; j 


你可能感兴趣的:(Java,java,class,N阶行列式)