Программирование и научные вычисления на языке Python

Курс «Программирование и научные вычисления на языке Python»

Факультет: Информационные технологии
Кафедра: Программирование


Пререквизиты: -
Постреквизиты: -


Преподаватель: -
Автор: LeoMat


Силлабус
Ссылка: https://w.wiki/7L3M


Цель этого курса — научиться писать программы, решающие научные задачи. Язык программирования Python обладает ясным и понятным синтаксисом, и потому легко учится и хорошо подходит для введения в программирование. Это позволит нам не отвлекаться от решаемой задачи на особенности языка и их объяснение, позволит естественным образом последовательно вводить новые инструменты. Язык близок с MATLAB и хорош для программирования математических вычислений. К тому же Python умеет работать с такими языками как Fortran, C и С++, которые уже широко используются в научных расчетах. Кроме всего прочего, большинство продуктов и модулей, написанных на Python, распространяются бесплатно, в том числе и все те инструменты, которыми мы будем пользоваться в ходе наших уроков.

Примеры данного курса интегрируют программирование с прикладным вычислениями в математике, физике, биологии и экономике. Предполагается, что читатель знаком с математическим анализом функции одной переменной и базовыми законами физики, тогда примеры окажутся более наглядными. В свою очередь, знание языка Python или умение программировать на любом другом языке совсем не предполагается и язык изучается одновременно с решением задач. Знать же английский язык, хотя бы на базовом уровне, будет очень неплохо. Вы и сами это знаете.

Многие книги по программированию фокусируют свое внимание исключительно на особенностях языка программирования. Однако, чтобы писать программы, надо думать как программист. Это означает, что надо находить решение на поставленную задачу. В этом курсе в каждом новом примере определяется новая задача и находится ее решение в виде программного кода. Помните, что никто не может научиться программировать, только читая тексты программ и пояснения к ним. К тому же, самое интересное - это практика. Тем более, что к каждому уроку прилагается множество интересных упражнений из различных областей науки.

Занятия ведет: Лёва Матюшкин

В этом уроке мы рассмотрим задачу из школьного курса физики о вертикальном движении подброшенного вверх мячика. На его примере я расскажу как написать и запустить программу на языке Python, рассчитывающую функцию координаты от времени и выводящую результат в виде строки форматированного текста. Также мы узнаем о том, как правильно и удобно пользоваться переменными и комментариями. После этого урока вы сможете писать программы, которые численно рассчитывают любые формулы со стандартными арифметическими операциями (сложение, вычитание, умножение, деление и возведение в степень) и выводят результаты на экран.

Здесь мы рассмотрим новый пример — перевод значения температуры из шкалы Фаренгейта в шкалу Цельсия. Я расскажу о старшинстве арифметических операций, об использовании встроенных математических функции, например ex или sin(x), о том как можно использовать интерактивную оболочку Python в качестве калькулятора. Кроме того, мы поговорим об ошибках — ошибке целочисленного деления и погрешности вычислений. Для тех, кто знаком с комплексной переменной, я расскажу о том как с ней работать в Python. После этого урока вы сможете обходиться без инженерного калькулятора.

Документация по модулям math и cmath: полный перечень функций и некоторые пояснения.

Задача этого занятия — написать программу, которая выводит на экран таблицу значений для предыдущего примера. Это очень важный урок, в нем мы познакомимся с циклами while и for, то есть сможем автоматизированно повторять какую-то работу — до какого-то момента, заданного условием или нужное нам число раз. Для задания условий мы познакомимся с использованием логических операторов. Кроме того, мы узнаем о работе с последовательностями, о таких важных объектах как список и кортеж, познакомимся с концепцией срезов, вложенных списков, zip-функции и многим другим. Таким образом, мы узнаем как использовать большую часть базовых конструкций языка.

