jak wykreślić streamlines, gdy znam u I V składowe velocity(numpy 2D arrays), używając programu do kreślenia w Pythonie?

Mam nadzieję, że sam tytuł był dość jasny, rozwiązuję problem 2D z pokrywą napędzaną wnęką (kwadratową domeną) za pomocą metody ułamkowej, skończonej formuły różnicowej ( prymitywna zmienna forma Naviera-Stokesa), mam u I V składowe prędkości w całej domenie, bez ręcznego obliczania streamlines, czy jest jakieś polecenie lub narzędzie do kreślenia, które robi to zadanie dla mnie?

Mam nadzieję, że to pytanie jest wystarczająco istotne dla programowania, ponieważ potrzebuję narzędzia do kreślenia usprawnień bez wyraźnego ich wyliczenia.

Rozwiązałem ten sam problem w postaci stream-vorticity NS, po prostu musiałem wziąć Wykres konturowy funkcji stream, aby uzyskać streamlines.

Mam nadzieję, że to narzędzie lub ploter to biblioteka Pythona, a co więcej instalowalna w Fedorze (mogę iść na kompromis i używać minta)bez większego zamieszania!!

Byłbym wdzięczny, gdyby ktoś wskazał bibliotekę i odpowiednie polecenie (zaoszczędziłoby dużo czasu)

Author: imranal, 2011-11-28

3 answers

Spójrz na funkcję Toma Flannaghana streamplot . Odpowiedni wątek na liście użytkowników znajduje się tutaj , a także inny podobny fragment kodu Raya Speth, który robi rzeczy nieco inaczej.

Jeśli masz problemy z szybkością, bardziej wydajne może być użycie niektórych funkcji integracyjnych scipy zamiast funkcji integracyjnych pure-numpy użytych w obu tych przykładach. Nie próbowałem, ale te celowo unikają zależność od scipy. (scipy jest raczej dużą zależnością w porównaniu do numpy)

Z przykładowego wykresu:

import matplotlib.pyplot as plt
import numpy as np
from streamplot import streamplot

x = np.linspace(-3,3,100)
y = np.linspace(-3,3,100)
u = -1-x**2+y[:,np.newaxis]
v = 1+x-y[:,np.newaxis]**2
speed = np.sqrt(u*u + v*v)

plt.figure()
plt.subplot(121)
streamplot(x, y, u, v, density=1, INTEGRATOR='RK4', color='b')
plt.subplot(122)
streamplot(x, y, u, v, density=(1,1), INTEGRATOR='RK4', color=u,
           linewidth=5*speed/speed.max())
plt.show()

Tutaj wpisz opis obrazka

Inną opcją jest użycie VTK. Jest to przyspieszone kreślenie 3D, więc tworzenie wykresu 2D będzie wymagało prawidłowego ustawienia kamery (co nie jest zbyt trudne) i nie będzie można uzyskać wyjścia wektorowego.

Mayavi, tvtk i mlab dostarczają owijki pythoniczne dla VTK. Ma wiele funkcjonalności wzdłuż tych linii.

Najprostszy sposób na użyj VTK do wykreślenia linii z tablic numpy jest użycie mayavi.mlab.flow. Pominę przykład na chwilę, ale jeśli chcesz zbadać za pomocą VTK, aby to zrobić, mogę dodać jeden.

 22
Author: Joe Kington,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-29 16:07:08

W wersji 1.2 programu Matplotlib istnieje funkcja streamplot .

 4
Author: Charles Brunet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-19 19:21:11
 3
Author: ev-br,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-28 14:39:40