31 lines
686 B
Go
31 lines
686 B
Go
|
package alg
|
||
|
|
||
|
import (
|
||
|
"zhimolostnova_anna_lab_6/util"
|
||
|
)
|
||
|
|
||
|
// Determinant Функция для вычисления детерминанта матрицы
|
||
|
func Determinant(matrix [][]float64) float64 {
|
||
|
size := len(matrix)
|
||
|
|
||
|
if size == 1 {
|
||
|
return matrix[0][0]
|
||
|
}
|
||
|
|
||
|
if size == 2 {
|
||
|
return matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0]
|
||
|
}
|
||
|
|
||
|
// Рекурсивное вычисление детерминанта по разложению по первой строке
|
||
|
det := 0.0
|
||
|
for j := 0; j < size; j++ {
|
||
|
subMatrix := util.GetMinor(matrix, j)
|
||
|
sign := 1
|
||
|
if j%2 != 0 {
|
||
|
sign = -1
|
||
|
}
|
||
|
det += float64(sign) * matrix[0][j] * Determinant(subMatrix)
|
||
|
}
|
||
|
return det
|
||
|
}
|