Обратный расчет матрицы в Python - PullRequest
0 голосов
/ 30 января 2019

Мне нужно сделать обратный расчет матрицы, заданный:

rotation=np.matrix([[1, 0, 0, 0], [0, math.cos(4*math.radians(a)), math.sin(4*math.radians(a)), 0], [0, math.sin(4 * math.radians(a)), -math.cos(4 * math.radians(a)), 0], [0, 0, 0, -1]])
a=60

X=np.matrix('1 ;-1 ;0 ;0')

a1=rotation*X

a1=[[ 1.       ]
 [ 0.5      ]
 [ 0.8660254]
 [ 0.       ]]

Можно ли выполнить обратный расчет, чтобы найти значение a, учитывая rotation и x?

Спасибо.

1 Ответ

0 голосов
/ 30 января 2019

если я правильно угадываю, вы имеете в виду следующее:

сначала ваша матрица не является матрицей вращения ;знак не в том месте ...

тогда я буду игнорировать коэффициент 4;вы можете сами это вставить.

import numpy as np
from numpy.linalg import norm
from numpy import dot, cos, sin, arccos

x = np.array((1, -1, 0, 0))
y = np.array((1, 0.5, 0.8660254, 0))

# just considering indices 1 and 2
cos_a = dot(x[1:3], y[1:3])/(norm(x[1:3]) * norm(y[1:3]))

a_rad = arccos(cos_a)
a_deg = np.rad2deg(a_rad)

print(a_deg)  # 120

и проверить, что (правильный) бротинг действительно воспроизводит y:

rot = np.array((
    (1, 0, 0 , 0),
    (0, cos(a_rad), -sin(a_rad), 0),
    (0, sin(a_rad), cos(a_rad), 0),
    (0, 0, 0, 1))
)

print(dot(rot, x))  # [ 1.         0.5       -0.8660254  0.       ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...