W pracy z biblioteką NumPy w Pythonie istotnym krokiem jest zrozumienie, jak tworzyć tablice, jak różne funkcje umożliwiają manipulację ich danymi, a także jak uzyskać dostęp do właściwości tych tablic. Tablice NumPy stanowią fundament obliczeń numerycznych i są niezwykle wydajne w porównaniu do standardowych list Pythona. W tej części omówimy podstawowe metody tworzenia tablic NumPy, a także funkcje i operacje matematyczne, które pozwalają na ich obróbkę.
Wszystkie tablice NumPy są jednorodne, co oznacza, że każdy element w tablicy ma ten sam typ danych. Aby stworzyć tablicę NumPy, najczęściej używamy funkcji np.array(), która zamienia listy Pythona lub inne sekwencje danych na tablicę NumPy. Istnieje jednak wiele innych funkcji, które umożliwiają tworzenie tablic o określonych właściwościach. Na przykład:
-
np.arange(start, stop, step) – Tworzy jednowymiarową tablicę z wartościami od
startdostop, z krokiem równymstep, nie włączając wartościstop. Jest to odpowiednik funkcjirangew Pythonie, ale zwraca tablicę NumPy. -
np.linspace(start, stop, N) – Tworzy tablicę jednowymiarową o długości
Nzawierającą wartości odstartdostopwłącznie. Działa to nieco inaczej niżnp.arange(), ponieważ nie podajemy kroku, ale zamiast tego określamy liczbę punktów, jakie mają się znaleźć w tablicy. -
np.zeros(shape) – Tworzy tablicę o podanym kształcie, wypełnioną zerami. Przykładowo,
np.zeros(5)tworzy tablicę jednowymiarową zawierającą pięć zer, anp.zeros([2,1])tworzy tablicę dwuwymiarową o dwóch wierszach i jednej kolumnie. -
np.ones(shape) – Tworzy tablicę o podanym kształcie, wypełnioną jedynkami.
-
np.random.random(shape) – Tworzy tablicę o podanym kształcie, wypełnioną losowymi liczbami zmiennoprzecinkowymi z przedziału (0, 1).
Przykład 1 ilustruje sposób użycia powyższych funkcji do tworzenia różnych typów tablic.
Wynik tego kodu pokazuje, jak różne funkcje mogą generować tablice o różnych właściwościach. Ważne jest, że różne funkcje pozwalają na szybkie tworzenie tablic o określonej długości, kształcie, czy też wypełnione różnymi typami danych, co znacząco ułatwia dalszą obróbkę.
Po utworzeniu tablicy NumPy, możemy zacząć manipulować jej danymi, wykonując na niej różnorodne operacje. Wszystkie elementy w tablicach NumPy mają ten sam typ danych, co umożliwia łatwiejsze wykonywanie operacji matematycznych na tablicach. Możemy na przykład wykonać operacje arytmetyczne takie jak dodawanie, odejmowanie, mnożenie czy dzielenie, a także skorzystać z funkcji matematycznych jak np. sinus (np.sin()) czy logarytm (np.log()).
Tablice NumPy posiadają także szereg właściwości, które pozwalają na lepsze zrozumienie ich struktury. Do najważniejszych z nich należą:
-
A.dtype – Typ danych tablicy. Na przykład, dla tablicy liczb całkowitych może to być
int32, dla zmiennoprzecinkowych liczbfloat64. -
A.ndim – Liczba wymiarów tablicy. Może to być na przykład
1dla tablicy jednowymiarowej (wektora),2dla tablicy dwuwymiarowej (macierzy), itd. -
A.size – Całkowita liczba elementów w tablicy.
-
A.shape – Kształt tablicy, czyli liczba wierszy i kolumn (dla tablicy dwuwymiarowej).
Aby na przykład poznać liczbę wymiarów tablicy A, wystarczy użyć A.ndim, a liczba elementów w tablicy to A.size. Jeśli chcemy sprawdzić kształt tablicy, używamy A.shape, co pozwala uzyskać wymiary w postaci krotki (np. (2, 3) dla tablicy o dwóch wierszach i trzech kolumnach).
Po zrozumieniu tych podstawowych zasad, możemy przejść do bardziej zaawansowanych operacji. NumPy umożliwia wydajne wykonywanie operacji matematycznych na dużych zbiorach danych dzięki wektoryzacji. Oznacza to, że funkcje NumPy są stosowane do każdego elementu tablicy automatycznie, bez potrzeby stosowania pętli. Przykładem takiej funkcji może być obliczenie funkcji trygonometrycznych, jak np.sin() dla każdej liczby w tablicy, co jest szybkie i efektywne.
Z kolei przy pracy z większymi zbiorami danych warto zwrócić uwagę na operacje macierzowe, które są podstawą wielu zaawansowanych algorytmów numerycznych, szczególnie w dziedzinie uczenia maszynowego i analizy danych.
Pamiętajmy również, że funkcje NumPy są zoptymalizowane pod kątem wydajności i potrafią wykorzystywać specyficzne mechanizmy komputerowe do obliczeń na tablicach. Dzięki temu, NumPy jest niezastąpionym narzędziem do pracy z dużymi zbiorami danych i obliczeniami numerycznymi.
Jak obliczyć gradient, dywergencję i rotację w układzie współrzędnych cylindrycznych?
W analizie wektoralnej, gradient, dywergencja i rotacja są fundamentalnymi pojęciami, które pozwalają na opis i analizę zmian pola wektorowego lub skalarnego w przestrzeni. Dla układów współrzędnych cylindrycznych, takich jak układ (ρ, θ, z), obliczenia tych operatorów różniczkowych przybierają specjalną formę, którą warto dokładnie poznać, aby poprawnie stosować je w praktyce, zwłaszcza w fizyce i inżynierii.
W układzie współrzędnych cylindrycznych, zmienne ρ, θ i z reprezentują odpowiednio promień, kąt i wysokość. Odpowiadające im wektory jednostkowe to ρ̂, θ̂ i ẑ. Te parametry są szczególnie użyteczne w przypadku analizowania zagadnień, które posiadają pewną symetrię cylindryczną, takich jak przepływy płynów czy pole elektromagnetyczne.
Przykład obliczenia gradientu w tym układzie możemy przedstawić za pomocą kodu w Pythonie, wykorzystując bibliotekę SymPy. Jeśli mamy skalarne pole f w układzie cylindrycznym, takie jak f = ρ sin(θ) cos(z), gradient tego pola oblicza się następująco:
W wyniku tego obliczenia, gradient tego skalaru w układzie cylindrycznym będzie miał postać:
Wartości poszczególnych komponentów gradientu można uzyskać przez wywołanie odpowiednich funkcji, które zwrócą skalarne współczynniki przy wektorach jednostkowych ρ̂, θ̂ i ẑ.
Ważnym aspektem przy obliczaniu gradientu w układzie cylindrycznym jest zrozumienie, że wektory jednostkowe w tym układzie zmieniają się w zależności od wartości kąta θ i zmiennej promienia ρ. W związku z tym gradient, dywergencja oraz rotacja muszą być traktowane zgodnie z tymi zależnościami, aby poprawnie odwzorować fizyczne procesy w tym układzie współrzędnych.
Gradient jest operatorem różniczkowym, który stosujemy do funkcji skalarnej, aby uzyskać pole wektorowe wskazujące kierunek najszybszej zmiany tej funkcji. W kontekście fizyki, gradient może odpowiadać na przykład za kierunek, w którym rośnie potencjał elektryczny lub temperatury w danym punkcie przestrzeni.
Z kolei operator dywergencji odnosi się do zmiany objętościowego strumienia wektora w przestrzeni. Dla dowolnego wektora v = v_x \hat{i} + v_y \hat{j} + v_z \hat{k}, dywergencja jest obliczana jako suma pochodnych cząstkowych składników tego wektora względem odpowiednich współrzędnych:
Dywergencja jest często stosowana w takich dziedzinach jak dynamika płynów czy elektromagnetyzm. Może służyć do określenia, czy w danym punkcie przestrzeni znajduje się źródło (dywergencja > 0) lub zlewisko (dywergencja < 0). Na przykład, w przypadku przepływu powietrza, obszar podgrzewany będzie miał dodatnią dywergencję, ponieważ powietrze będzie rozprzestrzeniać się na zewnątrz.
Oprócz gradientu i dywergencji, ważnym pojęciem jest także rotacja wektora. Rotacja wektora w przestrzeni trójwymiarowej wskazuje, jak "skręca" się pole wektorowe wokół pewnego punktu. Jest obliczana jako iloczyn wektora del i pola wektorowego, co daje wynik będący polem wektorowym, które wskazuje kierunek osi obrotu i miarę tego obrotu.
W przypadku układu cylindrycznego, rotacja również przyjmuje określoną formę. W obliczeniach rotacji w układzie cylindrycznym ważne jest uwzględnienie zmiany orientacji jednostkowych wektorów ρ̂, θ̂, ẑ, co czyni obliczenia bardziej złożonymi, ale równocześnie bardziej adekwatnymi do fizycznych procesów cylindrycznych.
Kluczową właściwością operatorów gradientu, dywergencji i rotacji w układzie cylindrycznym jest ich zdolność do modelowania zjawisk o symetrii cylindrycznej, takich jak pole elektromagnetyczne wokół przewodnika czy rozprzestrzenianie się fal w cylindrycznych strukturach. Warto również zauważyć, że te operatory mają swoje odpowiedniki w innych układach współrzędnych, takich jak współrzędne sferyczne, gdzie formy obliczeń są podobne, ale z uwzględnieniem innego układu geometrycznego.
Ostatecznie, zrozumienie tych operatorów w układzie cylindrycznym jest niezbędne do pełnego opanowania analizy wektoralnej w kontekście problemów, które posiadają symetrię cylindryczną. Należy pamiętać, że przy obliczeniach tych operatorów kluczowa jest właściwa transformacja współrzędnych i stosowanie odpowiednich jednostkowych wektorów, które różnią się od tych w tradycyjnych układach kartezjańskich.
Jak rozumieć prędkość kątową w odniesieniu do układów odniesienia w ruchu obrotowym?
Aby przejść do układów odniesienia w ruchu obrotowym, musimy najpierw ponownie przyjrzeć się prędkości kątowej, a zwłaszcza jej wektorowej naturze. Twierdzenie Eulera mówi, że każda nieskończona przesunięcie sztywnego ciała, tak że punkt na ciele pozostaje nieruchomy, jest równoważne rotacji wokół osi przechodzącej przez ten punkt. To twierdzenie jest trudne do udowodnienia, ale nie musimy tego robić w tym przypadku. Jednak, jako ilustrację, rozważmy koło toczące się po drodze. Twierdzenie Eulera mówi, że każde nieskończone przesunięcie koła może być opisane jako rotacja wokół punktu kontaktu koła z drogą. Twierdzenie to mówi nam, że aby określić rotację wokół punktu, wystarczy znać kierunek osi rotacji oraz kąt, o jaki ta rotacja zaszła.
Oczywiście, jeśli interesuje nas tempo rotacji, czyli prędkość kątowa, będziemy potrzebować nie tylko kierunku osi rotacji, ale także prędkości rotacji. Oznacza to, że prędkość kątową możemy zapisać jako wektor ω, który leży wzdłuż osi rotacji, a jego wartość to prędkość rotacji. Przykładem może być nieruchomy bączek, który obraca się z prędkością 2π rad/s, a jego oś jest ustawiona pionowo. Ale czy ω wskazuje w górę, czy w dół? Odpowiedź na to pytanie daje zasada prawej ręki. Zakręć palce prawej ręki w kierunku obrotu, a kciuk wskaże kierunek ω. Zasada ta jest zilustrowana na rysunku 10.3. Koło z strzałkami w tym rysunku przedstawia koło obracające się w kierunku przeciwnym do ruchu wskazówek zegara. Kiedy zakręcisz palce prawej ręki w kierunku strzałek, kciuk powinien wskazywać w górę, na zewnątrz strony kartki. Kciuk wskazuje w kierunku prędkości kątowej koła.
Jeżeli prędkość kątowa obiektu zmienia się w czasie, oznacza to, że zarówno tempo rotacji, jak i/lub orientacja osi rotacji zmieniają się w czasie. Sytuacje, w których orientacja osi rotacji się zmienia, mogą być trudne do matematycznego opisania. W tej części książki skoncentrujemy się głównie na układach z ustaloną prędkością kątową, tj. gdy zarówno tempo rotacji, jak i kierunek osi rotacji pozostają stałe. Oprócz formalnej definicji prędkości kątowej, potrzebujemy również związku między prędkością cząstki a jej prędkością kątową. Przypomnijmy, że prędkość styczna v cząstki poruszającej się po okręgu o promieniu r z prędkością kątową ω wyraża się wzorem v = ωr. W tym szczególnym przypadku oś rotacji przechodziła przez środek okręgu i była prostopadła do jego płaszczyzny. To proste równanie wynika z faktu, że całe ruchy są ograniczone do jednej płaszczyzny. To jednak nie jest regułą.
Rozważmy teraz cząstkę, oznaczoną czarnym punktem na rysunku 10.4, która jest przytwierdzona do powierzchni Ziemi na półkuli północnej. Prędkość kątowa Ziemi jest zasadniczo stała i skierowana od bieguna południowego do bieguna północnego. Choć każdemu punktowi na Ziemi przypisana jest ta sama prędkość kątowa, to jednak szerokość geograficzna punktu wpływa na jego prędkość styczną v. Na rysunku 10.4 cząstka porusza się po okręgu o promieniu ρ = |ρ|, gdy Ziemia się obraca. Szerokość geograficzna tej cząstki wynosi π/2−θ. Wraz ze wzrostem θ cząstka musi przebyć większy dystans w tym samym czasie, podczas gdy prędkość kątowa pozostaje stała w każdym przypadku. W związku z tym prędkość styczna v = |v| musi rosnąć wraz ze wzrostem θ. Przypominamy, że prędkość styczna cząstki to v = ρω, gdzie ρ = r sin θ. Dlatego v = rω sin θ i możemy zapisać prędkość styczną jako v = ω × r (10.2.1).
Zauważmy, że (10.2.1) to ogólna forma znanego równania v = rω, gdzie θ = π/2. Musimy używać (10.2.1) w tym przypadku, ponieważ początek układu odniesienia bezwzględnego znajduje się w centrum Ziemi, a środek Ziemi nie jest środkiem okręgu, po którym porusza się cząstka. Ponadto środek Ziemi będzie służył jako punkt początkowy układu odniesienia w przyszłych zadaniach. Równanie (10.2.1) nie jest unikalne tylko dla wektora prędkości. Zauważmy, że możemy przekształcić (10.2.1) do postaci:
co nie jest wzorem unikalnym dla wektora r. W rzeczywistości, dla każdego wektora Q, który jest stały w obracającym się układzie odniesienia, jego pochodna czasowa mierzona w układzie nieobracającym się wyraża się wzorem:
W kolejnej sekcji przedstawimy dowód bardziej ogólnej formy (10.2.3), obejmującej wektory, które nie są stałe w obracającym się układzie odniesienia.
Przejdźmy teraz do analizy wektorów w układach odniesienia, które ulegają rotacji. Układ odniesienia bezwzględnego, oznaczony jako S′, oraz układ odniesienia obracający się, oznaczony jako S, muszą być dokładnie zdefiniowane. Punkty w obracającym się układzie odniesienia muszą zostać wyrażone za pomocą odpowiednich jednostkowych wektorów, które są zależne od rotacji. Kiedy analizujemy zmiany wektorów w takich układach, konieczne jest uwzględnienie prędkości kątowej tego układu, aby prawidłowo obliczyć ich pochodne czasowe.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский