Научное программирование и Sage
Как устроена система
- Инсталляция, библиотеки, исходники, git.
- Режимы использования ? интерактивный интерпретатор, notebook, пакетный режим, cloud
Особенности языка и предметной области
- Preparser
- Типы данных
- type и parent
- Обзор стандартной библиотеки.
Практическая польза от системы
Latex. (пример)
- Рисование, в т.ч. 3D
Анимация. (пример)
Интерактивные элементы. (пример с графом, пример с фракталом)
Решение (систем) уравнений (пример).
Д/З
Решения всех задач должны быть оформлены отдельными sage-скриптами или worksheet-ами (примеры см. выше), годными для запуска в sage-консоли или в notebook. Также полезно (и ускорит обратную связь), если они будут опубликованы в какой-либо живой Sage-системе (например в этом notebook или даже лучше в в новом облаке ? и тогда ссылка на соответствующий worksheet должна быть размещена в README
Пункты, помеченные ? необязательные.
- Рисование (вручную заполнить объект Graphics)
- Написать функцию, которая принимате на вход граф (sage.graphs.Graph) и рисует его, размещая на пустом объекте Graphic() вершины и ребра.
Написать функцию, которая получает на вход текстовое представление лабиринта (из прошлого семестра) и рисует его на графике (можно и трехмерном) так, чтобы лабиринт был похож на лабиринт.
- Анимация (animate) ? построить объект Animation, пригодный для сохранения в gif-ке
- Написать функцию, которая по данному графу и двум вершинам строит анимацию (объект Animation), которая иллюистрирует алгоритм (можно взять любой) поиска пути по графу (по кадру на каждый шаг поиска, с подсветкой текущего пути другим цветом).
- Написать функцию, которая по текстовому представлению лабиринта (см. выше) строит анимацию (объект Animation), иллюстрирущую алгоритм поиска пути в лабиринте (закрашивание просмотренных клеток)
Написать фрагмент кода на Sage, который создает анимацию (объект Animation), иллюстрирующую падение во фрактал (в любой), хотя бы 100 кадров. Желательно с зацикливанием.
С помощью Sage получить познавательную и реалистичную визуализацию нетривиального физического явления (теплопроводность, распространение волн, упругость, гравитационный маневр и т.п.), решив подходящее уравнение (систему уравнений) аналитически или численно.
- Интерактивные элементы (interact) ? написать interact-функцию, пригодную для использования в браузере
- Написать функцию, которая генерирует случайный граф (параметры: начальное зерно генератора случайных чисел, число вершин в графе, плотность ребер) и строит анимацию поиска пути в графе (между первой и последней вершинами). Завернуть ее в interact, снабдив все параметры подходящими элементами управления.
- Написать функцию, которая генерирует случайный лабиринт (параметры: начальное зерно генератора случайных чисел, размеры) и строит анимацию поиска пути в нем (из левой верхней и правую нижнюю клетку). Завернуть ее в interact, снабдив все параметры подходящими элементами управления.
Полезные ссылки
SageWiki ? много примеров кода, в т.ч. интерактивных.
Галерея графики, в т.ч. интерактивной
Немного русской документации и скринкастов, стареньких (courtesy Alexander Turenko).
Старенький онлайн-notebook
Новое Sage-облако. По сути, это полноценный бесплатный shared linux hosting с дополнительным веб-интерфейсом к файловой системе и Sage notebook, а также веб-терминалом (bash). Можно грабить корованы работать по SSH. Краткая инструкция:
- Зарегистрироваться в системе.
Склонировать репозиторий куда-нибудь к себе, быстрее всего на GitHub же.
- Создать новый пустой проект (Project).
Выполнить терминальную команду вида git clone https://github.com/spacediver/sage-demo.git (заменить путь репозиторию на свой, https:// оставить. push будет делаться по https с вводом логина-пароля всякий раз. Можно заморочиться с ssh-keygen, подкладыванием ~/.ssh/id_rsa.pub на свой аккаунт github и доступанием к репозиторию через ssh, это тоже должно работать).
Перейти в подкаталог sage-demo (или какой создался).
Создать новый терминал (это такой файл с расширением .term, который в веб-интерфейсе открывается в виде полноценного терминала).
Запустить htop, cat /etc/passwd, bitcoind...-
Настроить git для новых коммитов
git config --global user.name "John Doe" git config --global user.email johndoe@example.com
(ну или подложить свой ~/.gitconfig)
- Плодотворно поработать в веб-интерфейсе системы, создавая и редактируя рабочие листы (worksheet), копируя в них код примеров, и т.п.
- В терминале выполнить команды git status, diff, add, commit, push.
- ...
- PROFIT!
- Можно зайти на сервер по ssh (см. кнопку ?Settings? вашего проекта ? нужно будет через веб-интерфейс подложить свой ключик в ~/.ssh/authorized_keys).