浮点算法-计算行列式

时间:2018-08-19 08:42:08

标签: python determinants

我正在尝试使用高斯消除技术在Python中计算以下矩阵的行列式:([[5,3,2],[9,6,6],[3,2,2]]

一切正常,直到我需要计算mat [2] [2]位置中的值。

使mat [2] [1]为零的系数为(1/5)/(3/5)= 1/3。那给了我0.333333333333 当我计算mat [2] [1]时,一切正常,给我零。 但是当我计算出mat [2] [2]的位置时,计算结果为:

mat[2][2] = mat[2][2] - Coefficient * mat[1][2]
mat[2][2] = 0.8 - 2.4 * 0.333333333333
mat[2][2] = 0.8 - 0.8 = -1.11022302e-15

为什么这不是零?

当我在矩阵外部进行计算时,它的效果很好:

x =(0.2 / 0.6)*(12./5)#x = 0.8

y =(4./5。)-x#y = 0.0

代码如下:

import numpy as np

def det(mat):
    if mat.shape[0] != mat.shape[1]:
        return "no square matrix "
    n = (int)(mat.shape[0])
    a = np.copy(mat)
    a = a.astype(float)
    for k in range(0,n-1):
        for i in range(k+1, n, ):
            co = a[i][k]/(a[k][k])
            a[i, k:n] = a[i, k:n] - co * a[k, k:n]

    return a


#main

mat = np.array([[5,3,2],[9,6,6] ,[3,2,2]])
deter = det(mat)
print deter

0 个答案:

没有答案