- •Математические модели и численные методы
- •Структура погрешности при решении задачи на эвм
- •Решение уравнений с одной переменной Постановка задачи
- •Отделение корней
- •I. Графический способ отделения корней
- •II. Отделения корней программным способом.
- •Уточнение корней
- •Метод половинного деления
- •Метод хорд
- •Метод касательных
- •Метод простой итерации
- •Оценка погрешности метода итераций
- •Преобразование к итерационному виду
- •Решение системы линейных алгебраических Постановка задачи
- •Метод Гаусса
- •Метод простой итерации
- •Решение слу методом Зейделя
- •Интерполирование функций Постановка задачи
- •Интерполяционный многочлен Лагранжа
- •Интерполяционный многочлен Ньютона для равноотстоящих узлов
- •Первая интерполяционная формула Ньютона
- •Вторая интерполяционная формула Ньютона
- •Численное дифференцирование
- •Вычисление производной по определению
- •Вычисление производной на основе интерполяционного многочлена Лагранжа
Интерполирование функций Постановка задачи
Пусть известны значения функции f в некоторых точках:
x |
x0 |
x0 |
x0 |
… |
x
(1) |
f(x) |
y0 |
y0 |
y0 |
… |
y0 |
Требуется получить y=f(x) для x[x0,xn], где xxi. При этом аналитическое выражение
не пригодно ля вычислений либо
неизвестно.
В этом случае строим приближающую функцию F(x) f(x), такую что F(x) = f(x) при x=xi (i=0,1,…,n), т.е.
F(x0)=y0, F(x1)=y1, …, F(xn)=yn (2)
Нахождение приближенной функции называется интерполяцией (интерполированием), точки x0, x1, …, xn узлами интерполяции.
Будим искать функцию F(x) в виде многочлена степени n:
Pn(x) = a0 xn + a1 xn-1 + … + an-1 x + an
Этот многочлен имеет n+1 коэффициент. Наложим на него n+1 условий (2). Таким образом можно однозначно определить коэффициенты многочлена.
Рассмотрим получившуюся систему уравнений: .
Ее определитель (определитель Вандермонда) отличен от нуля:
Значит, интерполяционный многочлен Pn(x) для функции f, заданной таблично, существует и единственный. При этом какие-то коэффициенты могут равняться нулю (в том числе и a0); следовательно, интерполяционный многочлен имеет степень не большую, чем n.
Интерполяционный многочлен Лагранжа
Пусть функция задана таблицей (1). Построим интерполяционный многочлен Ln(x), чья степень не превосходит n, и для которого выполнены условия (2).
Ln(x) ищем в виде Ln(x)= l0(x)+ l1(x)+ l2(x)+…+ ln(x),
Где li(x) – многочлен степени n, причем
Многочлен li(x) составлен следующим образом:
li(x)=ci (x-x0) (x-x1)… (x-xi-1) (x-xi+1)… (x-xn), где ci=const.
Таким образом, получим интерполяционный многочлен Лагранжа:
.
Погрешность вычисляется по формуле:
, где
.
Составим интерполяционный многочлен Лагранжа для трех точек:
i |
0 |
1 |
2 |
xi |
2 |
4 |
7 |
yi |
1 |
-4 |
5 |
Блок-схема составления интерполяционного многочлена Лагранжа:
Ввод
n
i:=1..n
Ввод
X[i], Y[i]
Ввод
A
F:=0
i:=1..n
L:=1
j:=1..n
ij
Нет
Да
начало
L:=L*Y[i] F:=F+L
Вывод
A, F
Ввод
M
M=0
Нет
Да
начало
Программа вычисления значения интерполяционного многочлена Лагранжа:
program lagrang;
const k=30;
type vektor=array[1..k] of real;
var x,y: vektor;
n,i,j: byte;
l,f,a,m: real;
begin
write('Введите количество узлов интерполирования - ');
readln(n);
writeln('Введите парами значения Х и Y');
for i:=1 to n do readln(X[i],y[i]);
repeat
write('Введите заданное значение аргумента - ');
readln(A);
F:=0;
for i:=1 to n do
begin L:=1;
for j:=1 to n do
if i<>j then L:=L*(A-X[j])/(X[i]-X[j]);
L:=L*Y[i];
F:=F+L;
end;
writeln('При Х=',A:5:3,' F(',A:5:3,') = ',F:10:6);
writeln;
writeln('Если хотите продолжить, введите 1,');
writeln('в противном случае введите 0'); readln(m)
until M=0
end.
Введите количество узлов интерполирования - 7
Введите парами значения Х и Y
1.2 0.3486
1.9 2.0537
3.3 2.7844
4.7 3.2103
5.4 3.3712
6.8 3.6322
7.5 3.7411
Введите заданное значение аргумента - 5.1
При Х=5.100 F(5.100) = 3.309311
Если хотите продолжить вычисление, введите 1,
в противном случае введите 0
1
Введите заданное значение аргумента - 7.2
При Х=7.200 F(7.200) = 3.711743
Если хотите продолжить вычисление, введите 1,
в противном случае введите 0
0
Для сравнения f(x) = ln(2.3*x)-0.8/x+1;
F(5.1) = 3.305286918;
F(7.2) = 3.695879038.