Możesz użyć sympy.curl()
, aby obliczyć zwijanie pola wektorowego.
Przykład:
Załóżmy, że:
F = (Y oo, -xy, z) = Y z x - y xy + z z, następnie y
będzie R[1]
, x
jest R[0]
i z
jest R[2]
natomiast wektory 3 osi byłoby R.x
, R.y
, R.z
i kod obliczenie pola wektorowego wywinięcia to:
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)
W przypadku G byłby równy R_y**2*R.y + (-2*R_y*R_z - R_y)*R.z
lub, innymi słowy,
G = (0, y , -2yz-y).
Aby wykreślić to, należy przekonwertować powyższy wynik na 3 osobne funkcje; u, v, w.
(przykład poniżej zaadaptowany z matplotlib example on this link):
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
x, y, z = np.meshgrid(np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.8))
u = 0
v = y**2
w = -2*y*z - y
ax.quiver(x, y, z, u, v, w, length=0.1)
plt.show()
i ostateczny wynik jest taki:

Nie ma wbudowanej funkcji numpy lub scipy, aby obliczyć curl. Jeśli tak, będziesz musiał to napisać; w 3D wynik będzie również polem wektorowym, więc matplotlib kreśli je tak, jak w przykładzie. [Podobne pytanie dotyczące rozbieżności] (http://stackoverflow.com/questions/11435809/compute-divergence-of-vector-field-using-python) – cphlewis
Dzięki za odpowiedź. Ok, rozumiem, jak knuć. Czy masz jakieś sugestie dotyczące dobrego sposobu pisania funkcji zwijania? – gustavogrds
Może przydać się użycie Sympy (http://docs.sympy.org/dev/modules/physics/vector/fields.html). Ma wbudowaną funkcjonalność dla pól wektorowych. – Dietrich