np.linalg.solve没有给出正确的结果

时间:2015-06-25 04:30:23

标签: python scipy linear-algebra

我尝试使用函数linalg.solve的给定基数ss参数化任意t向量:

t = np.array([0.4, 0., 0., 0., 0., 0., 0., 0.3, 0., 0., 0., 0., 0.2, 0., 0., 0.1])
ss = np.array([[1.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  1.],
           [0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.],
           [0.,  0., -1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., -1.,  0.],
           [1.,  0.,  0.,  0.,  0.,  0.,  0., -1.,  0.,  0., -0.,  0.,  1.,  0.,  0., -1.],
           [0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.],
           [0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
           [0.,  0.,  0.,  0.,  0.,  0., -1.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.],
           [0.,  0.,  0.,  1.,  0.,  0.,  0., -0.,  0.,  0., -1.,  0.,  0.,  0.,  0., -0.],
           [0.,  0.,  0.,  0., -1.,  0.,  0.,  0.,  0.,  0.,  0., -1.,  0.,  0.,  0.,  0.],
           [0.,  0.,  0.,  0.,  0.,  0., -1.,  0.,  0., -1.,  0.,  0.,  0.,  0.,  0.,  0.],
           [0.,  0.,  0.,  0.,  0., -1., -0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
           [0.,  0.,  0.,  0., -1.,  0.,  0., -0.,  0.,  0.,  0.,  1.,  0.,  0.,  0., -0.],
           [1.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0., -1., -0.,  0., -1.],
           [0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., -0., -1.,  0., -0.],
           [0.,  0., -1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., -0.,  0.,  1., -0.],
           [1.,  0.,  0.,  0.,  0.,  0.,  0., -1.,  0.,  0., -0.,  0., -1., -0.,  0.,  1.]])

然后做:

para = sp.linalg.solve(ss, t)

print para

print np.dot(ss, para) == t

我得到了:

[0.175 0. -0。 0.15-0。 0. -0。 0.125 0. -0。 -0.15 0. 0.025 -0。 0. 0.075]

[真真真真真真真真真真真真真   真如此真假]

显然这是不对的......为什么会出现这种错误?

1 个答案:

答案 0 :(得分:0)

看起来它是一个舍入/数值逼近错误:

t[-1]
Out[493]: 0.10000000000000001

np.dot(ss,para)[-1]
Out[495]: 0.099999999999999964