201702GraduateEx0501 - dknife/Graduate2017_Autumn GitHub Wiki


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.]