使用带有大型方程组的numpy.linalg

时间:2015-05-14 17:29:05

标签: python numpy lapack

我试图使用numpy.linalg函数来解决一个庞大的线性方程组。

例如,我一直在尝试使用:

numpy.linalg.solve
numpy.linalg.cg
numpy.linalg.inv

其中,这些函数都没有返回任何内容。该计划似乎完全没有提出任何错误或警告。

为了演示,我有这段代码来创建我的 A 矩阵:

   import numpy
   from intertools import product

   indices = numpy.arange(x_steps * y_steps).reshape(x_steps, y_steps)
   a = numpy.zeros((x_steps * y_steps, x_steps * y_steps))
   for x, y in product(range(x_steps), range(y_steps)):
        neighbors_x = indices[x, max(0, y-1):y+2].flatten()
        neighbors_y = indices[max(0, x-1):x+2, y].flatten()
        current = indices[x, y]

        a[current, neighbors_x] = 1.0
        a[current, neighbors_y] = 1.0
        a[current, current] = -4.0

    h = (x_dim / x_steps) * (y_dim / y_steps)
    a /= h

使用x_dim = y_dim = 12x_steps = y_steps = 100

代码工作得很好。当我尝试计算det(A)时,我得到0.0144,这是正确的。

但系统永远不会被解决。 然后我尝试计算A的倒数:

print 'inv'
z = numpy.linalg.inv(a)
print 'here'

永远不会打印'here'根本不会出现错误。我看到第一个打印然后它出现在控制台程序完成代码0 。正如我所说,我试图用共轭梯度法解决系统,同样的情况也是如此。这很奇怪,因为我没有得到任何错误/警告来帮助我找出错误。

我强烈认为这是一个内存问题(我在64位Windows 8.1 - 4GB RAM中运行我的代码 - 32位Numpy - 64在这里产生了很多不兼容性但是我真的不知道是否有办法解决它。如果这是问题,Conjugate渐变方法应该不能解决这个问题,因为这是它的目的吗?

提前谢谢。

0 个答案:

没有答案