Симпи получить вектор из векторного поля - PullRequest
0 голосов
/ 13 мая 2018

Я использую sympy (который просто великолепен), и я только что создал векторное поле вот так

> import sympy
> from sympy.vector import CoordSys3D
> from sympy import *
> R = CoordSys3D('R')
> x, y, z, t = symbols('x y z t')
> v = x*R.i + 4*z*R.j + y*R.k
x*R.i + 4*z*R.j + y*R.k
> v.evalf(subs={x:6, y:5, z:2})
6.00000000000000*R.i + 8.00000000000000*R.j + 5.00000000000000*R.k

и что мне нужно, чтобы получить вектор или список формы [6.0,8.0,5.0], так есть ли способ получить форму списка v.evalf()? Я мог бы использовать use split или что-то еще на "6.00000000000000*R.i + 8.00000000000000*R.j + 5.00000000000000*R.k", но это выглядит ужасно, и, возможно, есть встроенный метод для этого

1 Ответ

0 голосов
/ 13 мая 2018
In [252]: vector = v.evalf(subs={x:6, y:5, z:2}); vector
Out[252]: 6.00000000000000*R.i + 8.00000000000000*R.j + 5.00000000000000*R.k

In [253]: list(vector.to_matrix(R))
Out[253]: [6.00000000000000, 8.00000000000000, 5.00000000000000]

Другие возможности включают

In [256]: vector.as_poly().coeffs()
Out[256]: [6.00000000000000, 8.00000000000000, 5.00000000000000]

In [257]: list(vector.components.values())
Out[257]: [5.00000000000000, 8.00000000000000, 6.00000000000000]

, но я думаю, что они страдают фатальным недостатком, который проявляется, когда один или несколько компонентов равны 0. Например, если zустановить в 0:

In [258]: vector = v.evalf(subs={x:6, y:5, z:0}); vector
Out[258]: 6.00000000000000*R.i + 5.00000000000000*R.k

Затем list(vector.to_matrix(R)) по-прежнему возвращает 3 компонента:

In [259]: list(vector.to_matrix(R))
Out[259]: [6.00000000000000, 0, 5.00000000000000]

, в то время как эти два других выражения опускают нулевой компонент:

In [260]: vector.as_poly().coeffs()
Out[260]: [6.00000000000000, 5.00000000000000]

In [261]: list(vector.components.values())
Out[261]: [5.00000000000000, 6.00000000000000]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...