Интерполяция каноническим полиномом
Материал из MachineLearning.
(→Полином в каноническом виде) |
|||
Строка 1: | Строка 1: | ||
== Постановка задачи == | == Постановка задачи == | ||
- | Пусть задана функция | + | Пусть задана функция ''f(x)'' на отрезке [''a,b'']. Задача интерполяции состоит в построении функции ''g(x)'', совпадающей с ''f(x)'' в некотором наборе точек ''x<sub>0</sub>, x<sub>1</sub>,...,x<sub>n</sub>'' из отрезка [''a,b'']. Эти точки называются узлами интерполяции. Также должно выполняться условие: ''g(x<sub>k</sub>) = y<sub>k</sub>, k=0,...,n,'' где ''y<sub>k</sub> = f(x<sub>k</sub>).'' |
- | + | ===1. Полином в каноническом виде === | |
- | + | Известно, что любая непрерывная на отрезке [a,b] функция f(x) может быть хорошо приближена некоторым полиномом P<sub>n</sub>(x). | |
+ | Справедлива следующая '''Теорема (Вейерштрасса):''' ''Для любого <tex>\eps</tex>>0 существует полином P<sub>n</sub>(x) степени <tex>n=n(\eps)</tex>, такой, что <tex>max_{x \in [a,b]}|f(x)-P_n(x)|<\eps</tex>'' | ||
- | + | В качестве аппроксимирующей функции выберем полином степени ''n'' в каноническом виде: | |
- | + | <tex>f(x)=P_n(x)=c_0+c_1x+c_2x^2+ \ldots + c_nx^n </tex> | |
- | + | Коэффициенты полинома <tex>c_i</tex> определим из условий Лагранжа <tex>P_n(x_i)=y_i</tex>, <tex>i=1, \ldots, n</tex>, что с учётом предыдущего выражения даёт систему уравнений с ''n''+1 неизвестными: | |
- | + | ||
- | Коэффициенты полинома <tex>c_i</tex> | + | |
<tex> | <tex> | ||
Строка 26: | Строка 25: | ||
Обозначим систему таких уравнений символом (*) и перепишем её следующим образом: | Обозначим систему таких уравнений символом (*) и перепишем её следующим образом: | ||
- | <tex> \sum_{p=0}^n c_i^p = y_i, \quad i=1, \ldots, n </tex> | + | <tex>\sum_{p=0}^n c_i^p = y_i, \quad i=1, \ldots, n</tex> |
- | или в матричной форме: <tex>\mathbf{Ac}=\mathbf{y},</tex> где <tex>\mathbf{c}</tex> | + | или в матричной форме: <tex>\mathbf{Ac}=\mathbf{y},</tex> где <tex>\mathbf{c}</tex> - вектор-столбец, содержащий неизвестные коэффициенты <tex>c_i</tex>, <tex>\mathbf{y}</tex> - вектор-столбец, составленный из табличных значений функции <tex>y_i</tex>, а матрица <tex>\mathbf{A}</tex> имеет вид: |
<tex> \mathbf{A} = | <tex> \mathbf{A} = | ||
Строка 39: | Строка 38: | ||
</tex> | </tex> | ||
- | Система линейных алгебраических уравнений (*) относительно неизвестных <tex>c_i</tex> | + | Система линейных алгебраических уравнений (*) относительно неизвестных <tex>c_i</tex> иметь единственное решение, если определитель матрицы <tex>\mathbf{A}</tex> отличен от нуля. |
Определитель матрицы <tex>\mathbf{A}</tex> называют определителем Вандермонда, его можно вычислить по следующей формуле: | Определитель матрицы <tex>\mathbf{A}</tex> называют определителем Вандермонда, его можно вычислить по следующей формуле: | ||
<tex>\mathbf{detA} = \prod_{i,j=0 \\ i \neq j }^n (x_i - x_j) \neq 0 </tex> | <tex>\mathbf{detA} = \prod_{i,j=0 \\ i \neq j }^n (x_i - x_j) \neq 0 </tex> | ||
+ | |||
+ | Число узлов интерполяционного полинома должно быть на единицу больше его степени. Это понятно из интуитивных соображений: через 2 точки можно провести единственную прямую, через 3 - единственную параболу и т.д. Но полином может получиться и меньшей степени. Т.е. если 3 точки лежат на одной прямой, то через них пройдёт единственный полином первой степени (но это ничему не противоречит: просто коэффициент при старшей степени равен нулю). | ||
+ | |||
+ | При достаточной простоте реализации метода он имеет существенный недостаток: число обусловленности матрицы быстро растёт с увеличением числа узлов интерполяции, что можно показать на следующем графике | ||
+ | |||
+ | |||
+ | |||
+ | '''[Рис.1 Зависимость числа обусловленности матрицы от количества узлов интерполяции]''' | ||
+ | |||
+ | |||
+ | |||
+ | Из-за плохой обусловленности матрицы рекомендуется применять другие методы интерполяции (например, метод Лагранжа). При этом важно понимать, что при теоретическом принемении различных методов они приводят к одинаковому результату, т.е. мы получим один и тот же полином. | ||
+ | |||
+ | Однако при практической реализации мы получим полиномы различной точности аппроксимации из-за погрешности вычислений аппаратуры. | ||
+ | |||
+ | ===2. Способ вычисления полинома в точке === | ||
+ | |||
+ | Чтобы изобразить графически аппроксимирующий полином, необходимо вычислить его значение в ряде точек. Это можно сделать следующими способами. | ||
+ | |||
+ | '''Первый способ.''' Можно посчитать значение a<sub>1</sub>x и сложить с a<sub>0</sub>. Далее найти a<sub>2</sub>x<sup>2</sup>, сложить с полученным результатом, и так далее. Таким образом, на j-ом шаге вычисляется значение a<sub>j</sub>x<sup>j</sup> и складывается с уже вычисленной суммой <tex>a_0 + a_1x + \ldots + a_{j-1}x^{j-1}</tex>. | ||
+ | |||
+ | Вычисление значения a<sub>j</sub>x<sup>j</sup> требует j операций умножения. Т.е. для подсчёта многочлена в заданной точке требуется (1 + 2 + ... + n) = n(n+1)/2 операций умножения и n операций сложения. Всего операций в данном случае: Op<sub>1</sub> = n(n+1)/2 + n. | ||
+ | |||
+ | '''Второй способ.''' Полином можно также легко вычислить с помощью так называемой '''схемы Горнера:''' <tex>P_n(x) = (\ldots ((a_nx + a_{n-1})x + a_{n-2})x + \ldots)x + a_0</tex> | ||
+ | |||
+ | Для вычисления значения во внутренних скобках a<sub>n</sub>x + a<sub>n-1</sub> требуется одна операция умножения и одна операция сложения. Для вычисления значения в следующих скобках (a<sub>n</sub>x + a<sub>n-1</sub>)x + a<sub>n-2</sub> требуется опять одна операция умножения и одна операция сложения, т.к. a<sub>n</sub>x + a<sub>n-1</sub> уже вычислено, и т.д. | ||
+ | |||
+ | Тогда в этом способе вычисление P<sub>n</sub>(x) потребует n операций умножения и n операций сложения, т.е. сложность вычислений Op<sub>2</sub> = n+n = 2n. | ||
+ | Ясно, что Op<sub>2</sub> << Op<sub>1</sub>. | ||
+ | |||
+ | == Анализ метода == | ||
+ | |||
+ | === 1. Сложность вычислений === | ||
+ | |||
+ | |||
+ | |||
+ | === 2. Погрешность интерполяции === | ||
+ | |||
+ | Предположим, что на отрезке интерполирования [''a,b''] функция ''f(x)'' ''n'' раз непрерывно-дифференцируема. Погрешность интерполяции складывается из погрешности самого метода и ошибок округления. | ||
+ | |||
+ | Ошибка приближения функции ''f(x)'' интерполяционным полиномом ''n''-ой степени ''P<sub>n</sub>(x)'' в точке ''x'' определяется разностью: ''R<sub>n</sub>(x) = f(x) - P<sub>n</sub>(x).'' | ||
+ | |||
+ | Погрешность ''R<sub>n</sub>(x)'' определяется следующим соотношением: | ||
+ | <br><tex>R_n(x) = \frac{f^{n+1}(\xi)}{(n+1)!}\omega_n(x)</tex> | ||
+ | |||
+ | Здесь <tex>f^{n+1}(\xi)</tex> - производная ''(n+1)''-го порядка функции ''f(x)'' в некоторой точке <tex>\xi \in [a,b],</tex> а функция <tex>\omega_n(x)</tex> определяется как | ||
+ | <br><tex>\omega_n(x)=(x-x_0)(x-x_1)\ldots (x-x_n).</tex> | ||
+ | |||
+ | Если максимальное значение производной ''f<sup>n+1</sup>(x)'' равно <tex>M_{n+1} = \sup_{x \in [x_0, x_n]} \left| f^{n+1}(x) \right| ,</tex> то для погрешности интерполяции следует оценка: <tex>\left| R_n(x) \right| = \frac{M_{n+1}}{(n+1)!}\omega_n(x).</tex> | ||
+ | |||
+ | === 3. Выбор узлов интерполяции === | ||
+ | |||
+ | Ясно, что от выбора узлов интерполируемой функции напрямую зависит, насколько точно многочлен будет являться её приближением. | ||
+ | |||
+ | |||
+ | Введём следующее '''определение''': полиномом Чебышева называется многочлен вида | ||
+ | <br><center>T<sub>k</sub>(x) = cos(k arccos x), |x|≤1.</center> | ||
+ | <p> | ||
+ | Известно (см. ссылки литературы), что если узлы интерполяции ''x<sub>0</sub>, x<sub>1</sub>,...,x<sub>n</sub>'' являются корнями полинома Чебышева степени ''n+1'', то величина <tex>\max_{x \in [a,b]} \left| \omega_{n+1}(x) \right|</tex> принимает наименьшее возможное значение по сравнению с любым другим выбором набора узлов интерполяции. | ||
+ | <p> | ||
+ | Очевидно, что в случае ''k'' = 1 функция ''T<sub>1</sub>(x)'', действительно, является полиномом первой степени, поскольку T<sub>1</sub>(x) = cos(arccos x) = x. | ||
+ | |||
+ | В случае ''k'' = 2 ''T<sub>2</sub>(x)'' тоже полином второй степени. Это нетрудно проверить. Воспользуемся известным тригонометрическим тождеством: cos2<i>θ</i> = 2cos²<i>θ</i> - 1, положив ''θ'' = arccos ''x''. | ||
+ | |||
+ | Тогда получим следующее соотношение: <i>T<sub>2</sub>(x)</i> = 2x² - 1. | ||
+ | |||
+ | С помощью тригонометрического тождества cos(<i>k</i> + 1)<i>θ</i> = 2cos<i>θ</i>cos<i>kθ</i> - cos(<i>k</i> - 1) легко показать, что для полиномов Чебышева справедливо реккурентное соотношение: | ||
+ | <p align="center"><i>T<sub>k+1</sub>(x) = 2xT<sub>k</sub>(x) - T<sub>k-1</sub>(x)</i></p> | ||
+ | <p> | ||
+ | При помощи данного соотношения можно получить формулы для полиномов Чебышева любой степени. | ||
+ | <p> | ||
+ | Корни полинома Чебышева легко находятя из уравнения: ''T<sub>k</sub>(x)'' = cos(''k'' arccos ''x'') = 0. Получаем, что уравнение имеет ''k'' различных корней, расположенных на отрезке [-1,1]: <tex>x_m = \cos \frac{2m+1}{2k}\pi, \, m = 0,1, \cdots, k-1,</tex> которые и следует выбирать в качестве узлов интерполирования. | ||
+ | <p> | ||
+ | Нетрудно видеть, что корни на [-1,1] расположены симметрично и неравномерно - чем ближе к краям отрезка, тем корни расположены плотнее. Максимальное значение модуля полинома Чебышева равно 1 и достигается в точках <tex>\cos \frac{m}{k}\pi.</tex> | ||
+ | <p> | ||
+ | Если положить <tex>\omega_k(x) = \frac1{2^{k-1}}T_k(x),</tex> то для того, чтобы коэффициент при старшей степени полинома <i>ω<sub>k</sub>(x)</i> был равен 1, <tex>\max_{x \in [-1,1]}\omega_k(x) = \frac1{2^{k-1}}.</tex> | ||
+ | <p> | ||
+ | Известно, что для любого полинома ''p<sub>k</sub>(x)'' степени ''k'' с коэффициентом, равным единице при старшей производной верно неравенство <tex>\max_{x \in [-1,1]}p_k(x) \geq \frac1{2^{k-1}},</tex> т.е. полиномы Чебышева являются полиномами, наименее уклоняющимися от нуля. | ||
== Смотри также == | == Смотри также == |
Версия 13:39, 17 октября 2008
Содержание |
Постановка задачи
Пусть задана функция f(x) на отрезке [a,b]. Задача интерполяции состоит в построении функции g(x), совпадающей с f(x) в некотором наборе точек x0, x1,...,xn из отрезка [a,b]. Эти точки называются узлами интерполяции. Также должно выполняться условие: g(xk) = yk, k=0,...,n, где yk = f(xk).
1. Полином в каноническом виде
Известно, что любая непрерывная на отрезке [a,b] функция f(x) может быть хорошо приближена некоторым полиномом Pn(x). Справедлива следующая Теорема (Вейерштрасса): Для любого >0 существует полином Pn(x) степени , такой, что
В качестве аппроксимирующей функции выберем полином степени n в каноническом виде:
Коэффициенты полинома определим из условий Лагранжа , , что с учётом предыдущего выражения даёт систему уравнений с n+1 неизвестными:
Обозначим систему таких уравнений символом (*) и перепишем её следующим образом:
или в матричной форме: где - вектор-столбец, содержащий неизвестные коэффициенты , - вектор-столбец, составленный из табличных значений функции , а матрица имеет вид:
Система линейных алгебраических уравнений (*) относительно неизвестных иметь единственное решение, если определитель матрицы отличен от нуля.
Определитель матрицы называют определителем Вандермонда, его можно вычислить по следующей формуле:
Число узлов интерполяционного полинома должно быть на единицу больше его степени. Это понятно из интуитивных соображений: через 2 точки можно провести единственную прямую, через 3 - единственную параболу и т.д. Но полином может получиться и меньшей степени. Т.е. если 3 точки лежат на одной прямой, то через них пройдёт единственный полином первой степени (но это ничему не противоречит: просто коэффициент при старшей степени равен нулю).
При достаточной простоте реализации метода он имеет существенный недостаток: число обусловленности матрицы быстро растёт с увеличением числа узлов интерполяции, что можно показать на следующем графике
[Рис.1 Зависимость числа обусловленности матрицы от количества узлов интерполяции]
Из-за плохой обусловленности матрицы рекомендуется применять другие методы интерполяции (например, метод Лагранжа). При этом важно понимать, что при теоретическом принемении различных методов они приводят к одинаковому результату, т.е. мы получим один и тот же полином.
Однако при практической реализации мы получим полиномы различной точности аппроксимации из-за погрешности вычислений аппаратуры.
2. Способ вычисления полинома в точке
Чтобы изобразить графически аппроксимирующий полином, необходимо вычислить его значение в ряде точек. Это можно сделать следующими способами.
Первый способ. Можно посчитать значение a1x и сложить с a0. Далее найти a2x2, сложить с полученным результатом, и так далее. Таким образом, на j-ом шаге вычисляется значение ajxj и складывается с уже вычисленной суммой .
Вычисление значения ajxj требует j операций умножения. Т.е. для подсчёта многочлена в заданной точке требуется (1 + 2 + ... + n) = n(n+1)/2 операций умножения и n операций сложения. Всего операций в данном случае: Op1 = n(n+1)/2 + n.
Второй способ. Полином можно также легко вычислить с помощью так называемой схемы Горнера:
Для вычисления значения во внутренних скобках anx + an-1 требуется одна операция умножения и одна операция сложения. Для вычисления значения в следующих скобках (anx + an-1)x + an-2 требуется опять одна операция умножения и одна операция сложения, т.к. anx + an-1 уже вычислено, и т.д.
Тогда в этом способе вычисление Pn(x) потребует n операций умножения и n операций сложения, т.е. сложность вычислений Op2 = n+n = 2n. Ясно, что Op2 << Op1.
Анализ метода
1. Сложность вычислений
2. Погрешность интерполяции
Предположим, что на отрезке интерполирования [a,b] функция f(x) n раз непрерывно-дифференцируема. Погрешность интерполяции складывается из погрешности самого метода и ошибок округления.
Ошибка приближения функции f(x) интерполяционным полиномом n-ой степени Pn(x) в точке x определяется разностью: Rn(x) = f(x) - Pn(x).
Погрешность Rn(x) определяется следующим соотношением:
Здесь - производная (n+1)-го порядка функции f(x) в некоторой точке а функция определяется как
Если максимальное значение производной fn+1(x) равно то для погрешности интерполяции следует оценка:
3. Выбор узлов интерполяции
Ясно, что от выбора узлов интерполируемой функции напрямую зависит, насколько точно многочлен будет являться её приближением.
Введём следующее определение: полиномом Чебышева называется многочлен вида
Известно (см. ссылки литературы), что если узлы интерполяции x0, x1,...,xn являются корнями полинома Чебышева степени n+1, то величина принимает наименьшее возможное значение по сравнению с любым другим выбором набора узлов интерполяции. <p> Очевидно, что в случае k = 1 функция T1(x), действительно, является полиномом первой степени, поскольку T1(x) = cos(arccos x) = x. В случае k = 2 T2(x) тоже полином второй степени. Это нетрудно проверить. Воспользуемся известным тригонометрическим тождеством: cos2θ = 2cos²θ - 1, положив θ = arccos x. Тогда получим следующее соотношение: T2(x) = 2x² - 1. С помощью тригонометрического тождества cos(k + 1)θ = 2cosθcoskθ - cos(k - 1) легко показать, что для полиномов Чебышева справедливо реккурентное соотношение: <p align="center">Tk+1(x) = 2xTk(x) - Tk-1(x)
При помощи данного соотношения можно получить формулы для полиномов Чебышева любой степени. <p> Корни полинома Чебышева легко находятя из уравнения: Tk(x) = cos(k arccos x) = 0. Получаем, что уравнение имеет k различных корней, расположенных на отрезке [-1,1]: которые и следует выбирать в качестве узлов интерполирования. <p> Нетрудно видеть, что корни на [-1,1] расположены симметрично и неравномерно - чем ближе к краям отрезка, тем корни расположены плотнее. Максимальное значение модуля полинома Чебышева равно 1 и достигается в точках <p> Если положить то для того, чтобы коэффициент при старшей степени полинома ωk(x) был равен 1, <p> Известно, что для любого полинома pk(x) степени k с коэффициентом, равным единице при старшей производной верно неравенство т.е. полиномы Чебышева являются полиномами, наименее уклоняющимися от нуля.