Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Интерполяция дискретных данных 5.doc
Скачиваний:
0
Добавлен:
09.11.2019
Размер:
127.49 Кб
Скачать

5.Интерполяция дискретных данных

5.1.Цель работы

Познакомиться с методами решения задачи интерполяции дискретных данных. Научиться пользоваться операторами интерполяции программы Mathcad.

5.2.Задание

В промежутке [-1,1] по оси x задано(см.Таблицу 5.1) три значения аргумента и соответствующие им значения функции yi=f(x), где i - номер варианта задания.

По исходным данным в таблице 5.1 нужно определить yi при двух промежуточных значениях x=-0.5 и x=0.5 c точностью до двух знаков после запятой.

Более сложные задания для 6 исходных точек представлены в таблице 5.2. В промежутке [0,10] задано 6 дискретных значений аргумента с соответствующими значениями функции yi=f(x), где i- номер варианта задания.

По исходным данным в промежутке [0,10] из таблицы 5.2 необходимо определить 5 промежуточных значений функции при указанных значениях аргумента с точностью до одного знака после запятой.

Для выполнения расчётных работ предлагаются следующие варианты заданий.

1.Разработать программу на языке программирования Mathcad для кусочно-линейной интерполяции и решить одну из тестовых задач.

2.Разработать программу на языке программирования Mathcad для кусочно-квадратичной интерполяции и решить одну из тестовых задач.

3.Разработать программу на языке программирования Mathcad для интерполяционной формулы Ньютона и решить одну из тестовых задач.

В качестве тестовых задач могут использоваться дискретные данные, полученные при помощи непрерывных функций: тригонометрических, степенных и т.д.

5.3.Теоретические сведения

При обработке экспериментальных данных, аппроксимации сложных функций возникают задачи выбора непрерывной функции, точно проходящей через заданные точки. При помощи этой функции можно получить дополнительные данные при промежуточных значениях аргумента. Такая операция называется интерполированием. Она является частным случаем аппроксимации. В общем случае при аппроксимации данных не требуется, чтобы значения функции точно совпадали с исходными данными.

Решение задачи интерполирования [1-3] не является однозначным. Решение может быть получено при помощи различного вида функций. Можно соединить соседние точки прямыми линиями и использовать их для расчета промежуточных значений. Такая методика называется кусочно-линейной интерполяцией. Если весь промежуток интерполяции разделить на трёхточечные интервалы, то можно выполнить кусочно-квадратичную интерполяцию.

Разрывы непрерывности производных в узловых точках можно устранить при помощи сплайн-интерполяции. Кубическая интерполяция позволяет построить кривую, проходящую через заданные точки, таким образом, чтобы первые и вторые производные были бы непрерывными во всех точках. Такая кривая может быть построена разделением промежутка интерполяции на трехточечные интервалы, внутри которых записываются полиномы третьей степени, проходящие через эти точки. Эти полиномы затем соединяются вместе и образуют общую кривую.

Интерполяция обычными полиномами обеспечивает непрерывность производных во всех узлах, кроме граничных, и заключается в нахождении полинома низшей степени, принимающего заданное значение в исходных точках. Обычный полином

в узлах интерполяции x0,x1,...xn должен точно совпадать со значениями функции y0,y1,...yn. Как известно [1], существует единственный полином степени не выше n, принимающий в точках x0,x1...xn заданные значения. Поэтому m=n, при этом число узлов интерполирования на единицу больше, чем степень полинома. Степень полинома равна числу интервалов, на которые разделяется весь промежуток интерполирования. Коэффициенты ai полинома Qn(x) можно определить различными способами.

1.Из решения системы уравнений

(5.1)

Порядок системы (5.1) равен числу узлов интерполирования, т.е. n+1.Решение системы (5.1) может быть получено способом Крамера с помощью определителей или способом Гаусса путем исключения переменных.

2По формуле Лагранжа[1], позволяющей определить полином Qn(x) при произвольных узлах интерполяции.

Qn(x)= (5.2)

3.По формуле Ньютона [1], позволяющей определить полином Qn(x) при равноотстоящих с шагом h узлах интерполирования.

(5.3)

