УДК 519.6
Таразский государственный университет имени М.Х. Дулати
АЛГОРИТМЫ ИНТЕРПОЛЯЦИИ
Егембердиева Ш.К.
Шевцов А.Н.
Рассмотрим задачу нахождения интерполяционных коэффициентов Лагранжа при равномерном распределении узлов интерполяции. Лагранж предложил способ вычисления таких многочленов[1, 2]:
где базисные полиномы определяются по формуле:
В случае равномерного распределения узлов интерполяции xj выражаются через расстояние между узлами интерполяции h и начальную точку x0: интерполяционный лагранж формула перемножение
и, следовательно,
Подставив эти выражения в формулу базисного полинома и вынеся за знаки перемножения в числителе и знаменателе, получим:
Теперь можно ввести замену переменной и получить полином от , который строится с использованием только целочисленной арифметики.
Составим программу[3]:
Таблица 1 Программа
|
procedure TForm1.BitBtn3Click(Sender: TObject); var xn0,s:real; kj,s1,s2:integer; begin n:=StringGrid1.RowCount-1; xn0:=strtofloat(StringGrid1.Cells[0,1]); s1:=1; s2:=1; for I := 1 to n do begin x[i]:=strtofloat(StringGrid1.Cells[0,i])-xn0; y[i]:=strtofloat(StringGrid1.Cells[1,i]); Chart1.Series[0].AddXY(xn0+x[i],y[i]); end; for I := 1 to n do yo[i]:=koef(i); case n of 3:begin k[2]:=x0; k[1]:=-(yo[1]*x1(1)+yo[2]*x1(2)+yo[3]*x1(3)); k[0]:= yo[1]*x2(1)+yo[2]*x2(2)+yo[3]*x2(3); end; 4: k[3]:=x0; s:=0; for I := 1 to n do s:=s+yo[i]*x1(i); k[2]:=-s; s:=0; for I := 1 to n do s:=s+yo[i]*x2(i); k[1]:=s; s:=0; for I := 1 to n do s:=s+yo[i]*x3(i); k[0]:=-s; end; 5:begin k[4]:=x0; s:=0; for I := 1 to n do s:=s+yo[i]*x1(i); k[3]:=-s; s:=0; for I := 1 to n do s:=s+yo[i]*x2(i); k[2]:=s; s:=0; for I := 1 to n do s:=s+yo[i]*x3(i); k[1]:=-s; s:=0; for I := 1 to n do s:=s+yo[i]*x4(i); k[0]:=s; end; ………………………… end; for I := 0 to n - 1 do StringGrid2.Cells[1,12-i]:=floattostr(int(k[i]*1000)/1000); memo1.Clear; for i:=0 to (stringgrid1.RowCount-2)*10 do //160 begin a:=i/10; case n of 3:y1:=k[2]*xx(a,2)+k[1]*xx(a,1)+k[0]; 4:y1:=k[3]*xx(a,3)+k[2]*xx(a,2)+k[1]*xx(a,1)+k[0]; 5:y1:=k[4]*xx(a,4)+k[3]*xx(a,3)+k[2]*xx(a,2)+k[1]*xx(a,1)+k[0]; 6:y1:=k[5]*xx(a,5)+k[4]*xx(a,4)+k[3]*xx(a,3)+k[2]*xx(a,2)+k[1]*xx(a,1)+k[0]; …………………….. end; Chart1.Series[1].AddXY(xn0+a,y1); // 1 proizv case n of 3:py1:=2*k[2]*xx(a,1)+k[1]; 4:py1:=3*k[3]*xx(a,2)+2*k[2]*xx(a,1)+k[1]; 5:py1:=4*k[4]*xx(a,3)+3*k[3]*xx(a,2)+2*k[2]*xx(a,1)+k[1]; 6:py1:=5*k[5]*xx(a,4)+4*k[4]*xx(a,3)+3*k[3]*xx(a,2)+2*k[2]*xx(a,1)+k[1]; …………………………….. end; Chart2.Series[3].AddXY(xn0+a,py1); if i>0 then if py10*py1<0 then begin stringgrid3.Cells[1,s1]:=floattostr(xn0+a); stringgrid3.Cells[2,s1]:=floattostr(roundto(y1,-3)); if py10<py1 then stringgrid3.Cells[3,s1]:='min' else stringgrid3.Cells[3,s1]:='max'; s1:=s1+1; end; py10:=py1; // 2 proizv case n of 4:vy1:=2*3*k[3]*xx(a,1)+2*k[2]; 5:vy1:=3*4*k[4]*xx(a,2)+2*3*k[3]*xx(a,1)+2*k[2]; 6:vy1:=4*5*k[5]*xx(a,3)+3*4*k[4]*xx(a,2)+2*3*k[3]*xx(a,1)+2*k[2]; 7:vy1:=5*6*k[6]*xx(a,4)+4*5*k[5]*xx(a,3)+3*4*k[4]*xx(a,2)+2*3*k[3]*xx(a,1)+2*k[2]; end; Chart3.Series[3].AddXY(xn0+a,vy1); if i>0 then if vy10*vy1<0 then begin stringgrid3.Cells[5,s2]:=floattostr(xn0+a); stringgrid3.Cells[6,s2]:=floattostr(roundto(y1,-3)); s2:=s2+1;end; vy10:=vy1;end; end; |
// - кнопка интерполяция // Вывод на график узлов интерполяции // расчет интерполяционных коэффициентов // и так далее до 9 // расчет функции // и так далее до 9 // поиск первой производной // и так далее до 9 //определение максимумов и минимумов // поиск второй производной // и так далее до 9 |
Возьмем таблицу с данными:
Таблица 2 Исходные данные
|
X |
2000 |
2001 |
2002 |
2003 |
2004 |
2005 |
2006 |
2007 |
2008 |
|
|
Y |
3,2 |
1,5 |
3,7 |
1,5 |
1,8 |
5,9 |
5,1 |
1,8 |
4,9 |
Сделаем расчет интерполяционных коэффициентов.
Таблица 3 Коэффициенты
|
x^8 |
x^7 |
x^6 |
X^5 |
x^4 |
x^3 |
x^2 |
x^1 |
x^0 |
|
|
-0,001 |
0,043 |
-0,496 |
2,732 |
-7,147 |
6,196 |
5,245 |
-8,272 |
3,2 |
Тогда функция примет следующий вид:
Рис. 1. График функции с узлами интерполяции
Исследуем функцию на экстремумы и точки перегиба:
Таблица 4 Критические точки
|
Точки экстремума |
Точки перегиба |
||||||
|
x |
y |
x |
y |
||||
|
1 |
2000,6 |
0,728 |
min |
2001,2 |
2,179 |
||
|
2 |
2002 |
3,7 |
max |
2002,7 |
2,301 |
||
|
3 |
2003,5 |
0,907 |
min |
2004,5 |
3,868 |
||
|
4 |
2005,5 |
6,502 |
max |
2006,3 |
3,653 |
||
|
5 |
2007 |
1,8 |
min |
2007,5 |
4,007 |
||
|
6 |
2007,9 |
5,471 |
max |
Рис. 2. График первой производной Рис. 3. График второй производной
Построенные алгоритмы и программа позволяют находить интерполяционную функцию Лагранжа, критические точки и экстремумы.
Литература
1. Бугров Я.С., Никольский С.М. Высшая математика: Учеб. для вузов: Под ред. В. А. Садовничего. - М.: Дрофа, 2004. - 512 c.
2. Зимина О.В. Высшая математика. - М.: ФИЗМАТЛИТ, 2005. - 368 с.
3. Шевцов А.Н. Математическое моделирование в прикладных задачах. Учеб.пособие. - Тараз, 2012. - 250 с.