Простейшие способы интерполяции и экстраполяции данных — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Простейшие способы интерполяции и экстраполяции данных

2017-12-10 330
Простейшие способы интерполяции и экстраполяции данных 0.00 из 5.00 0 оценок
Заказать работу

 

Рассмотрим функцию y=f (x) непрерывную на некотором интервале [a,b] и заданную некоторыми своими значениями yi=f (xi), i= 1,2,…, n для соответствующих значений аргумента a≤x0 < x1 <... < xn ≤b. Необходимо найти значение этой функции в точке x* принадлежащей интервалу [a,b], при этом x*≠xi и оценить погрешность полученного приближенного значения.

Нахождение неизвестных значений x* внутри отрезка [a,b] называется интерполированием.

Один из возможных путей решения поставленной задачи состоит в следующем. Для функции y=f (x) по значениям yi в узлах xi, i= 1,2,…, n строится многочлен степени не выше n

, (1)

принимающий в точках xi значения yi, т.е. значения коэффициентов многочлена – ai – находятся из условия:

. (2)

Этот многочлен называется интерполяционным, он всегда существует и единственен.

В простейшем случае можно воспользоваться многочленом 1-ой степени, т.е. интерполирование будет линейным:

. (3)

В этом случае для интерполяции необходимо построить прямую, соединяющую две точки: (xj, yj) и (xj+1, yj+1), 1≤j+1≤n. Коэффициенты a и b вычисляются следующим образом:

;

. (4)

Описание примера алгоритма линейной интерполяции:

Задаем начальные данные для интерполяции: границы интерполируемого отрезка a и b, количество узлов координатной сетки n, шаг сетки h, массив значений координат сетки z (n) и массив значений интерполируемой функции f (n).

Задаем шаг графического изображения sh интерполируемой функции f (x) и интерполяционной функции g (x).

Задаем цикл по х от a до b-sh с шагом sh* 2.

Задаем x 1 =x и x2=x+sh.

