Курсовая по прикладной математике и информатике в МГТУ им. Баумана должна показывать переход от реальной или математической задачи к формальной модели и вычислительному результату. Код здесь важен, но он не должен скрывать математику.
В МГТУ им. Н.Э. Баумана направление 01.03.02 «Прикладная математика и информатика» реализуется как отдельная образовательная программа. В Мытищинском филиале официально опубликована программа «Прикладная математика» с учебным планом и методическими материалами.
Официальная страница:
https://mf.bmstu.ru/sveden/education/programs/prikladnaya-matematika-suos-01.03.02.html
Начните с формализации
Плохо:
«Исследование алгоритмов оптимизации».
Сильнее:
«Сравнение градиентного и квазиньютоновского методов на классе выпуклых задач при одинаковом критерии остановки».
Теперь понятны:
- класс задач;
- методы;
- критерий;
- эксперимент.
Постановка задачи
Запишите:
- пространство переменных;
- ограничения;
- целевую функцию;
- параметры;
- критерий решения.
Читатель должен понимать задачу без запуска вашего кода.
Допущения
Модель всегда упрощает объект.
Например:
- линейность;
- независимость;
- стационарность;
- постоянный коэффициент;
- отсутствие шума.
Каждое допущение влияет на область применимости.
Размерность
Если модель физическая или экономическая, проверьте единицы.
Нельзя складывать величины разных размерностей.
Размерностный анализ часто ловит ошибку раньше численного метода.
Аналитический частный случай
Если существует простое решение, используйте его как контроль.
Например:
- одномерный случай;
- симметрия;
- линейная модель;
- малый размер.
Если программа не воспроизводит очевидный случай, дальнейший эксперимент ненадёжен.
Алгоритм
Опишите:
1. вход;
2. начальное приближение;
3. шаг;
4. критерий остановки;
5. выход.
Не вставляйте исходный код вместо алгоритма.
Псевдокод
Он помогает показать логику независимо от языка.
Используйте математические переменные и операции.
Не переписывайте Python построчно.
Корректность
Для известного алгоритма укажите условия, при которых он работает.
Например:
- выпуклость;
- гладкость;
- положительная определённость;
- связность графа.
Не используйте теорему вне её предпосылок.
Сложность
Разделяйте:
- теоретическую асимптотику;
- реальное время;
- память.
O(n log n) не гарантирует, что метод быстрее другого на малом n.
Численный метод
Если задача решается приближённо, определите ошибку.
Например:
- абсолютная;
- относительная;
- норма;
- residual.
Не пишите «решение точное», если используется дискретизация.
Сетка
Для дифференциального уравнения проверьте чувствительность к шагу.
Например:
h, h/2, h/4.
Если ответ сильно меняется, решение ещё не стабилизировалось.
Сходимость
Покажите, как ошибка уменьшается.
График log(error) против log(h) может помочь оценить порядок.
Но объясните оси.
Критерий остановки
Например:
||x(k+1)-x(k)|| < epsilon.
Выбор epsilon влияет на:
- точность;
- время;
- число итераций.
Не ставьте 1e-12 автоматически.
Машинная точность
Очень маленький epsilon может быть бессмысленным из-за floating point.
Покажите, где дальнейшее уменьшение порога не улучшает ответ.
Устойчивость
Метод может быть математически корректным, но численно нестабильным.
Проверьте чувствительность к небольшому возмущению входа.
Не оценивайте алгоритм только на идеальных данных.
Обусловленность
Если матрица плохо обусловлена, небольшая ошибка входа может сильно изменить результат.
Рассчитайте condition number, если это соответствует курсу.
Обсудите влияние на точность.
Линейная система
Для Ax=b можно сравнить:
- прямой метод;
- итерационный;
- sparse solver.
Выбор зависит от размера и структуры матрицы.
Разреженность
Не храните огромную sparse-матрицу как dense без необходимости.
Покажите:
- долю ненулевых;
- память;
- время.
Это хороший прикладной результат.
