Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования «Челябинский государственный университет» С. А. Хайбрахманов ОСНОВЫ НАУЧНЫХ РАСЧЁТОВ НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ PYTHON Учебное пособие Челябинск Издательство Челябинского государственного университета 2019 УДК 004(075.8) ББК З973я7 Х154 Печатается по решению редакционно-издательского совета Челябинского государственного университета Рецензенты: кафедра вычислительной механики факультета математики, механики и компьютерных технологий Южно-Уральского государственного университета (НИУ); К. Л. Маланчев, кандидат физико-математических наук, научный сотрудник отдела релятивистской астрофизики Государственного астрономического института имени П. К. Штернберга Московского государственного университета имени М. В. Ломоносова Хайбрахманов, С. А. Х154 Основы научных расчётов на языке программирования Python : учеб. пособие / С. А. Хайбрахманов. — Челябинск : Изд- во Челяб. гос. ун-та, 2019. — 96 с. ISBN 978-5-7271-1629-6 Излагаются основы научных расчётов на языке программиро- вания Python. Приводятся и демонстрируются базовые возмож- ности библиотек NumPy для работы с многомерными массивами, Matplotlib для визуализации данных и SciPy для научных расчётов и анализа данных. Рассматриваются примеры решения некото- рых математических и физических задач с помощью библиотек NumPy, Matplotlib и SciPy. Предназначено для практических занятий и самостоятельной работы по дисциплине «Компьютерные технологии в науке и об- разовании» для студентов, обучающихся по направлениям 03.04.02 Физика, 03.04.03 Радиофизика. Ил. 11. Библиогр.: 6 назв. УДК 004.432.2(075.8) ББК З973.22я73-1 ISBN 978-5-7271-1629-6 © Хайбрахманов С. А., 2019 © Челябинский государст венный университет, 2019 Оглавление Предисловие .................................................. 5 Используемые обозначения .................................. 8 Глава 1. Основы программирования на языке Python ....... 9 1.1. Базовые сведения о Python ............................ 9 1.2. Установка Python ................................... 10 1.3. Интерактивный режим работы ..................... 12 1.4. Типы данных ....................................... 13 1.5. Операции и логические операторы .................. 20 1.6. Ввод/вывод ......................................... 21 1.7. Управляемые блоки кода в Python ................... 23 1.8. Функции ........................................... 27 1.9. Работа с библиотеками .............................. 30 1.10. Написание файлов исходного кода .................. 32 1.11. Создание и использование собственных модулей ... 35 Примеры решения задач ............................ 37 Задания для самостоятельной работы .............. 40 Вопросы для самоконтроля ......................... 41 Рекомендуемая литература ........................ 41 Глава 2. Б иблиотека NumPy для работы с многомерными массивами ...................... 43 2.1. Общие сведения .................................... 43 2.2. Создание массивов NumPy .......................... 44 2.3. Доступ к элементам массива ........................ 46 2.4. Функции для работы с массивами ................... 50 2.5. Универсальные функции ........................... 52 2.6. Работа с файлами ................................... 53 Задание для самостоятельной работы .............. 55 Вопросы для самоконтроля ......................... 57 Рекомендуемая литература ........................ 57 3 Оглавление Глава 3. Библиотека визуализации Matplotlib .............. 58 3.1. Общие сведения .................................... 58 3.2. Создание простого рисунка с параметрами по умолчанию ...................................... 59 3.3. Создание рисунка с настраиваемыми параметрами .. 61 3.4. Добавление нескольких панелей на рисунок ......... 68 3.5. Двумерные графики ................................ 69 3.6. Визуализация данных из текстовых файлов ......... 76 3.7. Математические символы на рисунках .............. 78 Задание для самостоятельной работы .............. 78 Вопросы для самоконтроля ......................... 79 Рекомендуемая литература ........................ 79 Глава 4. Б иблиотека SciPy для научных и инженерных расчётов ........................... 80 4.1. Общие сведения .................................... 80 4.2. Численное интегрирование ......................... 82 4.3. Решение обыкновенных дифференциальных уравнений ......................................... 83 4.4. Интерполяция ...................................... 88 Варианты заданий для самостоятельной работы ... 91 Вопросы для самоконтроля ......................... 92 Рекомендуемая литература ........................ 93 Заключение .................................................. 94 Список литературы .......................................... 96 4 Предисловие Учебное пособие посвящено основам программирования на язы- ке Python и работы с библиотеками NumPy, Matplotlib и SciPy для проведения научных расчётов. Язык Python является интерпретируемым высокоуровне- вым языком программирования, поддерживающим разработку программ с использованием структурного, функционального, объектно- ориентированного и др. подходов. Отличительными чертами языка являются кроссплатформенность, динамическая типизация, автоматическое управление памятью, интроспекция, высокоуровневые структуры данных. Синтаксис Python легко чи- таем. С помощью Python создаётся как системное, так и приклад- ное программное обеспечение, программы с графическим интер- фейсом, веб-приложения, программы для научных расчётов и т. д. Python имеет богатую стандартную библиотеку. Кроме того, для Python написано большое количество прикладных библиотек, в том числе для научных расчётов, которые позволяют решать ряд математических задач без необходимости самостоятельной разра- ботки алгоритмов. Проведение как теоретических, так и практических научных исследований включает в себя решение различных математиче- ских задач, таких как: нахождение корней алгебраических урав- нений, задачи линейной алгебры, вычисление интег ралов, реше- ние систем обыкновенных дифференциальных уравнений, ап- проксимация и интерполяция данных и т. д. Важным элементом анализа научных результатов является визуализация данных. Найти точное решение математических задач в реальных при- ложениях зачастую не удаётся, что обусловливает необходимость использования алгоритмов численного решения. К настоящему времени разработано, реализовано и протести- ровано большое количество библиотек и программных паке- тов как для аналитического, так и для численного решения на- учных задач. Использование таких пакетов избавляет учёных 5 Предисловие от необходимости тратить время на разработку и реализацию ал- горитмов решения стандартных математических задач и позволя- ет сконцент рироваться на анализе получаемых решений. Наиболее известными коммерческими пакетами для проведе- ния научных и инженерных расчётов являются пакет программ MATLAB, системы компьютерной алгебры Mathcad, Maple и Mathe- matica. Указанные программные пакеты имеют продвинутые и удобные графические интерфейсы, собственные высокоуровне- вые языки программирования и позволяют решать большое ко- личество математических и инженерных задач, а также визуали- зировать данные и получать рисунки высокого качества. Однако возможность использования данных пакетов индивидуальны- ми исследователями и небольшими организациями затруднена по причине высокой стоимости их лицензий. Существует ряд бесплатных программных пакетов и библио- тек для проведения научных расчётов, анализа и визуализации данных. Среди них можно выделить пакеты для численных рас- чётов Scilab (URL: https://www.scilab.org/) и Octave (URL: https:// www.gnu.org/software/octave/), систему компьютерной алгебры Maxima (URL: http://maxima.sourceforge.net/ru/index.html), систе- му для статистических расчётов и визуализации данных на ос- нове языка программирования R (URL: https://www.r-project.org/), а также биб лиотеки NumPy для работы с многомерными масси- вами, Matplotlib для визуализации данных и SciPy для научных и инженерных расчётов на языке программирования Python. Со- вместные возможности библиотек NumPy, Matplotlib и SciPy близ- ки к возможностям MATLAB. Данные библиотеки в настоящее время активно развиваются и являются одним из лидирующих бесплатных инструментов для решения стандартных математи- ческих задач и анализа данных. Целью данного пособия является ознакомление студентов с основными возможностями языка Python и библиотек NumPy, Matplotlib и SciPy. Изложенный материал основан на многолетнем опыте автора по использованию указанных библиотек для прове- дения расчётов, анализа и визуализации данных. В пособии изло- жен необходимый минимум знаний для написания простейших программ на Python и применения библиотек NumPy, Matplotlib и SciPy. Для чтения пособия не требуется предварительных зна- 6 ний языка Python, однако необходимы базовые знания в области структурного, функционального и объектно-ориентированного программирования. Для лучшего понимания материала приво- дится сравнение основных понятий и синтаксиса Python с распро- странёнными языками программирования C и Pascal. Для полу- чения дополнительной информации в конце каждой главы при- ведён список рекомендуемой литературы. Учебное пособие организовано следующим образом. В первой главе рассматриваются основы программирования на Python: опи- сывается интерактивный режим работы и написание файлов ис- ходного кода, основные типы данных и операторы, работа с функ- циями, библиотеками и модулями. Во второй главе описываются возможности библиотеки NumPy по работе с многомерными мас- сивами. В третьей главе приводятся основные способы визуализа- ции данных с помощью библиотеки Matplotlib: построение одно- мерных и двумерных графиков, настройка подписей и внешнего вида рисунков, сохранение рисунков в файлы, визуализация дан- ных из файлов. В четвёртой главе рассматриваются некоторые воз- можности библиотеки SciPy: численное интегрирование, решение систем обыкновенных дифференциальных уравнений, интерпо- ляция. 7 Используемые обозначения Будем выделять названия библиотек, модулей, функций, ти- пов данных, имена файлов и зарезервированные слова жирным шрифтом Times New Roman, например: Matplotlib, pyplot, plot(), float, test.py, for и т. д. Переменные в тексте обозначаются наклонным шрифтом Times New Roman: x, y, ‘string’ и т. д. Строки программного кода в тексте записываются шрифтом Consolas чёрного цвета и сопровождаются линией по левому полю: import matplotlib.pyplot as plt Комментарии и строки в тексте программ выделяются шрифтом Consolas серого цвета и сопровождаются линией по левому полю: # однострочный комментарий """ Строка, разделённая На несколько строчек """ Ожидание ввода команды в окне интерактивной оболочки IPython: In [N]: | где N — натуральное число (1, 2, 3 …), указывающее текущий но- мер команды и номер результата от момента начала работы с обо- лочкой. Результат выполнения предыдущей команды: Out [N]: <Ans> где N — натуральное число (1, 2, 3 …), указывающее номер резуль- тата, <Ans> — результат выполнения команды. 8 Г л а в а 1 Основы программирования на языке Python В данной главе рассматриваются основы программирования на языке Python и базовые функции интегрированной среды раз- работки Spyder (URL: https://www.spyder-ide.org/). Теоретический материал сопровождается примерами интерактивной работы в IDE Spyder и написания файлов исходного кода. Приводятся при- меры программ. В завершение приводится список заданий для са- мостоятельной работы и вопросы для самоконтроля. 1.1. Базовые сведения о Python Python является высокоуровневым языком программирования (URL: https://www.python.org). Основные особенности языка: • Python поддерживает структурное, функциональное и объектно- ориентированное программирование. • Python — интерпретируемый язык программирования. Это озна чает, что программный код на языке Python не компили- руется перед его исполнением в отличие от таких языков, как C и Fortran. Код выполняется специальной программой-интерпрета- тором. Интерпретатор считывает высокоуровневую программу — исходный код — и, напрямую взаимодействуя с операционной сис- темой, выполняет программу. Преобразование и выполнение про- граммы осуществляется построчно. • Python поддерживает динамическую типизацию — связыва- ние переменной с типом в момент присваивания ей значения. • В Python реализовано автоматическое управление памятью. Это означает, что пользователю нет необходимости вручную вы- делять и удалять память для динамических переменных. • Python поддерживает интерактивный режим работы. 9 Глава 1. Основы программирования на языке Python • Для Python написано большое количество свободно распро- страняемых библиотек, в том числе библиотек для научных рас- чётов. • Синтаксис языка Python является легко читаемым и непере- груженным. • Интерпретатор Python является свободно распространяе- мым программным обеспечением с открытым исходным ко- дом. Эталонной реализацией интерпретатора является CPython (URL: https://www.python.org). • Кроссплатформенность: Python портирован на большинство существующих платформ, в том числе Windows, Linux и Mac OS X. Программный код, написанный на Python, может выполнять- ся на любой платформе, на которой установлен интерпретатор Python. 1.2. Установка Python В данном учебном пособии будут рассмотрены примеры про- граммирования на Python на платформе Windows. Для установки всех необходимых инструментов для программирования удобно воспользоваться одним из наиболее развивающихся на данный момент дистрибутивов — Anaconda (URL: https://www.anaconda. com/download/). Он включает в себя интерпретатор языка Python, стандартные библиотеки Python, интегрированную среду разра- ботки (IDE) Spyder с интерактивной оболочкой IPython, менеджер пакетов conda, а также набор библиотек для научных и инженер- ных расчётов: NumPy [1] (URL: https://numpy.org/), SciPy [2–4] (URL: https://www.scipy.org/), Matplotlib [6] (URL: https://matplotlib.org/) и др. В данном учебном пособии рассмотрены примеры интерактив- ной работы в оболочке IPython (URL: http://ipython.org/) и примеры написания программ на языке Python. В обоих случаях для напи- сания и запуска программ будет использована интегрированная среда разработки Spyder. При написании пособия использовался Python версии 3.6, IDE Spyder версии 3.0. 10