Difference between revisions of "BSc: ComputationalMathematics"
V.matiukhin (talk | contribs) |
V.matiukhin (talk | contribs) |
||
Line 116: | Line 116: | ||
<p>Вы должны отправить только свой файл <math display="inline">solution.c/solution.cpp</math>. Соответствующий файл <math display="inline">blackbox.h</math> будет предоставлен тестовой системой.</p> |
<p>Вы должны отправить только свой файл <math display="inline">solution.c/solution.cpp</math>. Соответствующий файл <math display="inline">blackbox.h</math> будет предоставлен тестовой системой.</p> |
||
<p>Вы не должны пытаться проводить reverse-engineering "чёрного ящика" и/или взаимодействовать с ним каким-либо другим способом, кроме перечисленных выше четырёх функций.</p></li> |
<p>Вы не должны пытаться проводить reverse-engineering "чёрного ящика" и/или взаимодействовать с ним каким-либо другим способом, кроме перечисленных выше четырёх функций.</p></li> |
||
+ | |||
+ | <li><p>Задача проста: вам нужно подогнать набор точек под полином 9-й степени</p> |
||
+ | <p><math display="inline">y = a_9x^9+a_8x^8+...+a_1x+a_0</math>.</p> |
||
+ | <p>Ваша программа получает следующий поток команд:</p> |
||
+ | <ul> |
||
+ | <li><p>ADD <math display="inline">x</math> <math display="inline">y</math> Считывает значения <math display="inline">x</math> и <math display="inline">y</math>.</p></li> |
||
+ | <li><p>FIT Выведите коэффициенты для полинома, подогнанного под все точки, считанные с начала программы. В каждом тесте у вас не будет более 13 команд FIT.</p></li> |
||
+ | <li><p>END Выводит коэффициенты для полинома, подогнанного под все точки, считанные с начала программы, и завершает работу.</p></li></ul> |
||
+ | |||
+ | <p>Вы получите не более 107 команд до END.</p></li> |
||
− | <li><p> |
+ | <li><p>Решите систему линейных алгебраических уравнений (СЛАУ) <math display="inline">Ax = b</math> с остаточной ошибкой не более <math display="inline">10^{-9}</math>.</p> |
− | <p>И матрица <math display="inline">A</math> очень хороша: невырожденная, симметричная и строго диагонально доминирующая. |
+ | <p>И матрица <math display="inline">A</math> очень хороша: невырожденная, симметричная и строго диагонально доминирующая. Однако у вас нет явного представления о матрице <math display="inline">A</math>.</p> |
<p>Вы можете только получить результат её умножения на вектор.</p> |
<p>Вы можете только получить результат её умножения на вектор.</p> |
||
<p>У вас есть несколько функций черного ящика, через которые вы работаете с СЛАУ:</p> |
<p>У вас есть несколько функций черного ящика, через которые вы работаете с СЛАУ:</p> |
||
<ul> |
<ul> |
||
− | <li><p>void <math display="inline">blackbox-init()</math> – инициализирует внутренние структуры данных черного ящика. Эту функцию следует вызывать в самом начале программы! Ни одна другая функция черного ящика не должна быть вызвана до неё, и не должно быть чтения из <math display="inline">stdin</math> |
+ | <li><p>void <math display="inline">blackbox-init()</math> – инициализирует внутренние структуры данных черного ящика. Эту функцию следует вызывать в самом начале программы! Ни одна другая функция черного ящика не должна быть вызвана до неё, и не должно быть чтения из <math display="inline">stdin</math>.</p></li> |
<li><p>int <math display="inline">blackbox-size()</math> – возвращает количество уравнений (равное количеству неизвестных) системы. Количество уравнений находится между 10 и 10000 (включительно).</p></li> |
<li><p>int <math display="inline">blackbox-size()</math> – возвращает количество уравнений (равное количеству неизвестных) системы. Количество уравнений находится между 10 и 10000 (включительно).</p></li> |
||
<li><p>void <math display="inline">blackbox-mult</math> (const double <math display="inline">*x</math>, double <math display="inline">*out</math>) – вычисляет произведение <math display="inline">A</math> и вектора <math display="inline">x</math>, записывает результаты в out. Указатели <math display="inline">x</math> и out должны указывать на разные участки памяти размером не менее <math display="inline">blackbox-size() * sizeof(double)</math> байт каждый.</p></li> |
<li><p>void <math display="inline">blackbox-mult</math> (const double <math display="inline">*x</math>, double <math display="inline">*out</math>) – вычисляет произведение <math display="inline">A</math> и вектора <math display="inline">x</math>, записывает результаты в out. Указатели <math display="inline">x</math> и out должны указывать на разные участки памяти размером не менее <math display="inline">blackbox-size() * sizeof(double)</math> байт каждый.</p></li> |
||
<li><p>void <math display="inline">blackbox-rhs(double *b)</math> – записывает правую часть СЛАУ (т.е., вектор <math display="inline">b</math>) в массив <math display="inline">b</math>. Указатель <math display="inline">b</math> должен указывать на участок памяти размером не менее <math display="inline">blackbox-size() * sizeof(double)</math> байт.</p></li> |
<li><p>void <math display="inline">blackbox-rhs(double *b)</math> – записывает правую часть СЛАУ (т.е., вектор <math display="inline">b</math>) в массив <math display="inline">b</math>. Указатель <math display="inline">b</math> должен указывать на участок памяти размером не менее <math display="inline">blackbox-size() * sizeof(double)</math> байт.</p></li> |
||
− | <li><p>void <math display="inline">blackbox-submit(double *solution)</math> – записывает результат программы. Массив solution должен содержать решение СЛАУ: <math display="inline">blackbox-size()</math> |
+ | <li><p>void <math display="inline">blackbox-submit(double *solution)</math> – записывает результат программы. Массив solution должен содержать решение СЛАУ: <math display="inline">blackbox-size()</math> значение типа double. Это должна быть последняя функция, вызываемая вашей программой (помимо return 0;).</p></li></ul> |
</li></ol> |
</li></ol> |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
| style="text-align:center;" | 2. ||Решение нелинейных алгебраических уравнений и систем. Решение ОДУ и УПД. Дискретные ряды Фурье. ||<ol> |
| style="text-align:center;" | 2. ||Решение нелинейных алгебраических уравнений и систем. Решение ОДУ и УПД. Дискретные ряды Фурье. ||<ol> |
||
+ | |||
− | <li><p> |
+ | <li><p>Создайте программное обеспечение для нового приёмника GPS/GLONASS. Навигация по спутникам работает следующим образом (конечно, это довольно упрощённое описание реальной ситуации). Существует <math display="inline">N</math> < 30 спутников. Каждый спутник передаёт своё положение (<math display="inline">x_i; y_i; z_i</math>) и синхронизированное высокоточное время <math display="inline">t_i</math>. Эти сигналы занимают время на достижение приёмника (например, в вашем смартфоне). Если приёмник имеет положение <math display="inline">x</math>; <math display="inline">y</math>; <math display="inline">z</math> и получает сигнал в момент времени <math display="inline">t</math>, справедливо следующее уравнение (называемое "Навигационным уравнением"):</p> |
<p><math display="inline">(x - x_i)^2 + (y - y_i)^2 + (z - z_i)^2 = (t - t_i)^2</math></p> |
<p><math display="inline">(x - x_i)^2 + (y - y_i)^2 + (z - z_i)^2 = (t - t_i)^2</math></p> |
||
− | <p>Как |
+ | <p>Как видно, у нас четыре неизвестных (положение приёмника <math display="inline">x</math>; <math display="inline">y</math>; <math display="inline">z</math> и точное время <math display="inline">t</math>, когда он получил сигнал). Таким образом, нам нужно как минимум <math display="inline">N</math> = 4 спутника для определения местоположения приёмника. Система из ровно четырёх навигационных уравнений в общем случае может иметь несколько решений. Но обычно видно более <math display="inline">N</math> > 4 спутников, и у нас имеется переопределённая система нелинейных уравнений (из-за шума уравнения не могут быть определены точно). В этом случае нашей целью является минимизация суммы квадратов остатков:</p> |
<p><math display="inline">Sum_i((x - x_i)^2 + (y - y_i)^2 + (z - z_i)^2 - (t - t_i)^2) \xrightarrow{} min</math>.</p> |
<p><math display="inline">Sum_i((x - x_i)^2 + (y - y_i)^2 + (z - z_i)^2 - (t - t_i)^2) \xrightarrow{} min</math>.</p> |
||
− | <p>Ваша программа должна непрерывно считывать данные |
+ | <p>Ваша программа должна непрерывно считывать данные с виртуального приёмника GPS и выводить положение в каждый момент времени до тех пор, пока сигнал не будет потерян. Количество спутников (и их порядок) может изменяться. Начальное положение неизвестно, но положение между последовательными чтениями не меняется слишком сильно. Требуемая точность задаётся выражением</p> |
<p><math display="inline">Sum_i((x - x_i)^2 + (y - y_i)^2 + (z - z_i)^2 - (t - t_i)^2) < 10^{-6}</math>.</p> |
<p><math display="inline">Sum_i((x - x_i)^2 + (y - y_i)^2 + (z - z_i)^2 - (t - t_i)^2) < 10^{-6}</math>.</p> |
||
<p>Гарантируется, что такое решение существует. Координаты <math display="inline">x</math>; <math display="inline">y</math>; <math display="inline">z</math> находятся в диапазоне [-10; 10], время <math display="inline">t</math> находится в диапазоне [-1000; 1000].</p> |
<p>Гарантируется, что такое решение существует. Координаты <math display="inline">x</math>; <math display="inline">y</math>; <math display="inline">z</math> находятся в диапазоне [-10; 10], время <math display="inline">t</math> находится в диапазоне [-1000; 1000].</p> |
||
− | <p>Количество |
+ | <p>Количество считываний гарантированно не превысит <math display="inline">10^5</math>.</p></li> |
+ | |||
⚫ | |||
+ | |||
⚫ | |||
⚫ | |||
⚫ | |||
<p><math display="inline">A\xrightarrow{k_1} n_1B_1 + n_2B_2 + ... + n_IB_I</math>.</p> |
<p><math display="inline">A\xrightarrow{k_1} n_1B_1 + n_2B_2 + ... + n_IB_I</math>.</p> |
||
− | <p>Для этой реакции мы можем записать следующую систему |
+ | <p>Для этой реакции мы можем записать следующую систему дифференциальных уравнений:</p> |
<p><math display="inline">d[A]/dt=-k_1[A]</math></p> |
<p><math display="inline">d[A]/dt=-k_1[A]</math></p> |
||
<p><math display="inline">d[B_i]/dt=n_ik_1[A]</math>, <math display="inline">i=1,...,I</math>.</p> |
<p><math display="inline">d[B_i]/dt=n_ik_1[A]</math>, <math display="inline">i=1,...,I</math>.</p> |
||
− | <p>Здесь <math display="inline">[A]</math> - концентрация молекулы <math display="inline">A</math>, <math display="inline">[B_i]</math> - концентрация молекул <math display="inline">B_i</math>, а <math display="inline">k_1</math> - |
+ | <p>Здесь <math display="inline">[A]</math> - концентрация молекулы <math display="inline">A</math>, <math display="inline">[B_i]</math> - концентрация молекул <math display="inline">B_i</math>, а <math display="inline">k_1</math> - постоянная скорости реакции.</p> |
− | <p>В реакциях второго порядка для продолжения реакции |
+ | <p>В реакциях второго порядка для продолжения реакции необходимы две молекулы:</p> |
<p><math display="inline">A+C\xrightarrow{k_2} n_1B_1 + n_2B_2 + ... + n_IB_I</math>.</p> |
<p><math display="inline">A+C\xrightarrow{k_2} n_1B_1 + n_2B_2 + ... + n_IB_I</math>.</p> |
||
<p><math display="inline">d[A]/dt=-k_2[A][C]</math></p> |
<p><math display="inline">d[A]/dt=-k_2[A][C]</math></p> |
||
<p><math display="inline">d[B_i]/dt=n_ik_2[A][C]</math>, <math display="inline">i=1,...,I</math>.</p></li> |
<p><math display="inline">d[B_i]/dt=n_ik_2[A][C]</math>, <math display="inline">i=1,...,I</math>.</p></li> |
||
+ | |||
+ | |||
<li><p>Простейшим примером колебательной химической системы является Oregonator [http://www.scholarpedia.org/article/Oregonator], которая состоит из следующих реакций:</p> |
<li><p>Простейшим примером колебательной химической системы является Oregonator [http://www.scholarpedia.org/article/Oregonator], которая состоит из следующих реакций:</p> |
||
<p><math display="inline">A+Y\xrightarrow{k_1}X+P</math>.</p> |
<p><math display="inline">A+Y\xrightarrow{k_1}X+P</math>.</p> |
||
Line 159: | Line 174: | ||
<p>На первой строке содержится одно целое число <math display="inline">T</math> = 1...1000 – как долго мы будем запускать наш виртуальный реактор. Вторая строка содержит шесть вещественных чисел – начальные концентрации <math display="inline">X</math>, <math display="inline">Y</math>, <math display="inline">Z</math>, <math display="inline">A</math>, <math display="inline">B</math> и <math display="inline">P</math>. Третья строка содержит пять вещественных чисел – константы скорости реакций <math display="inline">k_1,...,k_5</math>.</p> |
<p>На первой строке содержится одно целое число <math display="inline">T</math> = 1...1000 – как долго мы будем запускать наш виртуальный реактор. Вторая строка содержит шесть вещественных чисел – начальные концентрации <math display="inline">X</math>, <math display="inline">Y</math>, <math display="inline">Z</math>, <math display="inline">A</math>, <math display="inline">B</math> и <math display="inline">P</math>. Третья строка содержит пять вещественных чисел – константы скорости реакций <math display="inline">k_1,...,k_5</math>.</p> |
||
<p>Вывод</p> |
<p>Вывод</p> |
||
− | <p>На выходе должны быть шесть вещественных чисел – конечные концентрации <math display="inline">X</math>, <math display="inline">Y</math>, <math display="inline">Z</math>, <math display="inline">A</math>, <math display="inline">B</math> и <math display="inline">P</math>. Требуемая точность - <math display="inline">10^-6</math>.</p></li> |
+ | <p>На выходе должны быть шесть вещественных чисел – конечные концентрации <math display="inline">X</math>, <math display="inline">Y</math>, <math display="inline">Z</math>, <math display="inline">A</math>, <math display="inline">B</math> и <math display="inline">P</math>. Требуемая точность - <math display="inline">10^{-6}</math>.</p></li> |
</ol> |
</ol> |
||
Revision as of 11:00, 3 April 2024
Вычислительная математика
- Квалификация выпускника: бакалавр
- Направление подготовки: 09.03.01 - “Информатика и вычислительная техника”
- Направленность (профиль) образовательной программы: Математические основы ИИ
- Программу разработал(а):
1. Краткая характеристика дисциплины
Курс посвящен проблемам решения прикладных математических задач методами вычислительных алгоритмов и изучению их свойств.
2. Перечень планируемых результатов обучения
- Целью освоения дисциплины
Данный курс отвечает на следующие вопросы. К каким задачам применим алгоритм или метод? Как работает метод? Как сравнивать методы с альтернативными с использованием вычислительных метрик? Что может пойти не так? Каковы источники ошибок и неопределенности?
- Задачами дисциплины являются
- Освоение основных численных алгоритмов и методов, применимых для решения математических задач.
- Изучение численной дифференциации и интеграции и их практическое применение.
- Разработка навыков решения систем нелинейных и линейных алгебраических уравнений численными методами различных типов.
- Овладение методами интерполяции и регрессии для анализа и предсказания данных.
- Получение практического опыта в численном решении систем нелинейных дифференциальных уравнений.
Общая характеристика результата обучения по дисциплине
- Знания:
- Основные принципы численного решения математических задач.
- Принципы численного дифференцирования и интегрирования.
- Различные методы численного решения систем нелинейных алгебраических уравнений.
- Методы интерполяции и регрессии.
- Основы численного решения систем нелинейных дифференциальных уравнений.
- Умения:
- Применять численные методы для решения разнообразных математических задач.
- Выполнять численную дифференциацию и интеграцию.
- Применять различные методы для решения систем нелинейных алгебраических уравнений.
- Применять методы интерполяции и регрессии для анализа данных.
- Проводить численное решение систем нелинейных дифференциальных уравнений.
- Навыки (владения):
- Решение типичных математических задач с использованием численных методов.
- Проведение нелинейной регрессии и интерполяции.
- Выполнение численной дифференциации и интегрирования.
- Решение систем нелинейных алгебраических уравнений численными методами.
- Решение систем нелинейных дифференциальных уравнений численными методами.
3. Структура и содержание дисциплины
№ п/п |
Наименование раздела дисциплины |
Содержание дисциплины по темам |
1. | Численное дифференцирование и интегрирование, интерполяция функций, решение систем линейных алгебраических уравнений | Темы, рассматриваемые в этом разделе:
Основные аспекты численных вычислений. Точность чисел с плавающей запятой. Численное дифференцирование. Метод неопределенных коэффициентов. Интерполяция функций. Сплайны. Численное интегрирование. Формулы квадратур. Решение систем линейных алгебраических уравнений. |
2. | Решение нелинейных алгебраических уравнений и систем. Решение ОДУ и УПД. Дискретные ряды Фурье. | Темы, рассматриваемые в этом разделе:
Численное решение нелинейных алгебраических уравнений и систем. Основные концепции теории разностных схем. Численные методы решения задачи с начальными условиями для обыкновенных дифференциальных уравнений (ОДУ). Численные методы решения задачи с краевыми условиями для ОДУ. Дискретные ряды Фурье. Численное решение ОДУ второго порядка дискретными рядами Фурье. Численное решение уравнений в частных производных (УПД) дискретными рядами Фурье. Метод переменных направлений. Численное решение УПД методом конечных разностей. |
4. Методические и оценочные материалы
Задания для практических занятий:
№ п/п |
Наименование раздела дисциплины (модуля) |
Перечень рассматриваемых тем (вопросов) |
1. | Численное дифференцирование и интегрирование, интерполяция функций, решение систем линейных алгебраических уравнений | Выполнить численное дифференцирование методом неопределенных коэффициентов.
Выполнить интерполяцию функции, используя сплайны. Выполнить численное интегрирование, используя формулы квадратур. Решить систему линейных алгебраических уравнений, используя методы итерации. Решить систему линейных алгебраических уравнений, используя методы вариации. |
2. | Решение нелинейных алгебраических уравнений и систем. Решение ОДУ и УПД. Дискретные ряды Фурье. | Выполнить численное решение нелинейных алгебраических уравнений и систем.
Выполнить численное решение задачи с начальными условиями для обыкновенных дифференциальных уравнений (ОДУ). Выполнить численное решение задачи с краевыми условиями для ОДУ. Выполнить численное решение ОДУ и УПД с использованием дискретных рядов Фурье. Выполнить численное решение уравнений в частных производных (УПД) с помощью метода конечных разностей. |
Текущий контроль успеваемости обучающихся по дисциплине:
№ п/п |
Наименование раздела дисциплины |
Форма текущего контроля |
Материалы текущего контроля |
Контрольные вопросы для подготовки к промежуточной аттестации:
№ п/п |
Наименование раздела дисциплины |
Вопросы |
1. | Численное дифференцирование и интегрирование, интерполяция функций, решение систем линейных алгебраических уравнений |
|
2. | Решение нелинейных алгебраических уравнений и систем. Решение ОДУ и УПД. Дискретные ряды Фурье. |
|
Вопросы/Задания к промежуточной аттестации в устной/письменной форме:
1.. Как выполнить численное дифференцирование с помощью метода неопределенных коэффициентов?
2. Как выполнить интерполяцию функции с использованием сплайнов?
3. Как выполнить численное интегрирование с использованием квадратурных формул?
4. Как решить систему линейных алгебраических уравнений с использованием методов итерации?
5. Как решить систему линейных алгебраических уравнений с использованием методов вариации?
6. Как выполнить численное решение нелинейных алгебраических уравнений и систем?
7. Как выполнить численное решение задачи Коши для обыкновенных дифференциальных уравнений (ОДУ)?
8. Как выполнить численное решение краевых задач для ОДУ?
9. Как выполнить численное решение ОДУ и Уравнений в частных производных (УрЧП) с использованием Дискретного ряда Фурье?
10. Как выполнить численное решение УрЧП с использованием методов конечных разностей?
Перечень учебно-методического обеспечения дисциплины
Список основной литературы: Gilbert Strang. Computational Science and Engineering. Wellesley, MA: Wellesley-Cambridge Press, 2007. 727 Pg. ISBN: 9780961408817. I.B. Petrov, A.I. Lobanov. Lectures in Computational Mathematics. M.: Internet University of Information Technology, 2006. 523 c. ISBN: 5-94774-542-9.
Методические указания для обучающихся по освоению дисциплины
Вид учебных занятий/деятельности |
Деятельность обучающегося |
Методы и технологии обучения, способствующие формированию компетенции
Методы и технологии обучения, способствующие формированию компетенции |