import numpy as np
x = np.array( [ [1,1,2], [1,2,3] ])
M00 = np.array(
[1,2,1], [2,3,4], [1,1,4](/dknife/Graduate2017_Autumn/wiki/1,2,1],-[2,3,4],-[1,1,4))
M01 = np.array(
[0,1,1], [1,0,1], [0,1,0](/dknife/Graduate2017_Autumn/wiki/0,1,1],-[1,0,1],-[0,1,0))
M10 = np.array(
[0,0,0], [0,3,0], [2,3,1](/dknife/Graduate2017_Autumn/wiki/0,0,0],-[0,3,0],-[2,3,1))
M11 = np.array(
[1,1,0], [0,3,0], [0,0,5](/dknife/Graduate2017_Autumn/wiki/1,1,0],-[0,3,0],-[0,0,5))
def convertLongVector(x) :
longX = np.zeros(shape=(len(x)*3,))
for i in range(0, len(x)) :
for j in range(0,3) :
longX[i*3+j] = x[i,j]
return longX
def set33SubMatrix(M, i, j, m) :
for row in range(0,3) :
for col in range(0,3) :
M[i*3+row, j*3+col] = m[row,col]
longX = convertLongVector(x)
bigM = np.zeros(shape=(len(x)*3, len(x)*3))
set33SubMatrix(bigM, 0,0, M00)
set33SubMatrix(bigM, 0,1, M01)
set33SubMatrix(bigM, 1,0, M10)
set33SubMatrix(bigM, 1,1, M11)
print(longX)
print(bigM)
b = bigM.dot(longX)
print(b)
Minv = np.linalg.inv(bigM)
print(Minv)
x = Minv.dot(b)
print(x)
[ 1. 1. 2. 1. 2. 3.]
[[ 1. 2. 1. 0. 1. 1.]
[ 2. 3. 4. 1. 0. 1.]
[ 1. 1. 4. 0. 1. 0.]
[ 0. 0. 0. 1. 1. 0.]
[ 0. 3. 0. 0. 3. 0.]
[ 2. 3. 1. 0. 0. 5.]]
[ 10. 17. 12. 3. 9. 22.]
[[ 3.09090909 -0.36363636 -0.27272727 0.36363636 -1.06060606 -0.54545455]
[-0.59090909 0.36363636 -0.22727273 -0.36363636 0.39393939 0.04545455]
[-0.77272727 0.09090909 0.31818182 -0.09090909 0.18181818 0.13636364]
[-0.59090909 0.36363636 -0.22727273 0.63636364 0.06060606 0.04545455]
[ 0.59090909 -0.36363636 0.22727273 0.36363636 -0.06060606 -0.04545455]
[-0.72727273 -0.09090909 0.18181818 0.09090909 0.15151515 0.36363636]]
[ 1. 1. 2. 1. 2. 3.]