Квадратичная интерполяция

 

В качестве интерполяционной функции на отрезке [ хi-1, xi+ 1] принимается квадратный трехчлен. Такую интерполяцию называют также параболической.

Уравнение квадратного трехчлена

 

                                        y = aix2 + bix + ci,     xi-1  xi  xi+1              (2)

содержит три неизвестных коэффициента ai, bi, ci, для определения которых необходимы три уравнения. Ими служат условия прохождения параболы (2) через три точки (xi-1, yi-1),

(xi, yi), (xi+1, yi+1). Эти условия можно записать в виде

  

   yi-1 = aix2i-1 + bixi-1 + ci

   yi = aix2i + bixi + ci                                           (3)

  yi+1 = aix2i+1 + bixi+1 + ci

Данная система уравнений решается методом Крамера.

 

 

Определители:

 

 

 

Решение:

 

                                 

Алгоритм нахождения приближенного значения функции с помощью квадратичной интерполяции можно записать в виде структурограммы, как и для случая линейной интерполяции. Вместо формулы (1) нужно использовать (2) с учетом решения системы линейных уравнений (3). Интерполяция для любой точки x є [ xo, xn ]  приводится по трем ближайшим к ней узлам.

Данный алгоритм представлен на рисунке

 

 

 

 

 


                                         

                                       

 

 

 


                        Да

         
 
 

 

 


Program interpol2;

Const N=3;

Var x: array [1..N] of real;

y: array [1..N] of real;

a, b, c, xр, yр, deltaA, deltaB, deltaC, delta: real;

i: integer;

begin

for i:=1 to N do

begin { ввод данных через массивы }

writeln (‘x[‘,I,’]=’);

readln (x[i]);

writeln (‘y[‘,I,’]=’);

readln (y[i]);

end;

write (‘vvedite x’); {ввод промежуточного значения}

readln (xр);

for i:=2 to N do

if (x[i-1]<=xр) and (xр<=x[i-1]) then

begin {вычисления}

delta:= x[i-1]*x[i-1]*x[i] – x[i-1]*x[i-1]*x[i+1]+ x[i-1]*x[i+1]*x[i+1] – x[i-1]*x[i]*x[i] – x[i+1]*x[i+1]*x[i]+ x[i+1]*x[i]*x[i];

deltaA:= x[i+1]*y[i]– x[i-1]*y[i] +y[i-1]*x[i]-x[i+1]*y[i-1] – y[i+1]*x[i]+x[i-1]*y[i+1];

    deltaB:=x[i-1]*x[i-1]*y[i] – x[i+1]*x[i+1]*y[i]-

y[i-1]*x[i]*x[i] + y[i+1]*x[i]*x[i] – x[i-1]*x[i-1]*y[i+1] + x[i+1]*x[i+1]*y[i-1];

deltaC:= y[i+1]*x[i-1]*x[i-1]*x[i] – y[i]*x[i-1]*x[i-1]*x[i+1] + y[i]*x[i-1]*x[i+1]*x[i+1]- y[i+1]*x[i-1]*x[i]*x[i] –y[i-1]*x[i+1]*x[i+1]*x[i] + y[i-1]*x[i+1]*x[i]*x[i];

a:= delta/deltaA;

b:=delta/deltaB;

c:= delta/ deltaC;

yр:= a*xр*xр + b*xр +c;

end;

writeln (‘y=’, yр); {вывод искомого значения}

readln;

end.

 

 

Пример. Найти приближенное значение функции y = f (x) при x = 2.5, если известна следующая таблица её значений:

 

 

x 2   3   4
y 2   4   7

         

 

Найдем приближенное значение функции с помощью формулы квадратичной интерполяции (2). Составим систему уравнений (3). С учетом ближайших к точке x = 2.5 узлов xi-1 = 2,        xi = 3,  xi+1 = 4. Соответственно yi-1 = 2, yi = 4 yi+1 = 7. Система  (3) запишется в виде

                                 22 ai + 2 bi + ci = 2;

                                 32 ai  + 3 bi + ci = 4

                              42 ai  + 4 bi + ci = 7.

 

 

     
 


     4 2 1

9 3   1 =  4٠3-4٠4 +2٠16 -2٠ 9 – 16٠3+ 4٠9= -2                  

16 4 1

 

     
 


      2 2 1 

4 3 1 = 2٠3 -2٠4 +2٠3 – 4٠2 - 7٠3 +2٠7 = -1

      7 4 1

     
 


       4 2 1

9  4 1 = 4٠4- 16٠4 -2٠9 + 7٠9  - 4٠7+16٠2= 1

      16 7 1

 

       4 2 2

9 3 4 =7٠4٠3 – 4٠4٠4 + 4٠2٠16 – 7٠2٠9 – 2٠16٠3 + 2٠4٠9= -2

      16 4 7

 

 

;

 

Решая эту систему, находим ai =0.5, b i = -0.5, ci = 1. Искомое значение функции

y (2.5)2٠0.5 + 2.5٠(-0.5) + 1 2.875. 

На рисунке 1 показан вид окна программы при вводе исходных данных

Рис.1

 

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

Рис.2

 

 

Исполнимый модуль программы находится в файле с именем interpol2.exe  

 

 

                                                       

                                         

 

 

                         

                  

      Инструкция по работе с программами

Исполнимые модули программ находятся в файле с именами interpol.exe и interpol2.exe, запускаются на выполнение в операционной системе ее средствами.

После запуска программы пользователь должен ввести исходные данные, как это показано на рисунке 1 (см. стр.8, 14) После ввода исходных данных программа производит вычисления и выводит результат на экран в том же окне, что и исходные данные, как это показано на рисунке 2(см. стр.9,15). Чтобы завершить работу программы, пользователь должен нажать любую клавишу.

 

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

 

 

 

 

  Заключение

 В данной работе была изучена и проанализирована справочная литература, вследствие чего были выявлены два наиболее простых и удобных вида интерполяции – линейная и квадратичная; созданы программы в системе программирования Borland Turbo Pascal 7.0  для вычисления значений функции   f(x) и разработан быстрый (экономичный) алгоритм решения этой функции, предоставленный в виде блок-схем.

 

 

 

     Список использованных источников

1. Калиткин Н.Н.. Численные методы. – М.: Наука, 1982.

2. Марчук Г.И. Методы вычислительной математики – М.: Наука, 1977.

3. Носач В.В. Решение задач аппроксимации с помощью персональных компьютеров.. М.: Бином, 1994

4. Самарский А.А. Численные методы. – М.: Наука, 1989.

 








Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: