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

Рассчитать скручивание векторного поля в Python и построить его с помощью matplotlib

В первом ответе

from sympy.physics.vector import ReferenceFrame
from sympy.physics.vector import curl
R = ReferenceFrame('R')
F = R[1]**2 * R[2] * R.x - R[0]*R[1] * R.y + R[2]**2 * R.z
G = curl(F, R) 

Теперь он печатает G, получает выражениядля компонентов поля скручивания вручную и назначает их как

u = 0
v = y**2
w = -2*y*z - y 

Как получить, u, v, w непосредственно из G, а не как вручную печатать и назначать? Что такое G? Можем ли мы преобразовать его в строку? Я не хочу строить, я просто хочу выражения для компонентов завитка.

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Как это?

>>> list(G.args[0][0])
[0, R_y**2, -2*R_y*R_z - R_y]

Или, используя атрибут varlist для R, мы можем заменить R_x на x и т. Д., Как

>>> u,v,w = G.args[0][0].subs(dict(zip(R.varlist, var('x:z'))))
>>> u, v, w
(0, y**2, -2*y*z - y)
0 голосов
/ 04 ноября 2019

Более подробно об ответе @smichr:

from sympy.abc import x, y, z
print(list(G.args[0][0].subs([(R[0], x), (R[1], y), (R[2], z)])))

В результате

[0, y**2, -2*y*z - y]

И

u, v, w = list(G.args[0][0].subs([(R[0], x), (R[1], y), (R[2], z)]))

получает все в той же форме, что иВаш вопрос.

PS: G.args дает аргументы верхнего уровня из G. print(G.args) можно использовать для изучения того, как он построен. В SymPy srepr() может помочь выяснить внутреннее представление символов.

PPS: по поводу вашего вопроса в комментариях:

R = ReferenceFrame('R')
P = y**2 *z
Q =- x*y
R = z**2
H = P* R.x +Q * R.y + RR* R.z

Не работает, потому чтоR = z**2 стирает R = ReferenceFrame('R'). Вы должны использовать разные имена переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...