如何使用Sympy进行向量的点/交叉乘法

时间:2014-03-02 09:56:18

标签: python math sympy

我想知道怎么做

  • 点乘法
  • 交叉乘法
  • 添加/分

带有sympy库的载体。我试过查看官方文档,但我没有运气或者太复杂了。任何人都可以帮我解决这个问题吗?

我试图做这个简单的操作

a · b = |a| × |b| × cos(θ)

4 个答案:

答案 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