2017-01-28 67 views
0

我试图做(除其他之外)与矩阵计算。这就是我快要完成了。当矩阵中存在一个常量(不是矩阵)时,如何进行加法,矩阵乘法?

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 +增量)R [X,Y,Z]

我有一个很难可视化所述式(和正在不允许添加图片)。无论如何,无论在[]中是什么格式的矩阵: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 

正确:

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 ÿ :990625.8659 Z:5385201.6355 我也不太了解“swc.T”中的'T'。 – Nedim

+0

很高兴知道您已找到解决方案。实际上,你可以在不使用'np.matrix()'的情况下解决它,但建议使用它来检查结果。顺便说一下,'swc.T'是swc的转置。 – swatchai