2017-01-28 39 views
0

Im пытается сделать (между прочим) вычисления с матрицами. Это я почти готов.Как сделать сложение, умножение с матрицами, когда есть константа (а не в матрице)?

deltaX = -419.375 
deltaY = -99.352 
deltaZ = -591.349 

deltaXYZ = np.array([deltaX,deltaY,deltaZ]).reshape(3,1) 

omegaX = 0.850458 
omegaY = 1.817245 
omegaZ= -7.862245 

omegaXR=radians(omegaX/3600) 
omegaYR=radians(omegaY/3600) 
omegaZR=radians(omegaZ/3600) 

delta = (0.99496/(10**6)) 

x = 3240036.3696 
y = 990578.5272 
z = 5385763.1648 

swerefkoordinates = np.array([x,y,z]).reshape(3,1) 

rZ=np.array([cos(omegaZR),sin(omegaZR),0,-sin(omegaZR),cos(omegaZR),0,0,0,1]).reshape(3,3) 

rY=np.array([cos(omegaYR),0,-sin(omegaYR),0,1,0,sin(omegaYR),0,cos(omegaYR)]).reshape(3,3) 

rX=np.array([1,0,0,0,cos(omegaXR),sin(omegaXR),0,-sin(omegaXR),cos(omegaXR)]).reshape(3,3) 

R=np.dot(rZ,rY,rX) 

До сих пор так хорошо

Это следующая строка вычислений дает мне некоторые проблемы, хотя и тем, что я имею в виду неправильный ответ.

RR92 = deltaXYZ+(delta+1)*np.dot(R,swerefkoordinates) 

То, что я пытаюсь сделать, это следующая формула (RR92).

[XYZ] = [DeltaX, deltaY, deltaZ] + (1 + дельта) [х, у, г]

Я с трудом визуализацией формулу (и я не допускается чтобы добавить фотографии). В любом случае все, что находится в [], является матрицей, отформатированной: 3 строки по одному столбцу.

+0

Что вы хотите знать прямой ответ? – swatchai

+0

Это было бы: [+3240036,3696 990578,5272 +5385763,1648] (в матрице, конечно) – Nedim

ответ

0

мне удалось решить эту проблему:

from math import * 
from numpy import * 
import numpy as np 

deltaX = -419.375 
deltaY = -99.352 
deltaZ = -591.349 

deltaXYZ = np.matrix([[deltaX],[deltaY],[deltaZ]]) 

omegaX = 0.850458 
omegaY = 1.817245 
omegaZ= -7.862245 

omegaXR=radians(omegaX/3600) 
omegaYR=radians(omegaY/3600) 
omegaZR=radians(omegaZ/3600) 

delta = (0.99496/(10**6)) 

x = 3240036.3696 
y = 990578.5272 
z = 5385763.1648 

swc = np.matrix([[x],[y],[z]]) 

#Rotationsmatrix for Z 
rZ=np.matrix([[cos(omegaZR),sin(omegaZR),0],[-sin(omegaZR),cos(omegaZR),0],[0,0,1]]) 

#Rotationsmatrix for Y 
rY=np.matrix([[cos(omegaYR),0,-sin(omegaYR)],[0,1,0],[sin(omegaYR),0,cos(omegaYR)]]) 

#Rotationsmatrix for X 
rX=np.matrix([[1,0,0],[0,cos(omegaXR),sin(omegaXR)],[0,-sin(omegaXR),cos(omegaXR)]]).reshape(3,3) 

R=rZ*rY*rX 

#calculation 
RR92 = deltaXYZ + (delta+1) * (R*swc) 

print RR92 

Correct:

3239535.0069 990625.8659 5385201.6355

0

Для быстрого результата, преобразовать np.array в матрицу и сделать вычисления следующим образом:

import numpy as np 
from numpy import radians, cos, sin, matrix 

deltaX = -419.375 
deltaY = -99.352 
deltaZ = -591.349 

deltaXYZ = np.array([deltaX,deltaY,deltaZ]).reshape(3,1) 
delXYZ = matrix(deltaXYZ) # matrix 

omegaX = 0.850458 
omegaY = 1.817245 
omegaZ= -7.862245 

omegaXR=radians(omegaX/3600) 
omegaYR=radians(omegaY/3600) 
omegaZR=radians(omegaZ/3600) 

delta = (0.99496/(10**6)) 

x = 3240036.3696 
y = 990578.5272 
z = 5385763.1648 

swerefkoordinates = np.array([x,y,z]).reshape(1,3) # 3*1 
swc = matrix(swerefkoordinates) # matrix 

rZ=np.array([cos(omegaZR),sin(omegaZR),0,-  sin(omegaZR),cos(omegaZR),0,0,0,1]).reshape(3,3) 

rY=np.array([cos(omegaYR),0,-sin(omegaYR),0,1,0,sin(omegaYR),0,cos(omegaYR)]).reshape(3,3) 

rX=np.array([1,0,0,0,cos(omegaXR),sin(omegaXR),0,-sin(omegaXR),cos(omegaXR)]).reshape(3,3) 

R=np.dot(rZ,rY,rX) 
mR = matrix(R) # matrix 

# finally, 
RR92 = delXYZ + (delta+1) * (mR*swc.T) # matrix operatoionz 
RR92 

# Output 
# matrix([[ 3239535.00769073], 
#  [ 990603.65962255], 
#  [ 5385205.71977643]]) 
+0

Изменение массивов матриц кажется хорошей идеей, однако ответ до сих пор не так, он должен быть: X: +3239535,0069 Y : 990625.8659 Z: 5385201.6355 Также я не понимаю «Т» в «swc.T». – Nedim

+0

Полезно знать, что вы нашли решение. Фактически, вы можете решить эту проблему, не используя 'np.matrix()', но ее использование рекомендуется для проверки результата. Кстати, 'swc.T' - это транспонирование swc. – swatchai

 Смежные вопросы

  • Нет связанных вопросов^_^