Как выполнить матричное векторное умножение с sympy? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть:

  • вектор типа <class 'sympy.vector.vector.VectorMul'>
  • матрица типа <class 'sympy.matrices.dense.MutableDenseMatrix'>

Я хотел бы умножить матрицу на вектор, чтобы получить вектор.

Могу ли я выполнить этодля удобства или мне нужно сначала сделать некоторые дополнительные манипуляции?

Для справки я пытаюсь получить символический результат матрицы вращения, примененной к вектору.

Также ниже приведены некоторые измой код, который имеет дело с вышеупомянутой матрицей и вектором.

from sympy.vector import CoordSys3D

σ, θ, γ, λ, a, b, c = symbols('σ, θ, γ, λ, a, b, c, a_v, b_v, c_v')
σ = sin(θ)
γ = cos(θ)
λ = 1 - γ

N = CoordSys3D('N')
u = a*N.i + b*N.j + c*N.k # Axis of rotation

R = Matrix([
    [a*a*λ + γ, a*b*λ-c*σ, a*c*λ+b*σ],
    [b*a*λ+c*σ, b*b*λ + γ, b*c*λ-a*σ],
    [c*a*λ-b*σ, c*b*λ+a*σ, c*c*λ + γ],
])

# Input vector prior to rotation
v = a_v*N.i + b_v*N.j + c_v*N.k

# How to calculate the post rotation output vector w = Rv?

Итак, есть ли встроенный механизм в sympy для умножения матрицы на вектор?

1 Ответ

0 голосов
/ 20 февраля 2019

Хотя я не нашел функцию, которая делает то, что я хотел, этот код достиг того же результата.Я выкладываю это здесь на случай, если это будет полезно для других.

w = R * Matrix([v.coeff(N.i), v.coeff(N.j), v.coeff(N.k)])
...