I tried to parameterize an arbitrary t vector with given bases ss with function linalg.solve:
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.]])
then do:
para = sp.linalg.solve(ss, t)
print para
print np.dot(ss, para) == t
I got:
[ 0.175 0. -0. 0.15 -0. 0. -0. 0.125 0. -0. -0.15 0. 0.025 -0. 0. 0.075]
[ True True True True True True True True True True True True True True True False]
Clearly it is not right... Why this False happens?
Looks like it's a rounding/numerical-approximation error: