我想知道怎么做
带有sympy库的载体。我试过查看官方文档,但我没有运气或者太复杂了。任何人都可以帮我解决这个问题吗?
我试图做这个简单的操作
a · b = |a| × |b| × cos(θ)
答案 0 :(得分:3)
numpy
就是为此而设计的,它是一种干净,快速的数字计算方法,因为它是用C语言实现的。
In [36]: x = [1, 2, 3]
...: y = [4, 5, 6]
In [37]: import numpy as np
...: print np.dot(x, y)
...: print np.cross(x, y)
...: print np.add(x, y) #np.subtract, etc.
32
[-3 6 -3]
[5 7 9]
Google群组中有discussion on numpy and sympy。
答案 1 :(得分:2)
http://docs.sympy.org/0.7.2/modules/physics/mechanics/api/functions.html
这里有一些示例和一些代码。究竟你不明白什么?也许,试着更具体一点。
在您编写它时的点乘法在文档中用该示例进行了解释:
from sympy.physics.mechanics import ReferenceFrame, Vector, dot
from sympy import symbols
q1 = symbols('q1')
N = ReferenceFrame('N') # so, ||x|| = ||y|| = ||z|| = 1
dot(N.x, N.x)
1 # it is ||N.x||*||N.y||*cos(Nx,Ny)
dot(N.x, N.y)
0 # it is ||N.x||*||N.y||*cos(Nx,Ny)
A = N.orientnew('A', 'Axis', [q1, N.x])
dot(N.y, A.y)
cos(q1)
另外,您可能会考虑使用numpy ......
答案 2 :(得分:1)
要使用sympy
进行矢量点/叉积乘法,必须导入基矢量对象CoordSys3D
。以下是一个工作代码示例:
from sympy.vector import CoordSys3D
N = CoordSys3D('N')
v1 = 2*N.i+3*N.j-N.k
v2 = N.i-4*N.j+N.k
v1.dot(v2)
v1.cross(v2)
#Alternately, can also do
v1 & v2
v1 ^ v2
请注意sympy
文档不推荐最后两行。最好明确使用这些方法。我个人认为这是一个偏好的问题。
答案 3 :(得分:0)
您可以按照以下说明进行操作:https://docs.sympy.org/latest/modules/matrices/matrices.html?highlight=cross#sympy.matrices.matrices.MatrixBase.cross
例如:
>>> from sympy import Matrix
>>> M = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> v = Matrix([1, 1, 1])
>>> M.row(0).dot(v)
6
>>> M.col(0).dot(v)
12
>>> v = [3, 2, 1]
>>> M.row(0).dot(v)
10