我写了一个python程序,
给定一个由3个向量a1
、a2
、a3
组成的矩阵b
,计算方法如下:
三乘(分母)只是行列式。在
为了满足工作程序的要求:
换句话说:
{cd9}
在这个程序中,我仔细地使用了cross
和nparray
。但不满足上述关系:
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
(因为您忽略了printscreen中最后一个等式中的2*pi
),当您运行代码时,前者确实有效。在相关问题 更多 >
编程相关推荐