5. Динамични системи: използване на SciPy¶

Съдържание на главата

  • Представяне на модула SciPy
  • Извършване на усъвършенствана обработка на данни със SciPy
  • Генериране на усъвършенствани фигури с Matplotlib
  • Напишете документацията на дадена функция

В рамките на научните модули на Python има впечатляваща колекция от функции, които изпълняват различни операции върху цифровите масиви на NumPy. Преди всичко те трябва да се използват, вместо да преоткриват колелото, като прекодират (вероятно по-малко добре) функционалност, която вече съществува другаде !

В NumPy, вече видяхме, че има много операции, позволяващи например да

  • генерира специфични масиви: np.arange, np.ones, np.linspace, .
  • изпълнява операции от стойностите на масива: np.sum, np.sin, np.histogram и др.
  • изразяват (булеви) условия върху елементите на масив или извличат части от масив: np.logical_not, np.in1d
  • променете подреждането на стойностите на масива, неговата форма или дори създайте нов масив от няколко други: np.reshape, np.concatenate .
  • и т.н. .

Модулът SciPy е тук кутия за инструменти числови за масиви NumPy. Ние намираме в SciPy класически операции за манипулиране/обработка на цифрови данни, но специфични за даден тип приложения (линейна алгебра, статистика и др.). Следователно това са функции от по-високо ниво от тези на NumPy.

SciPy е стабилен, добре тестван и относително добре документиран модул.

Модулът SciPy изпълнява различните операции с числови масиви (ndarray) на numpy. Следователно можем директно да използваме тези масиви като аргументи за различните функции

За да покажем използването на SciPy, ще се съсредоточим върху интегрирането на диференциални уравнения, разглеждайки динамични системи, базирани на механични махала.

5.1. Обикновено махало¶

използване

Като напишем фундаменталната връзка на динамиката (запазване на импулса), получаваме простото уравнение на махалото, дадено от

където е ъгълът на махалото по отношение на вертикалата и ние обозначаваме с точка производната на времето.

За малки трептения можем да направим приближение. Когато приближението не е валидно, това диференциално уравнение трябва да бъде интегрирано числено, за да се получи еволюцията на положението и ъгловата скорост на махалото с течение на времето.

Така че трябва да имаме интегратор на диференциални уравнения, който човек би очаквал да намери в SciPy. Но каква е съответната функция? Нека опитаме търсене в Google за „scipy интегриране на диференциално уравнение“ или да разгледаме Помощното съдържание http://docs.scipy.org/doc/scipy/reference/index.html. Има интегриран подмодул, който сам по себе си съдържа функция odeint

Като начало трябва да поставим диференциално уравнение от 2-ри ред под формата на система от уравнения от първи ред

Вече можем да интегрираме траектория от първоначално условие

Подобно на функцията odeint, има голям брой функции, позволяващи научни изчислителни операции на високо ниво.

Например можем да проверим запазването на механичната енергия във времето

За да генерираме фигурата по-горе, използвахме редица команди от модула matplotlib .