用于操作矩阵和向量叉积的 Python 程序

标签 python numpy matrix vector

我写了一个Python程序, 给定一个由 3 个向量 a1a2a3 组成的矩阵 a,它会计算一个矩阵 b 3 个向量 b1b2b3 的方式如下:

enter image description here

三重积(分母中)只是行列式。

为了检查程序是否正常工作,必须满足以下关系:

enter image description here

换句话说:

det(b) = 1/det(a)

在程序中我仔细地使用了cross和np array。但是,它不满足上述关系:

import numpy as np
from numpy import pi as pi

# 'a' matrix:
a = np.array([[ 0.291761097764E+01 , 0.000000000000E+00 , 0.574463427333E+01  ],
              [ -0.145880548882E+01 , 0.252672522500E+01 , 0.574463427333E+01  ],
              [ -0.145880548882E+01 ,-0.252672522500E+01 , 0.574463427333E+01  ]])

# 'a' vectors:
a_1 = [ 0.291761097764E+01 , 0.000000000000E+00 , 0.574463427333E+01  ]
a_2 = [ -0.145880548882E+01 , 0.252672522500E+01 , 0.574463427333E+01  ]
a_3 = [ -0.145880548882E+01 ,-0.252672522500E+01 , 0.574463427333E+01  ]

# volume of 'a' matrix:
V_a = np.linalg.det(a)
print 'V_a = ', V_a

cte = (2*pi)/V_a

VEC_1 = np.cross(a_2, a_3)
VEC_2 = np.cross(a_3, a_1)
VEC_3 = np.cross(a_1, a_2)

# calculation of 'b' vectors:
b_1 = cte * VEC_1
b_2 = cte * VEC_2
b_3 = cte * VEC_3

print  'b_1 = ',  b_1
print  'b_2 = ',  b_2
print  'b_3 = ',  b_3

# building 'b' matrix:
b = np.vstack ([  b_1 , b_2,  b_3 ])
print 'b = ', b

# volume of 'b' matrix:
V_b = np.linalg.det(b)
print 'V_b = ', V_b
print "1/V_a = ", 1/V_a

print "1/V_a should be equal to V_b; however, we do not get this equality"

编辑:最后显示的方程不正确。以下内容应该更准确:

enter image description here

最佳答案

您应该拥有的是 1/V_a=V_b/(8*pi**3) 而不是 1/V_a=V_b (因为您忽略了 2*pi 在打印屏幕的最后一个方程中),并且当您运行代码时,前者确实成立。

关于用于操作矩阵和向量叉积的 Python 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43645776/

相关文章:

python - 如何将 numpy 2D 数组广播到 6D 数组

python - NumPy ndarray 的绘制方式与等效列表不同?

Java:二维矩阵旋转不起作用

python - NumPy 中许多外积的总和

python - 根据另一列在 Pandas 数据框中创建一个新列

python - Vim 在我使用 Canopy1.1 时显示 : ImportError: No module named site.

python - 如何使用 H5py 在 python 3 中正确打开、读取和保存单个文件

c - C 中矩阵的维数

python - Pygame 窗口显示空白黑屏

python - Scrapy 未获取日期作为项目参数