我试图使用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 = 12
和x_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渐变方法应该不能解决这个问题,因为这是它的目的吗?
提前谢谢。