В этом уроке мы познакомимся с одними из наиболее важных структурных элементов программ — с функциями. Мы уже узнали о том, как можно использовать встроенные функции языка, например, размещенные в math. Теперь мы узнаем, как создавать функции самим. Они смогут принимать сколько угодно аргументов и выдавать столько же значений. Кроме того мы ознакомимся с локальными и глобальными переменными, новым типом объектов None, с использованием строк документации и такой удобной особенностью языка, как lambda-функции.

Краткий обзор некоторых встроенных функций. Приложение разрабатывается...

Здесь мы познакомимся с тем, как в программах происходит выбор по какому-то условию или решению пользователя, то есть изучим базовую конструкцию if-elif-else. Научимся делать более дружелюбные программы, которые будут задавать вопросы, считывать и обрабатывать ответы. С помощью функций eval и exec наши программы смогут принимать от пользователя не только обычные объекты, такие как числа, строки и последовательности, но и целые математические формулы, которые мы сможем, таким образом, обрабатывать «на лету». Кроме того, мы приобретем навыки использования и оценим удобство командной строки при запуске программ.

В любой программе, которая общается с пользователем, надо помнить, что это не равностороннее общение, у человека прав гораздо больше, в том числе и право на ошибку. Но действия программы должны быть безоговорочно ясными, поэтому в ответ на неправильный запрос надо как-то правильно действовать. В этом нам поможет соответствующая конструкция try-except. Мы познакомимся с типами ошибок и как самим предопределить поведение программы в таких некорректных случаях. Этот урок также продолжает разговор об общении с пользователем, поэтому здесь мы немного поговорим и о графическом интерфейсе (GUI).

Уже на первых уроках мы познакомились с библиотеками Python — модулями, тем как их импортировать. Теперь мы узнаем как они устроены, где их ищет интерпретатор, как узнать что в них находится с помощью функции dir и сами сделаем свой довольно большой модуль для примера о банковском вкладе. Мы узнаем как можно использовать один и тот же файл и как контейнер импортируемых функций, и как самостоятельную программу, как создавать не импортируемые имена переменных и в итоге получим сравнительно большую, но аккуратную программу.

Данный урок подготавливает почву для многих дальнейших рассмотрений, в нем мы через понятие вектора и операций над векторами приходим к заданию данных, например, координат в виде массивов. Начиная с этого урока мы знакомимся с обширными пакетами, всеми используемыми в научных расчетах на Python — библиотеках SciPy и NumPy. В качестве примера мы рассмотрим вопрос о задании значений функций для последовательности координат. Мы узнаем чем и почему массив выигрывает у списка и как с ним можно работать.

 
Пример построения графиков из урока 9

На этом занятии мы узнаем как строить графики с помощью широко распространенной и очень развитой библиотеки Matplotlib. Кроме того, что мы сможем их строить вместе по отдельности, мы научимся и полноценно их оформлять, задавая названия осей, легенду, различное начертание кривых с помощью цвета, стиля линий и маркеров. Также мы научимся сохранять полученные рисунки в файл и работать с popup-окном Matplotlib, позволяющим предварительно изучить полученные результаты.

 
Диаграмма со столбцами из урока 10

Этот урок повествует о других типах визуализации, заключенных в библиотеке Matplotlib и знакомит нас с такими типами представления данных о распределении величин (гистограммы), их погрешностей (error bars), диаграмм в виде столбцов и круговых диаграмм, показывающих вклад участников, графиками рассеяния, позволяющими выявить закономерность между двумя величинами, узнаем о представлении в полярных координатах. Также мы сможем добавлять на наши рисунки текстовые блоки и примечания.

В этом уроке о чтении и записи файлов. Вы узнаете как можно хранить, считывать, обрабатывать и записывать информацию внутри файловых объектов, о том как управлять потоками входных и выходных данных с помощью функций модуля sys. В качестве примеров мы прочитаем данные из файла, построив тут же по ним график и запишем в файл форматированную таблицу. Для любителей табличных процессоров отдельный раздел.

