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

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

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

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

Занятия ведет: LeoMat

## Урок 1. Формулы простые

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

## Урок 2. Формулы посложнее

Здесь мы рассмотрим новый пример — перевод значения температуры из шкалы Фаренгейта в шкалу Цельсия. Я расскажу о старшинстве арифметических операций, об использовании встроенных математических функции, например *e x* или

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

### Приложение: модули math и cmath

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

## Урок 3. Циклы и последовательности

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

## Урок 4. Функции

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

### Приложение: встроенные функции Python

*Приложение разрабатывается...*

## Урок 5. Общение с пользователем

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

## Урок 6. Перехват ошибок

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

## Урок 7. Модули

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

## Урок 8. Массивы

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

## Урок 9. Графики

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

## Урок 10. Диаграммы

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

## Урок 11. Файлы

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

## Урок 12. Словари

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

## Урок 13. Строки

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

## Урок 14. Сбор данных с web

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

## Урок 15. Введение в классы

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

## Урок 16. Специальные методы классов

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

## Урок 17. Случайные числа

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

## Урок 18. Метод Монте-Карло

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

## Урок 19. Символьные вычисления

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

## Упражнения

*Раздел разрабатывается...*

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

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

## Литература

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

- Вики-учебник Python 2.6
- Стиль кода в языке Python
*Лутц М.*Изучаем Python. — 3-е изд. — СПб: Символ-плюс, 2009. — 848 с. — 2000 экз. — ISBN 978-5-93286-138-7*Лутц М.*Программирование на Python. — 2-е изд. — СПб: Символ-плюс, 2002. — 1136 с. — 2000 экз. — ISBN 5-93286-036-7

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

*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

## Ссылки

- Официальная страница Python
- Библиотеки научных вычислений SciPy и NumPy
- Библиотека символьных вычислений SymPy
- Библиотека визуализации Matplotlib
- Каталог сайтов о Python на русском языке
- Python(x, y) - крупный дистрибутив, собирающий в себе множество свободных научно-расчетных библиотек
- IPython - Интерактивная оболочка с множеством дополнительных команд
- Spyder - легкий редактор, «заточенный» под научные расчеты
- Sage - математический пакет на базе Python

## Статьи

- Использование Python для разработки научно-технического ПО
- Краткий обзор Sympy, Numpy, Matplotlib, Dislin
- Краткий обзор IPython



Этот курс признан одним из лучших сообществом Вики-Университета.
|


cs:Python en:Topic:Python fr:Python