При определении значений функции f(x) в точке x по формулам Лагранжа или Ньютона в качестве начальной точки выгодно брать ближайший к x узел интерполирования. Тогда первое слагаемое в этой формуле будет главным членом, а остальные слагаемые будут носить характер поправки.

В качестве примера рассмотрим решение первого задания из таблицы 5.1. Построим квадратичный полином на промежутке по x от -1 до 1 в трех узлах интерполирования: x0=-1,y0=1/3; x1=0,y1=1; x2=1,y2=3.

Составим систему уравнений (5.1)

Последовательным исключением переменных получим

При этом интерполирующий полином примет вид

Используя формулу Лагранжа(5.2), получим тот же полином

По формуле Ньютона(5.3) при h=1 получим

Разными способами мы получили одно и то же выражение для интерполяционного полинома, проходящего через три заданные точки.

Рассмотрим в качестве примера один из возможных алгоритмов интерполяции с применением формулы Лагранжа. Представим формулу (5.2) в виде

Алгоритм интерполяции по формуле Лагранжа можно представить в следующем виде:

1.Зададим степень полинома n, значения функции yi и независимой переменной xi в узлах интерполирования i=0,1,..n.

2.Зададим x,для которого необходимо найти значение полинома y=f(x).

3.Присвоим начальные значения коэффициентам ai=bi=1.

4.Рассчитаем коэффициенты ai и bi по формулам (5.5) и (5.6).

5.Определим значение полинома по формуле (5.4).

6.Выведем полученное значение полинома в качестве значения функции y=f(x) в заданной точке.

Схема алгоритма показана на рис.5.1.

Рис.5.1. Схема вычисления интерполяционного полинома

по формуле Лагранжа

При небольшом числе узлов алгоритм (рис.5.1) может быть реализован вручную. Но для большого количества узлов лучше записать алгоритм в виде программы на одном из языков программирования.

На рис.5.2 на языке Паскаль записана программа, реализующая алгоритм (рис.5.1). Программа рассчитывает значение полинома n- порядка в произвольных точках по n+1 значениям x и y.

В программе, использующей метку, рассчитывается функция Лагранжа L. Исходные данные: n - порядок полинома, xi и yi - исходные точки при i=0,1,2...n , промежуточное значение x. Программа выводит полученное значение y вместе заданным значением x. Её можно использовать в качестве подпрограммы в сложных программах математического моделирования, когда требуется интерполяция дискретных данных.

Подпрограмма на языке программирования Mathcad (рис.5.3), реализующая тот же алгоритм при трехточечных исходных данных оформлена в виде подпрограммы-скаляра, возвращающего значение интерполяционного полинома при произвольном значении аргумента z.

Для использования подпрограммы в документе Mathcad в качестве глобальных переменных нужно задать трёхточечные векторы исходных данных. Два вложенных цикла for и опрератор ветвления if позволяют рассчитать коэффициенты ai и bi в элементах суммы функции Лагранжа, а также рассчитать её значение.

Вывод полученного значения функции осуществляется в основном документе Маthcad.

Program Lagrang;

Программа рассчитывает значение полинома y=a0+a1.x+a2.x^2+...+an.x^n

в произвольной точке x по n+1 дискретным значениям y и x

type m=array[1..(n+1)] of real;

var y,x:real;yd,xd:m;i,n:integer;

function L(x:real):real;

label 1;

var i,j:integer;c:real;a,b:m;

begin for i:=1 to (n+1) do

begin a[i]:=1;b[i]:=1

end;c:=0;for i:=1 to (n+1) do

begin for j:=1 to (n+1) do

begin if i=j then goto 1;a[i]:=a[i]*(x-xd[i]);

b[j]:=b[j]*(xd[i]-xd[j]);

1:end;c:=c+yd[i]*a[i]/b[i]

end;L:=c

end;

begin writeln(' Введите порядок полинома n');

writeln(' Введите "n+1" пар дискретных значений x и y');

for i:=1 to n do

begin read(xd[i],yd[i])

end;writeln(' Введите промежуточное значение x');

read(x);y:=L(x);writeln(x,y) 

end.

Рис.5.2. Программа на языке Паскаль для

интерполяции по формуле Лагранжа.

Рис.5.3.Подпрограмма на языке программирования Маthcad для интерполяции по формуле Лагранжа.

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.