2010-09-29 58 views
0

说明(这是一个问题HWK):代码来解决决定使用Python不使用scipy.linalg.det

我不知道在哪里可以从这里开始。我打算使用拉普拉斯的扩展,但我不知道如何实现它的nxn矩阵。任何帮助,将不胜感激。

注:我已经有一个函数产生一个n×n的矩阵随机矩阵。计算时间也不是问题。我遇到的唯一问题是如何计算行列式。

不得不删除我的阶级政策的问题,说明B/C。

+0

这不是一个真正的规划问题数组的数组。也许如果你提出一些代码,那么有人可以帮你纠正它。你有什么尝试? – aaronasterling 2010-09-29 07:22:56

+0

哦,是啊是的,我需要的是如何把这个转换成代码的策略。 – 2010-09-29 07:28:27

+1

男人,我认为你真的需要应用自己。这听起来像是给了我codez – Anycorn 2010-09-29 07:36:23

回答

3

好吧,这里有一个提示。

  1. 写一个函数来计算次要矩阵。 (提示,使用切片)
  2. 编写一个函数来计算辅助因子(这应该称为第一个函数和确定函数)确定函数调用第二步中的函数并将结果相加。 (提示:使用sum

中提琴,你有一个决定因素。

另外,不要忘记,因为这样,我们用Python语言编写的列表,指数得到逆转。也就是说,如果

M = [[1, 2, 3], 
    [4, 5, 6], 
    [7, 8, 9]] 

则M 0,1是2,而不是4,因为这将在正常符号。你可以把它想象成一个转置或使用zip

+0

那么对于索引,首先计算列,然后计算行数? – 2010-09-29 07:46:27

+0

@shagster否,首先是行然后是列。查看代码并思考它。 (至少对我来说,正常的方式是列,行)“首先你走下大厅,然后你走上电梯”)这里真的没什么意义,因为D(A^t)= D(A) – aaronasterling 2010-09-29 07:52:01

1

这里是用于找到矩阵行列式的adjucate方法的递归python代码。

def getMatrixMinor(m,i,j): 
    return [row[:j] + row[j+1:] for row in (m[:i]+m[i+1:])] 

def getMatrixDeternminant(m): 
    #base case for 2x2 matrix 
    if len(m) == 2: 
     return m[0][0]*m[1][1]-m[0][1]*m[1][0] 

    determinant = 0 
    for c in range(len(m)): 
     determinant += ((-1)**c)*m[0][c]*getMatrixDeternminant(getMatrixMinor(m,0,c)) 
    return determinant 

注意,输入是代表NxN矩阵