Автор работы: Пользователь скрыл имя, 22 Мая 2015 в 15:10, курсовая работа
Пусть на отрезке задано N точек , которые называются узлами интерполирования, и значения некоторой функции в этих точках: . Нужно построить функцию ( функцию, которая интерполирует), которая совпадала бы с в узлах интерполяции и приближала ее между ними, то есть такую, что . Геометрическая интерпретация задачи интерполяции состоит в том, что нужно найти такую кривую некоторого вида, что проходит через заданную систему точек С помощью этой кривой можно найти приближенное значение , де Задача интерполяции становится однозначной, если вместо произвольной функции искать многочлен степени не выше , который удовлетворяет условия:
Постановка задачи.
1. Введение.
2. Теоретическая часть.
3. Практическая реализация:
3.1 Программа на языке Pascal.
3.2 Решение в Excel.
4. Выводы.
Список использованной литературы.
Практическая реализация
Программа на языке Pascal
В процессе выполнения работы мною была написана программа EITKIN на языке Pascal.
В данной программе есть два массива: одномерный массив X, в нем хранятся значения узлов интерполирования хi и двумерный массив Р, в нем хранятся значения многочленов степени не выше n, переменная z это, то значение для которого надо найти значение функции, n – количество узлов интерполирования. Все вычисления проводятся в одном встроенном цикле. Данные на экран выводятся в виде двухмерной матрицы.
Код программы:
program EITKIN;
uses wincrt, strings;
var x:array [1..60]of real;
p:array [1..60,1..60] of real;
z :real; i,j,n: integer;
begin
StrCopy(WindowTitle, 'Программа интерполяции функции по схеме Эйткина ');
clrscr;
write ('vvedite k-vo uzlov interpolirovanija n=');
readln (n);
write ('vvedite X dlja kotorogo nado najti znach func=');
readln (z);
writeln ('vvedite mas Xi');
for i:=1 to n do
begin
write ('vvedite elem X[',i,']=');
readln (x[i]);
end;
writeln ('vvedite mas Yi');
for i:=1 to n do
begin
write ('vvedite elem Y[',i,']=');
readln (p[1,i]);
end;
writeln ('PROCES VICHISLENIJA......');
for i:=2 to n do
begin
for j:=1 to n+1-i do
begin
p[i,j]:=1/(x[j+i-1]-x[j])*(p[
end;
end;
writeln ('REZ MATRICA::::');
for i:=1 to n do
begin
write ('P^',i,'(',z:4:5,') | ');
for j:=1 to n+1-i do
begin
write (p[i,j]:4:5,' | ');
end;
writeln;
end;
writeln ('!!!!!!!!!OTVET!!!!!!!!!');
writeln ('y(',z:4:5,')=',p[n,1]:4:5);
readkey;
DoneWinCrt;
end.
Для чтобы найти значение функции у(х) в точке х с помощью этой программы нужно сначала ввести количество узлов интерполирования, значение х, для которого надо найти значение функции, а потом ввести узлы интерполирования хi и соответствующие им значения функции уi и нажать клавишу ENTER.
Также для определения степени интерполирующего многочлена я написал программу konechn_razn.
Код программы:
program konechn_razn;
uses wincrt, strings;
var y:array [1..50,1..50] of real;
i,j,n: integer;
begin
StrCopy(WindowTitle, 'Программа построения конечных разностей ');
clrscr;
write ('vvedite k-vo znachenij funcii n=');
readln (n);
writeln ('vvedite mas Yi');
for i:=1 to n do
begin
write ('vvedite elem Y[',i,']=');
readln (y[i,1]);
end;
writeln ('PROCES VICHISLENIJA......');
for j:=2 to n do
begin
for i:=1 to n+1-j do
begin
y[i,j]:=y[i+1,j-1]-y[i,j-1];
end;
end;
writeln ('REZ MATRICA::::');
writeln (' Yi | Dyi ');
for i:=1 to n do
begin
for j:=1 to n+1-i do
begin
write (y[i,j]:4:5,' | ');
end;
writeln;
end;
readkey;
DoneWinCrt;
end.
Входными данными для этой программы есть: количество узлов интерполирования и значения функции yi, для которых надо построить конечные разности.
Решение в Excel
Для проверки вычислений я решил поставленную задачу в Excel по схеме Эйткина:
Также в целях проверки вычислений я решил данную задачу с помощью кубических сплайнов:
График, отображающий значения функции, вычисленные по схеме Эйткина и с помощью кубических сплайнов:
Выводы
Все многочлены, которые надо вичислить для данного х выражаются через определитель 2-го порядка, что делает вычисления единообразными. Схему Эйткина просто программировать.
Можно отметить то, что схема Эйткина применима и в случае неравноотстоящих узлов интерполирования, то есть ее можно применять для любого шага интерполирования. Также надо отметить то, что, если в задаче требуется вычислить значение функции в одной точке, нет необходимости строить общее выражение многочленна Лагранжа или Ньютона явно, а требуется только вичислить его значение в точке х. Эти вычисления удобно выполнить по интерполяционной схеме Эйткина.
Сопоставим исходные данные, у нас имеется 6 узлов интерполирования. По этим точкам можно построить интерполяционный полином, причем 5-й степени, привлекая к исследованию интерполяцию кубическим сплайном, утверждаю, что данным методом можно построить на каждом подинтервале полином 3-й степени. Последним словом в выборе между первым и вторым методом будут конечные разности на заданном множестве узлов. Конечные разности являются аналогом производной от функции. В данном случае конечные разности использованы для определения степени полинома и для определения полином данная функция или нет, с помощью которого можно максимально приблизить данную функцию.
Данного количества узлов интерполирования не достаточно для точного определения является ли данная функция полиномом, то есть в данном случае конечные разности не являются точным критерием для выбора между двумя методами интерполирования.
Эйткин |
|
x= |
0,47 |
y= |
0,45289 |
сплайн |
|
x= |
0,47 |
y= |
0,45277 |
В результате вычисления значения функции в точке 0,47 видно что значения функции в искомой точке мало отличимые. То есть в данном случае можно применять оба метода.
Если взять точность вычисления до четвертого знака после запятой, то степень полинома по данным конечных разностей будет полином 3-й степени. Поскольку по схеме Эйткина строятся все полиномы степени не выше 6-й. И в этом случае лучше применять кубические сплайны.
Результаты работы программы EITKIN:
Результаты работы программы konechn_razn:
Информация о работе Выбор интерполирующей функции к заданной и ее построение