На этом занятии мы узнаем об абсолютно новом для нас типе объектов — о словарях. Словари оказываются очень удобными объектами для хранения данных и по сути являются своеобразным объектом-заменой базе данных. В качестве конечного примера мы напишем программу, в которой с помощью словарей преобразуются и сравниваются на одном графике данные (о стоимости акций трех известных корпораций-гигантов) из довольно больших табличных файлов.

В этом уроке мы освоим множество функций работы над часто встречающимися нам объектами — строками, такими как поиск в них подстрок, их замещение, разбиение и объединение строк, проверка содержимого и так далее. Кроме того, что строки встречаются повсеместно в коде программ, но и файлы читаются именно строками, поэтому эти знания сильно помогут при работе с файлами и извлечении из них нужных нам данных.

Теперь мы поговорим о том, в чем Python и без научных исследований используется весьма часто и где его грех не применять в случае надобности. На этом занятии мы немного поговорим о том как конструируются web-страницы и как мы можем загрузить и разложить по полочкам данные из них, как мы это делали с простыми файлами. В качестве примера извлечения информации, мы соберем данные о погоде и температуре одновременно с нескольких страниц сайта прогнозов погоды.

С этого урока мы начинаем осваивать и практиковать зачастую наиболее удобный и элегантный метод — программирование с помощью классов. Этот метод очень востребован для случаев, когда мы имеем множество однотипных объектов. В научных вычислениях имеется, например, проблема задания функции одной переменной с несколькими аргументами, и мы узнаем как с помощью классов ее можно решить.

В этом уроке больше примеров классов: счет в банке, номера телефонов в мобильном, геометрические объекты. Кроме того мы узнаем о специальных методах, таких как __call__, __str__, __add__ и так далее, позволяющих сделать написание программ с помощью классов существенно более ясным и гибким за счет использования таких встроенных методов классов.

А теперь о том как генерировать (и как генерируются) случайные числа и массивы таких чисел по равномерному и нормальному (гауссову) распределениям, о случайный выборе из набора целых чисел или элементов списка, нахождение среднего, дисперсии и среднеквадратических отклонений и несколько игровых примеров о бросании костей и картах.

В этом уроке больше о практическом применении случайных чисел в качестве численных методов. Рассмотрен метод Монте-Карло, заключающийся в использовании большого количества генерируемых случайных чисел и проверке их на заданные условия и показаны возможности применения метода Монте-Карло в различных областях: задачах теории вероятностей, ограничении роста населения Китая и численном интегрировании.

Хотя численные методы, некоторые из которых описаны в предыдущих уроках, и находят широкое применение, большей точностью и наглядностью обладают символьные вычисления, работающие с математическими выражениями как с последовательностями символов. Системы, занимающиеся символьными вычислениями, называют также системами компьютерной алгебры. Примерами таких систем служат известные математические среды Mathcad, Maple, Mathematica и т. д. В качестве инструмента символьных вычислений в Python мы рассмотрим библиотеку SymPy.

Планируемые уроки

  • Подробнее о возможностях NumPy и SciPy
  • Интерполяция
  • Искусственный интеллект
  • Взаимодействие с другими языками
  • Объектно-ориентированное программирование
  • Ряды и дифференциальное исчисление
  • Запись и чтение звука
  • Распознавание объектов на изображении

Литература

На русском языке или переведенная на русский язык

На английском языке

  • Magnus Lie Hetland Beginning Python: From Novice to Proffesional. — Apress, 2005. — ISBN 1-59059-519-X
  • Hans Petter Langtangen A Primer on Scientific Programming with Python. — Springer, 2009. — ISBN 978-3-642-02474-0
  • Sandro Tosi Matplotlib for Python Developers. — Packt Publishing, 2009. — ISBN 978-1-847197-90-0
  • Jaan Kuisalaas Numerical Methods in Engineering with Python. — Cambridge University Press, 2005. — ISBN 978-0-521-85287-6

Ссылки

Статьи