gpt4 book ai didi

python - 使用 sympy 和 numpy 更改数组索引的问题

转载 作者:太空宇宙 更新时间:2023-11-03 21:00:15 24 4
gpt4 key购买 nike

我有一个程序,应该输出绕任意轴旋转任意角度的旋转矩阵。我从一个空白的 3x3 numpy 数组开始。我使用嵌套循环遍历数组的每个元素,并根据 this awesome method 设置值。 .

在 sympy 中我使用 KroneckerDelta 和 LeviCivita,在 numpy 中我使用数组。

在我的代码中,我包含了我使用的故障排除方法。该程序的每一步行为都与我预期的完全一样,只是它似乎只是没有将值添加到组件中。更令人困惑的是,它适用于 theta=pi。

有人能发现我的愚蠢错误吗?

from numpy import array, ndarray, outer, dot, cross, array_equal, identity
from numpy import concatenate, zeros
from numpy import sin, cos, tan, arcsin, arccos, arctan, exp
from numpy.linalg import norm, inv
from numpy import pi, sqrt, arange
from sympy import KroneckerDelta, LeviCivita


def RotationMatrix(axis, angle):

axis = axis / norm( axis )
R = array([[0,0,0],[0,0,0],[0,0,0]])

for i in range(0,3):
for j in range(0,3):
R[i,j] += int(cos(angle)) * int(KroneckerDelta(i,j))
R[i,j] += (1-cos(angle)) * axis[i] * axis[j]
for k in range(0,3):
#R[i,j] -= sin(angle) * axis[k] * LeviCivita(i,j,k)
print(KroneckerDelta(i,j),LeviCivita(i,j,k),i,j,axis[i],axis[j],cos(angle),sin(angle))
print(R)

return R

最佳答案

不确定哪个编辑造成了差异,但我做了以下操作:

-使用 numpy.zeros 而不是手工制作一个零数组

- 使用虚拟变量“Temp”临时保存要保存的值 添加到旋转矩阵

这是最终的代码:

#-v- You input an axis of rotation and an angle of rotation
# this outputs the corresponding rotation matrix
def RotationMatrix(axis, angle):

Temp = 0
axis = Normalized( axis )
R = zeros((3,3))#array([[0,0,0],[0,0,0],[0,0,0]])

for i in range(0,3):
for j in range(0,3):
Temp += cos(angle) * KroneckerDelta(i,j)
Temp += (1-cos(angle)) * axis[i] * axis[j]
R[i,j] = R[i,j] + Temp
Temp = 0
for k in range(0,3):
Temp -= sin(angle) * axis[k] * LeviCivita(i,j,k)
R[i,j] = R[i,j] + Temp
Temp = 0

return R
#-^-

关于python - 使用 sympy 和 numpy 更改数组索引的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55755230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com