我写了一个Python程序,
给定一个由 3 个向量 a1
、a2
、a3
组成的矩阵 a
,它会计算一个矩阵 b
3 个向量 b1
、b2
、b3
的方式如下:
三重积(分母中)只是行列式。
为了检查程序是否正常工作,必须满足以下关系:
换句话说:
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"
编辑:最后显示的方程不正确。以下内容应该更准确:
最佳答案
您应该拥有的是 1/V_a=V_b/(8*pi**3)
而不是 1/V_a=V_b
(因为您忽略了 2*pi
在打印屏幕的最后一个方程中),并且当您运行代码时,前者确实成立。
关于用于操作矩阵和向量叉积的 Python 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43645776/