Вычисляем значения интерполируемой функции в точках x 1 и x2: f (x 1f (x2).

Выводим на экран изображение интерполируемой функции в точках x 1 и x2: f (x 1f (x2).

Вычисляем значения интерполяционной функции в точках x 1 и x2: g (x 1g (x2):

Цикл по k от 1 до n- 1.

Находим номера узлов интерполяционной сетки, между которыми находится значение x 1. Задаем ветвление: если x>=z (k) и x<=z (k+ 1), то k 1 =k и k2=k+ 1;если x>z (n), то k 1 =n- 1 и k2=n.

По формулам (4) метода линейной интерполяции находим коэффициенты интерполяционной прямой: a= (f (k 1) -f (k2)) / (z (k 1)- z (k2)) и b=f (k2) -a*z (k2).

Вычисляем значение интерполяционной функции в точке x 1: g (x 1).

Вычисляем значение интерполяционной функции в точке x2: g (x2).

Конец цикла по k.

Выводим на экран интерполяционную функцию в точках x 1и x2: g (x 1g (x2).

Конец цикла по x.

Конец программы.

 

Пример алгоритма линейной интерполяции на естественном языке:

n =количество_узлов_сетки

Определить Массив f(n), z(n)

h = шаг_сетки

 

Цикл по i от 1 до n

z(i) = (i - 1) * h

x = z(i)

f(i) = Sin(5 * x)

Конец Цикла

 

sh = 0.005

x1 = 0.05

f1 = Sin(5 * x1)

g1 = Интерполяция(x1, f, z, n)

 

Печать x1, f1, g1

i = 1

Цикл по x от 0.05 до 0.6 с шагом sh

i = i + 1

x2 = x + sh

f2 = Sin(5 * x2)

g2 = Интерполяция(x2, f, z, n)

Печать x2, f2, g2

x1 = x2

f1 = f2

g1 = g2

Конец Цикла

 

Определение Функции Интерполяция

Параметры t, f, z, n

Локальные_переменные k, a, b

 

Цикл по k от 1 до n - 1

Если t >= z(k) И t <= z(k + 1) Тогда

k1 = k

k2 = k + 1

Выход Из Цикла

Иначе Если t > z(n) Тогда

k1 = n - 1

k2 = n

Выход Из Цикла

Конец Если

Конец Цикла

 

a = (f(k1) - f(k2)) / (z(k1) - z(k2))

b = f(k2) - a * z(k2)

 

Возврат a * t + b

 

Конец Определения Функции

 

Пример реализации алгоритма линейной интерполяции функции f (x) =sin (5x) на отрезке от 0,05 до 5 с шагом 0,005 на языке VFP:

SET DECIMALS TO 10

n=10

DIMENSION f(n),z(n)

h=0.15

FOR i=1 TO n

z(i)=(i-1)*h

x=z(i)

f(i)= SIN(5*x)

ENDFOR

 

a=0.05

b=2

sh = 0.005

 

x1=0.05

_screen.Cls

FOR x=a TO b-sh STEP sh*2

 

x1=x

x2=x+sh

 

f1 = SIN(5*x1)

f2 = SIN(5*x2)

_screen.drawWidth=2

_screen.Line(xe(x1),ye(f1),xe(x2),ye(f2))

 

g1=интерполяция(x1,@f,@z,n)

g2=интерполяция(x2,@f,@z,n)

_screen.drawWidth=1

_screen.line(xe(x1),ye(g1),xe(x2),ye(g2))

 

WAIT WINDOW 1

 

ENDFOR

 

PROCEDURE интерполяция

PARAMETERS x,f,z,n

DIMENSION f(n),z(n)

LOCAL k,a,b

FOR k=1 TO n-1

DO CASE

CASE x>=z(k) and x<=z(k+1)

k1=k

k2=k+1

EXIT

CASE x>z(n)

k1=n-1

k2=n

EXIT

ENDCASE

ENDFOR

a=(f(k1)-f(k2))/(z(k1)-z(k2))

b=f(k2)-a*z(k2)

RETURN a*x+b

 

FUNCTION xe

PARAMETERS x

RETURN 50 + x*400

ENDFUNC

 

FUNCTION ye

PARAMETERS y

RETURN 200 - y*150

ENDFUNC

 

Результат работы программы (фрагмент изображение основного окна разработки VFP) приведен на рисунке 1.:

Рис. 1

На рисунке 1 хорошо видны интерполируемая функция (более жирная) и интерполяционная функции.

 

Реализация алгоритма линейной интерполяции функции f (x) =sin (5x) на отрезке от 0,05 до 5 с шагом 0,005 на языке VBA (для макроса MS EXCEL):

Sub Interpolation_Test()

Dim xlSheet As Excel.Worksheet

 

Set xlSheet = Application.ActiveSheet

 

n = 10

Dim f(10), z(10)

h = 0.1

 

For i = 1 To n

z(i) = (i - 1) * h

x = z(i)

f(i) = Sin(5 * x)

Next i

 

sh = 0.005

x1 = 0.05

f1 = Sin(5 * x1)

g1 = Interpolation(x1, f, z, n)

 

xlSheet.Cells(1, 1).Value = x1

xlSheet.Cells(1, 2).Value = f1

xlSheet.Cells(1, 3).Value = g1

i = 1

For x = 0.05 To 0.6 Step sh

i = i + 1

x2 = x + sh

f2 = Sin(5 * x2)

g2 = Interpolation(x2, f, z, n)

xlSheet.Cells(i, 1).Value = x2

xlSheet.Cells(i, 2).Value = f2

xlSheet.Cells(i, 3).Value = g2

 

x1 = x2

f1 = f2

g1 = g2

Next x

 

Call AddChart("C1", "C2", "C3")

 

End Sub

 

Function Interpolation(t, f, z, n)

Dim k, a, b

 

 

For k = 1 To n - 1

If t >= z(k) And t <= z(k + 1) Then

k1 = k

k2 = k + 1

Exit For

ElseIf t > z(n) Then

k1 = n - 1

k2 = n

Exit For

End If

Next k

 

a = (f(k1) - f(k2)) / (z(k1) - z(k2))

b = f(k2) - a * z(k2)

 

Interpolation = a * t + b

 

End Function

 

 

Sub AddChart(Col1, Col2, Col3)

 

ASheetName = Application.ActiveSheet.Name

 

Charts.Add

ActiveChart.ChartType = xlXYScatterSmoothNoMarkers

ActiveChart.SetSourceData Source:=Sheets(ASheetName).Range("A1")

ActiveChart.SeriesCollection.NewSeries

ActiveChart.SeriesCollection.NewSeries

ActiveChart.SeriesCollection(1).XValues = "=" & ASheetName & "!" & Col1

ActiveChart.SeriesCollection(1).Values = "=" & ASheetName & "!" & Col2

ActiveChart.SeriesCollection(1).Name = "=""f(x)"""

ActiveChart.SeriesCollection(2).XValues = "=" & ASheetName & "!" & Col1

ActiveChart.SeriesCollection(2).Values = "=" & ASheetName & "!" & Col3

ActiveChart.SeriesCollection(2).Name = "=""g(x)"""

ActiveChart.Location Where:=xlLocationAsObject, Name:=ASheetName

ActiveChart.SeriesCollection(1).Select

ActiveChart.ChartArea.Select

 

End Sub

 

В данной реализации для графического изображения интерполируемой функции f (x) и интерполяционной функции g (x)используются средства построения графиков MS EXCEL. Значения x, f (x) и g (x) заносятся в ячейки первых трех колонок рабочего листа:

xlSheet.Cells(i, 1).Value = x1

xlSheet.Cells(i, 2).Value = f1

xlSheet.Cells(i, 3).Value = g1

и в конце программы для построения графика вызывается метод AddChart(Col1, Col2, Col3).

 

Результаты работы программы на VBA приведен на рисунке 2.

 

x f(x) g(x)
0,05 0,247404 0,239713
0,1 0,479426 0,479426
0,15 0,681639 0,660448
0,2 0,841471 0,841471
0,25 0,948985 0,919483
0,3 0,997495 0,997495
0,35 0,983986 0,953396
0,4 0,909297 0,909297
0,45 0,778073 0,753885
0,5 0,598472 0,598472
0,55 0,381661 0,369796
0,6 0,14112 0,14112
0,65 -0,1082 -0,10483

Рис. 2

 


Поделиться с друзьями:

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.006 с.