Участник:Lr2k/Песочница
Материал из MachineLearning.
Строка 19: | Строка 19: | ||
Предположим, что система функций <tex>\Phi_k(x)</tex> такова, что при любом выборе узлов <tex>a<x_1<\cdots<x_i<\cdots<x_n=b</tex> отличен от нуля определитель системы: | Предположим, что система функций <tex>\Phi_k(x)</tex> такова, что при любом выборе узлов <tex>a<x_1<\cdots<x_i<\cdots<x_n=b</tex> отличен от нуля определитель системы: | ||
- | <p align="center"><tex>\Delta(\Phi) = \begin{vmatrix} \Phi_0(x_0) & \Phi_1(x_0) & \cdots & \Phi_n(x_0) \\\Phi_0(x_1) & \Phi_1(x_1) & \cdots & \Phi_n(x_1)\\ \ | + | <p align="center"><tex>\Delta(\Phi) = \begin{vmatrix} \Phi_0(x_0) & \Phi_1(x_0) & \cdots & \Phi_n(x_0) \\\Phi_0(x_1) & \Phi_1(x_1) & \cdots & \Phi_n(x_1)\\ \hdots{4} \\\Phi_0(x_n) & \Phi_1(x_n) & \cdots & \Phi_n(x_n)\end{vmatrix}</tex>.</p> |
Тогда по заданным <tex>y_i (i=1,\cdots, n)</tex> однозначно определяются коэффициенты <tex>c_k (k=1,\cdots, n)</tex>. | Тогда по заданным <tex>y_i (i=1,\cdots, n)</tex> однозначно определяются коэффициенты <tex>c_k (k=1,\cdots, n)</tex>. | ||
Строка 25: | Строка 25: | ||
== Изложение метода == | == Изложение метода == | ||
Интерполяция кубическими сплайнами является частным случаем кусочно-полиномиальной интерполцией. В этом специальном случае между любыми двумя соседними узлами функция интерполируется кубическим полиномом. его коэффициенты на каждом интервале определяются из условий сопряжения в узлах: | Интерполяция кубическими сплайнами является частным случаем кусочно-полиномиальной интерполцией. В этом специальном случае между любыми двумя соседними узлами функция интерполируется кубическим полиномом. его коэффициенты на каждом интервале определяются из условий сопряжения в узлах: | ||
- | <p align="center"><tex> | + | <p align="center"><tex>f_i=y_i, |
f'(x_i-0)=f'(x_i+0), | f'(x_i-0)=f'(x_i+0), | ||
- | f''(x_i-0)=f''(x_i+0), i=1, 2, \cdots, n-1. | + | f''(x_i-0)=f''(x_i+0), i=1, 2, \cdots, n-1.</tex></p> |
Кроме того, на границе при <tex>x=x_0</tex> и <tex>x=x_n</tex> ставятся условия | Кроме того, на границе при <tex>x=x_0</tex> и <tex>x=x_n</tex> ставятся условия | ||
Строка 37: | Строка 37: | ||
Будем искать кубический полином в виде | Будем искать кубический полином в виде | ||
- | {{ eqno | | + | {{ eqno | 3 }} |
- | <p align="center"><tex>f | + | <p align="center"><tex>f(x)=a_i+b_i(x-x_{i-1})+c_i(x-x_{i-1})^2+d_i(x-x_{i-1})^3, x_{i-1}\le \x\le \x_i.</tex></p> |
- | === | + | Из условия <tex>f_i=y_i</tex> имеем |
+ | {{ eqno | 4 }} | ||
+ | <p align="center"><tex>f(x_{i-1})=a_i=y_{i-1}, | ||
- | + | f(x_i)=a_i+b_ih_i+c_ih_i^2+d_ih_i^3=y_i, | |
- | + | h_i=x_i-x_{i-1}, i=1, 2, \cdots, n-1.</tex></p> | |
- | + | Вычислим производные: | |
+ | <p align="center"><tex>f'(x)=b_i+2c_i(x-x_{i-1})+3d_i(x-x_{i-1})^2, | ||
+ | |||
+ | f''(x)=2c_i+6d_i(x-x_{i-1}), x_{i-1}\le \x\le \x_i,</tex></p> | ||
+ | |||
+ | и потребуем их непрерывности при <tex>x=x_i</tex>: | ||
{{ eqno | 5 }} | {{ eqno | 5 }} | ||
- | <p align="center"><tex> | + | <p align="center"><tex>b_{i+1}=b_i+2c_ih_i + 3d_ih_i^2, |
- | + | c_{i+1}=c_i+3d_ih_i, i=1, 2, \cdots, n-1.</tex></p> | |
- | + | Общее число неизвестных коэффициентов, очевидно, равно <tex>4n</tex>, число уравнений {{eqref|4}} и {{eqref|5}} равно <tex>4n-2</tex>. Недостающие два уравнения получаем из условия {{eqref|2}} при <tex>x=x_0</tex> и <tex>x=x_n</tex>: | |
+ | <p align="center"><tex>c_1=0, c_n+3d_nh_n=0.</tex></p> | ||
- | <p align="center"><tex> | + | Выражение из {{eqref|5}} <tex>d_i=\frac{c_{i+1}-c_i}{3h_i}</tex>, подставляя это выражение в {{eqref|4}} и исключая <tex>a_i=y_{i-1}</tex>, получим |
+ | <p align="center"><tex>b_i=\[\frac{y_i-y_{i-1}}h_i\]-\frac{1}{3}h_i(c_{i+1}+2c_i), i=1, 2, \cdots, n-1, | ||
- | + | b_n=\[\frac{y_n-y_{n-1}}h_n\]-\frac{2}{3}h_nc_n,.</tex></p> | |
+ | Подставив теперь выражения для <tex>b_i, b_{i+1}</tex> и <tex>d_i</tex> в первую формулу {{eqref|5}}, после несложных преобразований получаем для определения <tex>c_i</tex> разностное уравнение второго порядка | ||
{{ eqno | 6 }} | {{ eqno | 6 }} | ||
- | <p align="center"><tex> | + | <p align="center"><tex>h_ic_i+2(h_i+h_{i+1})c_{i+1}+h_{i+1}c_{i+2}=s\left(\frac{y_{i+1}-y_i}{h_{i+1}} - \frac{y_{i+1}-y_i}{h_{i+1}}\right), i=1, 2, \cdots, n-1.</tex></p> |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
+ | С краевыми условиями | ||
{{ eqno | 7 }} | {{ eqno | 7 }} | ||
- | <p align="center"><tex> | + | <p align="center"><tex>c_1=0, c_{n+1}=0.</tex></p> |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | { | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | и, | + | Условие <tex>c_{n+1}=0</tex> эквивалентно условию <tex>c_n+3d_nh_n=0</tex> и уравнению <tex>c_{i+1} = c_i+d_ih_i</tex>. Разностное уравнение {{eqref|6}} с условиями {{eqref|7}} можно решить методом прогонки, представив в виде системы линейных алгебраических уравнений вида <tex>~A*x=F</tex>, где |
- | + | ||
- | + | === Метод прогонки === | |
- | + | '''Трёхдиагональной матрицей''' называют [[Матрица (математика)|матрицу]] следующего вида: | |
- | + | : <math>A = \begin{pmatrix} C_1 & B_1 & 0 & 0 & \cdots & 0 & 0 | |
+ | \\ A_2 & C_2 & B_2 & 0 & \cdots & 0 & 0 | ||
+ | \\ 0 & A_3 & C_3 & B_3 & \cdots & 0 & 0 | ||
+ | \\ \cdots & \cdots & \cdots & \cdots & \cdots & \cdots & \cdots | ||
+ | \\ \cdots & \cdots & \cdots & \cdots & \cdots & \cdots & \cdots | ||
+ | \\ \cdots & \cdots & \cdots & \cdots & \cdots & \cdots & B_{n-1} | ||
+ | \\ 0 & 0 & 0 & 0 & \cdots & A_{n} & C_{n} | ||
+ | \end{pmatrix} | ||
+ | </math>. | ||
- | + | [[Система линейных алгебраических уравнений|Системы линейных алгебраических уравнений]] с такими матрицами встречаются при решении многих [[задача|задач]] математики и физики. Краевые условия <math>x_1</math> и <math>x_n</math>, которые берутся из контекста задачи, задают первую и последнюю строки. Так краевое условие первого рода <math>F(x=x_1)=F_1</math> определит перую строку в виде <math>C_1=1</math>, <math>B_1=0</math>, а условие второго рода <math>dF/dx(x=x_1)=F_1</math> будет соответствовать значениям <math>C_1=-1</math>, <math>B_1=1</math>. | |
- | < | + | |
- | + | Для решения систем вида <math>~A*x=F</math> используется '''метод прогонки''', основанный на предположении, что искомые неизвестные связаны рекуррентным соотношением: | |
- | + | : <math>x_i = \alpha_{i+1}x_{i+1} + \beta_{i+1}\,\! | |
+ | </math> , где <math>~i=1,n-1</math><font face="Courier New"> (1)</font> | ||
+ | Используя это соотношение, выразим x<sub>i-1</sub> и x<sub>i</sub> через x<sub>i+1</sub> и подставим | ||
+ | в i-e уравнение: | ||
+ | : <math> | ||
+ | \left(A_i\alpha_i\alpha_{i+1} + C_i\alpha_{i+1} + B_i\right)x_{i+1} + A_i\alpha_i\beta_{i+1} + A_i\beta_i + C_i\beta_{i+1} - F_i = 0 | ||
+ | </math>, | ||
+ | где F<sub>i</sub> - правая часть i-го уравнения. Это соотношение будет выполняться независимо от решения, если потребовать | ||
+ | : <math>\begin{matrix} | ||
+ | A_i\alpha_i\alpha_{i+1} + C_i\alpha_{i+1} + B_i = 0\end{matrix}</math> | ||
+ | : <math>\begin{matrix} | ||
+ | A_i\alpha_i\beta_{i+1} + A_i\beta_i + C_i\beta_{i+1} - F_i = 0 | ||
+ | \end{matrix}</math> | ||
+ | Отсюда следует: | ||
+ | : <math> | ||
+ | \alpha_{i+1} = {-B_i \over A_i\alpha_i + C_i}\,\! | ||
+ | </math> | ||
- | |||
- | |||
- | + | : <math> | |
+ | \beta_{i+1} = {F_i - A_i\beta_i \over A_i\alpha_i + C_i} | ||
+ | \,\!</math> | ||
+ | Из первого уравнения получим: | ||
+ | : <math> | ||
+ | \alpha_2 = {-B_1 \over C_1} | ||
+ | \,\!</math>. | ||
+ | : <math> | ||
+ | \beta_2 = {F_1 \over C_1} | ||
+ | \,\!</math>. | ||
+ | После нахождения прогоночных коэффициентов <math>\alpha</math> и <math>\beta</math>, используя уравнение (1), получим решение системы. При этом, | ||
+ | : <math> | ||
+ | x_n = {F_n-A_n\beta_n \over C_n+A_n\alpha_n} \,\! | ||
+ | </math> | ||
== Числовой пример == | == Числовой пример == |
Версия 11:06, 13 октября 2008
Содержание |
Введение
Постановка математической задачи
Одной из основных задач численного анализа является задача об интерполяции функций. Пусть на отрезке задана сетка и в её узлах заданы значения функции , равные . Требуется построить интерполянту — функцию , совпадающую с функцией в узлах сетки:
Основная цель интерполяции — получить быстрый (экономичный) алгоритм вычисления значений для значений , не содержащихся в таблице данных.
Интерполируюшие функции , как правило строятся в виде линейных комбинаций некоторых элементарных функций:
где — фиксированный линейно независимые функции, — не определенные пока коэффициенты.
Из условия (1) получаем систему из уравнений относительно коэффициентов :
Предположим, что система функций такова, что при любом выборе узлов отличен от нуля определитель системы:
.
Тогда по заданным однозначно определяются коэффициенты .
Изложение метода
Интерполяция кубическими сплайнами является частным случаем кусочно-полиномиальной интерполцией. В этом специальном случае между любыми двумя соседними узлами функция интерполируется кубическим полиномом. его коэффициенты на каждом интервале определяются из условий сопряжения в узлах:
Кроме того, на границе при и ставятся условия
Будем искать кубический полином в виде
Из условия имеем
Вычислим производные:
и потребуем их непрерывности при :
Общее число неизвестных коэффициентов, очевидно, равно , число уравнений (4) и (5) равно . Недостающие два уравнения получаем из условия (2) при и :
Выражение из (5) , подставляя это выражение в (4) и исключая , получим
Подставив теперь выражения для и в первую формулу (5), после несложных преобразований получаем для определения разностное уравнение второго порядка
С краевыми условиями
Условие эквивалентно условию и уравнению . Разностное уравнение (6) с условиями (7) можно решить методом прогонки, представив в виде системы линейных алгебраических уравнений вида , где
Метод прогонки
Трёхдиагональной матрицей называют матрицу следующего вида:
- <math>A = \begin{pmatrix} C_1 & B_1 & 0 & 0 & \cdots & 0 & 0
\\ A_2 & C_2 & B_2 & 0 & \cdots & 0 & 0 \\ 0 & A_3 & C_3 & B_3 & \cdots & 0 & 0 \\ \cdots & \cdots & \cdots & \cdots & \cdots & \cdots & \cdots \\ \cdots & \cdots & \cdots & \cdots & \cdots & \cdots & \cdots \\ \cdots & \cdots & \cdots & \cdots & \cdots & \cdots & B_{n-1} \\ 0 & 0 & 0 & 0 & \cdots & A_{n} & C_{n} \end{pmatrix} </math>.
Системы линейных алгебраических уравнений с такими матрицами встречаются при решении многих задач математики и физики. Краевые условия <math>x_1</math> и <math>x_n</math>, которые берутся из контекста задачи, задают первую и последнюю строки. Так краевое условие первого рода <math>F(x=x_1)=F_1</math> определит перую строку в виде <math>C_1=1</math>, <math>B_1=0</math>, а условие второго рода <math>dF/dx(x=x_1)=F_1</math> будет соответствовать значениям <math>C_1=-1</math>, <math>B_1=1</math>.
Для решения систем вида <math>~A*x=F</math> используется метод прогонки, основанный на предположении, что искомые неизвестные связаны рекуррентным соотношением:
- <math>x_i = \alpha_{i+1}x_{i+1} + \beta_{i+1}\,\!
</math> , где <math>~i=1,n-1</math> (1)
Используя это соотношение, выразим xi-1 и xi через xi+1 и подставим в i-e уравнение:
- <math>
\left(A_i\alpha_i\alpha_{i+1} + C_i\alpha_{i+1} + B_i\right)x_{i+1} + A_i\alpha_i\beta_{i+1} + A_i\beta_i + C_i\beta_{i+1} - F_i = 0 </math>,
где Fi - правая часть i-го уравнения. Это соотношение будет выполняться независимо от решения, если потребовать
- <math>\begin{matrix}
A_i\alpha_i\alpha_{i+1} + C_i\alpha_{i+1} + B_i = 0\end{matrix}</math>
- <math>\begin{matrix}
A_i\alpha_i\beta_{i+1} + A_i\beta_i + C_i\beta_{i+1} - F_i = 0 \end{matrix}</math>
Отсюда следует:
- <math>
\alpha_{i+1} = {-B_i \over A_i\alpha_i + C_i}\,\! </math>
- <math>
\beta_{i+1} = {F_i - A_i\beta_i \over A_i\alpha_i + C_i} \,\!</math>
Из первого уравнения получим:
- <math>
\alpha_2 = {-B_1 \over C_1} \,\!</math>.
- <math>
\beta_2 = {F_1 \over C_1} \,\!</math>.
После нахождения прогоночных коэффициентов <math>\alpha</math> и <math>\beta</math>, используя уравнение (1), получим решение системы. При этом,
- <math>
x_n = {F_n-A_n\beta_n \over C_n+A_n\alpha_n} \,\! </math>
Числовой пример
Вычислим по формулам прямоугольников и трапеций при интеграл
В данном случае
Зная точный ответ (14), найдем погрешности
Вторая производная функции на отрезке отрицательна, ее модуль не превышает единицы: . Величина погрешностей (15) удовлетворяет неравенствам (9) и (13):
Рекомендации программисту
Автоматический выбор шага интегрирования
Величина погрешности численного интегрирования зависит как от шага сетки , так и от гладкости подынтегральной функции . Например, в оценку (11), наряду с , входит величина
которая может сильно меняться от точки к точке и, вообще говоря, заранее неизвестна. Если величина погрешности велика, то ее можно уменьшить путем измельчения сетки на данном отрезке . Для этого прежде всего надо уметь апостериорно, т.е. после проведения расчета, оценивать погрешность.
Апостериорную оценку погрешности можно осуществить методом Рунге. Пусть какая-то квадратурная формула имеет на частичном отрезке порядок точности , т.е. . Тогда
откуда получим
Возможность апостериорно оценивать погрешность позволяет вычислять интеграл (1) с заданной точностью путем автоматического выбора шага интегрирования . Пусть используется составная квадратурная формула
где - квадратурная сумма на частичном отрезке, причем на каждом частичном отрезке используется одна и та же квадратурная формула (например, формула трапеций). Проведем на каждом частичном отрезке все вычисления дважды, один раз - с шагом и второй раз - с шагом и оценим погрешность по правилу Рунге (17).
Если для заданного будут выполняться неравенства
то получим
т.е. будет достигнута заданная точность .
Если же на каком-то из частичных отрезков оценка (18) не будет выполняться, то шаг на этом отрезке надо измельчить еще в два раза и снова оценить погрешность. Измельчение сетки на данном отрезке следует проводить до тех пор, пока не будет достигнута оценка вида (18). Заметим, что для некоторой функции такое измельчение может продолжаться слишком долго. Поэтому в соответствующей программе следует предусмотреть ограничение сверху на число измельчений,а также вожможность увеличения .
Таким образом, автоматический выбор шага интегрирования приводит к тому, что интегрирование ведется с крупным шагом на участках плавного изменения функции и с мелким шагом - на участках быстрого изменения . Это позволяет при заданной точности уменьшить количество вычислений значений по сравнению с расчетом на сетке с постоянным шагом. Подчеркнем, что для нахождения сумм не надо пересчитывать значения во всех узлах, достаточно вычислять только в новых узлах.
Заключение
Список литературы
- А.А.Самарский, А.В.Гулин. Численные методы М.: Наука, 1989.
- А.А.Самарский. Введение в численные методы М.: Наука, 1982.