第乙個jar包 矩陣行列式求解

2021-08-19 23:02:26 字數 1698 閱讀 7591

第一次寫自己的部落格,專案有乙個簡單的專案需求,需要用到大量的矩陣運算,因此寫了乙個簡單的矩陣求解類。

這裡貼上第一塊,如何求解行列式的值。

行列式的求解直接利用了定義,乙個矩陣的行列式可以表示為 |a| =∑( -1)^(j) * a0j * |m|, 其中, j 表示第0行第j列,a0j表示第0行第j個元素,m表示a0j的代數余子式,基於該公式,編寫矩陣行列式求解的**。

可以看到,代數余子式也是乙個矩陣,因此,很容易想到用遞迴的方法進行求解,這裡貼上遞迴求解**

/**計算a行列式的結果,採用遞迴方式

* @param a 行列式

* @param length a行列式的行數

* @return

*/public double get_determinant(double a,int length)

double result = 0;

//子行列式不是2*2矩陣

//b矩陣為a[0][j]的子矩陣

double b = new double[length - 1][length - 1];

for(int i = 0; i < length; i++)

b = get_submatrix(a, 0, i, length);

result = result + math.pow(-1,i) * a[0][i] * get_determinant(b,length - 1);

} return result;

}

在該函式中,需要獲取不同a0j對應的代數余子式
/**獲取當前矩陣某個元素的子矩陣

* @param a 當前矩陣

* @param m 第m行

* @param n 第n列

* @param length 矩陣的行

* @return 子矩陣

*/public double get_submatrix(double a, int m, int n, int length)

i_b++;

j_b = 0;

} return b;

}

最後,就是呼叫get_determinant函式,進行計算,所有的計算均以第一行為計算行,因此,我們要分別求第一行元素乘其代數余子式對應的值,**如下:

/**計算行列式

* @param a 要求解的矩陣

* @return 行列式的結果

*/public double get_result(double a)

int length = a.length;

//如果是二維的話可以直接返回結果

if(length == 2)

double result = 0; //行列式的值

double b = new double[length][length];

for(int i = 0; i < length; i++)

result = result + math.pow(-1,i) * a[0][i] * get_determinant(b,length - 1);

} return result;

}

最後,直接呼叫get_result,就可以獲得當前矩陣的行列式的值了,當然,為了保證計算過程無錯,在進行計算前,先判斷該矩陣是否為n*n矩陣,如果不是,則直接返回null

關於行列式的乙個猜想

對於乙個方陣 begin a left begin a a cdots a a a cdots a vdots vdots ddots vdots a a cdots a end right end 用 a i 來表示方陣 a 中第 i 個列向量。取n維空間中的一組單位正交基 boldsymbol,...

求矩陣行列式以及其他一些東西

嘛。因為一道水題做不出來而被大佬鄙視的我決定讓計算機來做 我不信大佬還能夠有計算機快2333 稍微寫了點 實現了求行列式的功能。如果有時間的話說不定會把求逆也給碼了 咕咕咕 include includeusing namespace std void input double a,int n,in...

Leetcode 求缺失的第乙個正數

求缺失的第乙個正數 給定乙個未排序的整數陣列,找出其中沒有出現的最小的正整數。示例 1 輸入 1,2,0 輸出 3 示例 2 輸入 3,4,1,1 輸出 2 示例 3 輸入 7,8,9,11,12 輸出 1 說明 你的演算法的時間複雜度應為o n 並且只能使用常數級別的空間。思路 盡可能地把陣列中不...