- •Оглавление
- •Введение
- •Краткий обзор системы
- •Знакомство с интерфейсом Scilab
- •Функции, определяемые пользователем и процедуры
- •Циклы
- •Погрешность результата численного решения задачи
- •Приближенные вычисления определенных интегралов
- •Методы прямоугольников
- •Метод трапеций
- •Метод Симпсона
- •Квадратуры Гаусса
- •Методы Монте-Карло
- •Вычисление определенных интегралов в системе Scilab
- •Решение систем линейных алгебраических уравнений
- •Метод Гаусса
- •Формула Крамера
- •Метод простых итераций
- •Метод Зейделя
- •Метод отражений
- •Метод LU-разложений
- •Решение нелинейных алгебраических уравнений
- •Метод половинного деления
- •Метод секущих
- •Метод секущих (с изменяемым углом)
- •Метод Ньютона (касательных)
- •Метод Бернулли
- •Аппроксимация и интерполирование функций
- •Интерполяционный многочлен Лагранжа
- •Интерполяционная формула Ньютона
- •Интерполяционные формулы Гаусса
- •Линейная аппроксимация по методу наименьших квадратов
- •Кусочно-кубические сплайны
- •Анимация на плоскости
- •Анимация в пространстве
- •Метод Рунге-Кутта
- •Метод Эйлера
- •Метод Прогонки
- •Метод Пикара
- •Возможности Scilab для решения ОДУ
- •Список Литературы
69
Глава_5.
Аппроксимация и интерполирование функций
Аппроксимация – это замена одной функции другой функцией, близкой к исходной и обладающей свойствами, позволяющими легко производить над ней различные операции.
Задача интерполирования заключается в следующем: на отрезке
[a;b] задана (n +1) |
точка, называемая узлом интерполирования, и |
(n +1) |
значение функции |
в этих точках. Надо построить функцию |
F(x) , |
принимающую в узлах интерполирования те же значения, что и исходная функция f (x) .
Геометрический смысл задачи состоит в том, что нужно найти кривую определенного типа, проходящую через заданные точки.
Задача становится однозначной, если вместо произвольной функции строить полином Pn (x) степени n , такой, что:
Pn (xi ) = f (xi ), i = 0, 1,K, n ,
Тогда внутри промежутков (xi , xi+1 ) построенный полином будет приближенно описывать функцию f (x) .
1) Интерполяционный многочлен Лагранжа
Пусть на отрезке [a;b] заданы точки x0 , x1 ,K, xn и значения функции |
f (x) в |
|||||||||||
этих точках. |
Будем |
строить |
интерполяционный многочлен |
вида |
||||||||
n |
|
|
|
|
|
|
|
|
|
|
|
|
Pn (x) = ∑ f (x j )Фj (x) , где |
Фj (x), |
j = 0,1,K, n |
- многочлены |
|
n -ой степени, |
|||||||
j=0 |
|
|
|
|
|
|
|
|
|
|
|
|
удовлетворяющие условиям: |
0, |
i ≠ |
j, |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
||||
|
|
|
Фj (x) = |
i = j. |
|
|
|
|
|
|||
|
|
|
|
1, |
|
|
|
|
|
|||
Эти условия следуют из того, что значения многочлена и значения |
f (x) в |
|||||||||||
узлах интерполяции должны совпадать. Тогда Фj (x) |
можно искать в виде: |
|||||||||||
Фj (x) = Aj (x − x0 )K(x − x j−1 )(x − x j+1 )K(x − xn ) , |
где |
Aj |
- |
константа, |
||||||||
определяемая из условия |
Фj (x j ) =1 , таким образом: |
|
|
|
|
|
||||||
|
|
(x − x0 )K(x − x j−1 )(x − x j+1 )K(x − xn ) |
|
|
|
|||||||
|
Фj (x) = |
|
|
. |
|
|
|
|||||
|
(x j − x0 )K(x j − x j−1 )(x j − x j+1 )K(x j − xn ) |
|
|
|
||||||||
Обозначим |
ϖn = (x − x0 )(x − x1 )K(x − xn ) |
и |
продифференцируем |
по x , |
||||||||
полагая x = x j |
: ϖ'n (x j ) = (x j − x0 )(x j − x1 )K(x j |
− xn ) . Тогда: |
|
|
|
|||||||
|
|
|
Фj (x) = |
ϖn (x) |
|
. |
|
|
|
|
|
|
|
|
|
(x − x j )ϖ'n (x j ) |
|
|
|
|
|
||||
70
Таким образом, интерполяционный многочлен Лагранжа имеет вид:
|
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
|
|
|
ϖn (x) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
Ln (x) = ∑ f (x j ) |
|
|
|
|
|
|
|
|
|
|
, |
|
где ϖn |
= (x − x0 )(x − x1 )K(x − xn ) . |
|
|
|||||||||||||||||||||||||
|
|
|
(x |
− x j )ϖ'n (x j ) |
|
|
|
||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
j=0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
Примечание. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
Оценка погрешности многочлена Лагранжа, |
если функция |
f (x) |
имеет |
|||||||||||||||||||||||||||||||||||||||
|
на отрезке непрерывные производные |
(n +1) -го порядка, имеет вид: |
|
|
|||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
f (x) − Ln (x) = |
|
f (n+1) (ξ) |
ϖn (x), |
|
- где ξ |
- некоторая точка из [a;b]. |
||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
(n +1)! |
|
||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
Пример 5. 1. |
|
Пусть в результате экспериментального изучения зависимости y = f (x) |
|||||||||||||||||||||||||||||||||||||||||||
получена таблица значений в пяти точках. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||
|
Xj |
0.1 |
0.3 |
|
|
0.5 |
|
0.8 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
Yj |
0.3 |
0.55 |
0.65 |
0.4 |
0.25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
Найти интерполяционный полином Лагранжа второго порядка y = P (x) = a |
0 |
+ a x + a |
2 |
x2 . |
|||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
1 |
|
|||
|
Построение полинома Лагранжа. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||
|
|
P |
(x) = y |
|
|
(x − x1 )(x − x4 ) |
|
|
+ y |
|
(x − x0 )(x − x4 ) |
|
+ y |
|
|
(x − x1 )(x − x0 ) |
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||
2 |
|
|
0 |
|
(x |
0 |
− x |
)(x |
0 |
− x |
|
1 |
|
(x |
− x |
)(x |
|
− x |
4 |
) |
|
|
|
4 |
|
(x |
4 |
− x |
)(x |
4 |
− x ) |
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
1 |
|
|
4 |
|
|
|
|
1 |
0 |
|
1 |
|
|
|
|
|
|
|
|
0 |
|
1 |
|
|
|
|
|
|
|||||||||
|
|
P (x) = 0.3 |
(x −0.3)(x −1) |
|
|
+0.55 |
|
(x −0.1)(x −1) |
|
+0.25 |
(x −0.3)(x −0.1) |
. |
|
|
|
||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||
2 |
|
|
|
|
(0.1−0.3)(0.1−1) |
|
|
|
|
(0.3 −0.1)(0.3 −1) |
|
|
|
|
(1−0.3)(1−0.1) |
|
|
|
|
||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||
P2 (x) = −1.865x2 +1.996x +0.119
Приведем теперь реализацию данного метода интерполирования в системе Scilab. Найдем приближенное значение функции f (x) = sin x в точке x = 0.6 .
Листинг 5.1.
//Интерполяционный многочлен Лагранжа
function y=interpolateLagrange(x, xx, f, n) eps = 1e-8;
Pn = 1.0; for i=1:n do
if (abs(x-xx(i)) < eps) then y = f(i);
return;
end;
Pn =Pn*(x-xx(i));
end;
y = 0.0;
for i = 1:n do s = 1.0;
for j = 1:n do
if (i == j) then
71
s = s*(x-xx(i));
else
s = s*(xx(i)-xx(j));
end;
end;
y = y+(Pn * f(i)/s);
end; endfunction
xx = [0, 0.25, 0.5, 0.75, 1]; |
//узлы интерполирования |
f = sin(xx); |
//наша функция |
d = 0.6;
printf("Lagrange: %g %g\n", interpolateLagrange(d, xx, f, 5), sin(d)); //вывод результатов – первое число – приближенное значение
Рис. 1. Результат работы Листинга_5.1
2) Интерполяционная формула Ньютона
Запишем интерполяционный многочлен Лагранжа Ln (x) другой форме:
|
Ln (x) = L0 (x) +[L1 (x) − L0 (x)] +K+[Ln (x) − Ln−1 (x)], |
|
|
||||
где разность Lk (x) − Lk −1 (x), k =1, 2,K, n |
|
- есть |
многочлен |
степени |
k , |
||
обращающийся в нуль в точках x0 ,K, xk −1 . Поэтому можно записать: |
|
||||||
Lk (x) − Lk −1 (x) = B(x − x0 )(x − x1 )K(x − xk −1 ) . Константу |
B найдем, |
полагая, |
что |
||||
x = xk : |
f (xk ) − Lk −1 (x) = B(xk − x0 )(xk − x1 )K(xk − xk −1 ) , отсюда: |
|
|||||
|
|
||||||
k |
f (x j ) |
|
|
|
|
|
|
B = ∑ |
|
|
= f (x0 , x1 ,K, xk ) , где |
f (x0 , x1 ,K, xk ) - |
|||
(x j − x0 )K(x j − x j−1 )(x j − x j+1 )K(x j − xk |
) |
||||||
j=0 |
|
|
|
|
|||
есть разностное отношение k -го порядка.
Учитывая выражение для B , интерполяционный многочлен можно представить в виде:
Pn (x) = f (x0 ) + (x − x0 ) f (x0 , x1 ) +K+ (x − x0 )(x − x1 )K(x − xn−1 ) f (x0 , x1 ,K, xn ) .
Это и есть интерполяционный многочлен Ньютона.
72
Примечание.
Остаточный член формулы Ньютона совпадает с остаточным членом формулы Лагранжа:
Rn (x) = f (x) − Ln (x) = |
f (n+1) (ξ) |
ϖn (x) , |
где ξ - тока отрезка, |
|
(n +1)! |
||||
|
|
|
содержащего узлы интерполирования.
Пример 5. 2. Пусть в результате экспериментального изучения зависимости y = f (x) получена таблица значений в пяти точках.
|
Xj |
0.1 |
|
0.3 |
|
|
0.5 |
0.8 |
|
1 |
|
|
|
|
|
|
|
|
|
|||||||||||
|
Yj |
0.3 |
0.55 |
|
0.65 |
0.4 |
0.25 |
|
|
|
|
|
|
|
|
|||||||||||||||
|
Найти интерполяционный полином Ньютона второго порядка |
y = P (x) = a |
0 |
+ a x + a |
2 |
x2 . |
||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
1 |
|
||
|
|
Построение полинома Лагранжа. |
|
|
|
|
|
|||||||||||||||||||||||
P (x) = y |
0 |
+ |
|
1 |
(x − x |
0 |
) + |
|
2 |
(x − x |
0 |
)(x |
− x ) |
|
|
|
|
|
||||||||||||
2 |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
1 |
|
|
|
|
1 |
|
|
|
|
|
|||||
11 |
= |
|
|
y1 − y0 |
|
= |
0.55 −0.3 |
|
=1,25; |
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
x1 − x0 |
|
0.3 −0.1 |
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
12 |
= |
|
|
y4 |
− y1 |
= |
|
0.25 −0.55 |
= −0,43 |
|
|
|
|
|
|
|||||||||||||||
|
|
x4 |
− x1 |
|
|
|
|
|
|
|
||||||||||||||||||||
|
|
|
|
|
|
|
|
1−0.3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
21 |
= |
12 |
− |
11 |
= |
|
−0,43 −1,25 = −1.865 |
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
x4 |
− x0 |
|
|
|
1−0,1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
P2 (x) = 0.3 +1.25(x −0.1) −1.865(x −0.1)(x −0.3)
P2 (x) = −1.865x2 +1.996x + 0.119.
Приведем теперь реализацию данного метода интерполирования в системе Scilab. Найдем приближенное значение функции f (x) = sin x в точке x = 0.6 .
Листинг 5.2.
//Интерполяционная формула Ньютона
function y=diffN(xx, f, i, k) select (k),
//используем конструкцию select (<выражение>), case <значение> then //<последовательность действий> - аналог оператора многовариантного ветвления SWITCH, используемого в C++
case 0 then
y = f(i)
case 1 then y = (f(i+k)-f(i))/(xx(i+k)-xx(i))
else y=(diffN(xx, f, i+1, k-1)-diffN(xx, f, i, k-1))/(xx(i+k)-xx(i)) end
endfunction
function y=interpolateNewton(x, xx, f, n) y = 0; Pn = 1.0;
