Как рассчитать скалярное произведение в симплектном векторе? - PullRequest
0 голосов
/ 03 мая 2020

Довольно простой вопрос:

from sympy.vector import Vector
v = Vector(0, 2, 1)
print(2*v)

Ожидаемый результат: Vector (0, 4, 2)

Я не могу найти, как это сделать, документы не говорят о скалярное произведение.

Ответы [ 2 ]

1 голос
/ 03 мая 2020

Матрица понимает скалярное умножение, но не вектор. Так что либо конвертируйте назад и вперед между Matrix и Vector, подайте запрос на функцию и дождитесь возможного улучшения, либо напишите свою собственную подпрограмму __mul__ и __rmul__ (часть красоты Python):

>>> v.func(*Matrix(v.args)*2)
Vector(0, 4, 2)
>>> Vector.__rmul__ = Vector.__mul__ = lambda s,o: s.func(*[i*o for i in s.args])
>>> 2*v
Vector(0, 4, 2)
>>> v*2
Vector(0, 4, 2)
1 голос
/ 03 мая 2020

Я думаю, что ожидаемый способ работы с векторами - создать систему координат и использовать ее базис i, j, k:

In [32]: from sympy.vector import CoordSys3D                                                                                                   

In [33]: N = CoordSys3D('N')                                                                                                                   

In [34]: v = 2*N.j + N.k                                                                                                                       

In [35]: v                                                                                                                                     
Out[35]: 2*N.j + N.k

In [36]: 2*v                                                                                                                                   
Out[36]: 4*N.j + 2*N.k
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...