
Практикум по программированию на языке С,
Вычислительная физика, Теория алгоритмов.
ФНБИК МФТИ
2015-2016 учебный год
1. Оценка оптимального шага при численном дифференцировании
Пользуясь формулой Тейлора для двух переменных, оценить относительную ошибку отношения двух чисел x и y, если известны относительные ошибки каждого из этих чисел.
Получить "симметричные" выражения для численной оценки третьей и четвертой производных функций в точке x_0. Для этого следует разложить функцию по формуле Тейлора в точках x_0 + h, x_0 - h, x_0 + 2*h и x_0 - 2*h, удерживая слагаемые до h в четвертой степени включительно.
Написать программу для численной оценки первой, второй, третьей и четвертой производных функции sin(x) в точке x_0=pi/4. Построить графики зависимостей ошибок численного расчета производных первого, второго, третьего и четвертого порядков в зависимости от шага численного дифференцирования h в логарифмическом масштабе. Под ошибкой численного определения производной в данном случае подразумевается модуль разности производных, посчитанных с помощью функций из стандартной библиотеки языка Си, и вычисленных по выведенным формулам.
2. Интерполяция
Завершить вывод системы уравнений для нахождения вторых производных в узлах интерполяции при интерполяции кубическими сплайнами.
Проинтерполировать функцию 1/(1 + 25*x*x) следующими способами на отрезке [-1,1]
- глобальным полиномом 5 степени;
- глобальным полиномом 20 степени;
- кусочным полиномом 3 степени, для построения которого следует выбирать по 4 точки из 21 одной точки, равномерно распределенных на отрезке [-1,1];
- кубическим сплайном, для построения которого следует использовать точки в количестве равном 21, равномерно распределенные на отрезке [-1,1].
На том же графике изобразить саму интерполируемую функцию. Для построения сплайнов использовать функции spline и splint из NR.
3. Решение обыкновенных дифференциальных уравнений
Завершить вывод формул для приближенного значения искомой функции в точке x_(n+1) в шагах предиктор и корректор метода Адамса второго порядка.
Решить уравнение y'' + y=0 с произвольными начальными условиями численно методом Рунге-Кутты 4 порядка и аналитически, изобразить аналитическое и чиcленное решения на одном графике. Для численного решения использовать функцию odeint из NR.
4. Решение нелинейных уравнений и построение обратной функции.
Решить уравнение f(x) - a=0 для различных значений параметра a, равномерно распределенных на некотором отрезке, методом Ньютона (касательных). Изобразить на одном графике аналитическую кривую для обратной функции x(a) и численные значения x, найденные при решении уравнения. Для решения уравнения создать отдельную функцию, принимающую в качестве аргументов желаемую точность, начальное приближение, параметр a, указатели на функцию f(x) и ее производную, и возвращающую приближенное значение корня.
5. Численное интегрирование
С помощью численного интегрирования построить график функции ошибок ( 2/sqrt(pi) int_0^x exp(-t*t) dt ) на отрезке [0,5]. Интегрирование выполнять методами трапеций, Симпсона и Ромберга (экстраполяция к пределу). Можно воспользоваться функциями qtrap, qsimp и qromb и NR. Для каждого метода выводить количество оценок подинтегральной функции, потребовавшихся для достижения заданной точности интегрирования.
6. Численное решение систем линейный алгебраических уравнений.
Написать программу для решения систем линейных алгебраических уравнений методом LU разложения. Для матрицы уравнения и правых частей использовать псевдослучайные числа, отнормированные на единицу. Получив решения, выполнить проверку, подставив решения в систему уравнений. Найти матрицу, обратную к матрице уравнения. Выполнить проверку, перемножив обратную матрицу и исходную. Можно использовать функции ludcmp и lubksb из NR. Размер матрицы может задаваться пользователем.
7. Диагонализация матриц
Аналитически определить собственные значения симметричной действительной матрицы размера 2х2 методом Якоби.
Написать программу для диагонализации симметричных действительных матриц методами Якоби и QR. Сравнить эффективность данных методов. Можно воспользоваться функциями tred2, tqli, jacobi из NR. Размер матрицы может задаваться пользователем.