Отчет по 5ой программе
.docxГусева Настя гр. 21306
Отчет по практическому заданию №5
Курс «Вычислительные методы»
Вариант 57
Задание: Интерполировать заданную таблично функцию полиномами 1-го порядка (локальная линейная интерполяция) и полиномом n-го порядка (глобальная интерполяция). Вычислить значение функции в точке x:
xi= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
yi=1.03, 0.99, 0.96, 0.92, 0.87, 0.83, 0.78, 0.74, 0.69, 0.15, 0.96, 1.82, 4.74, 3.72, 4.76, 5.86, 7.03, 8.26, 0.57, 10.95 в точке х=4.58.
(Аппроксимация функций)
Аппроксимировать табличную функцию из предыдущей задачи полиномом 1 и 2 степени. Используя полученную аппроксимацию, вычислить значение функции в точке, указанной в предыдущей задаче. В электронных таблицах Excel построить график исходной табличной функции и на этом графике добавить линии трендов линейной функции и полиномиальной функции 2-й степени. Уравнение полученных трендов показать на графике. Сравнить полученные результаты с результатами предыдущих расчетов.
Краткая теория:
Графическая интерпретация методов: Интерполяция Аппроксимация
Интерполяция функций
-
Глобальная интерполяция.
-
Локальная интерполяция.
Локальная интерполяция.
Необходимо определиться с видом интерполирующей функции.
На практике чаще всего использую следующие виды локальной интерполяции:
1. Линейная интерполяция
2. Квадратичная интерполяция
3. Сплайн-интерполяция
Глобальная интерполяция
Необходимо, чтобы одна интерполирующая функция проходила через все узлы таблично заданной функции.
Обычно в этом случае интерполирующую функцию ищут в виде полинома:
y=c0+c1x+c2x2 +…+cixi+…+cn-1xn-1
Через n точек может проходить только один график функции полинома n-1 порядка.
Интерполяция методом полинома Лагранжа.
Данный метод удобен в случаях, когда необходимо найти только одно значение функции при одном значении аргумента.
В этом методе полином n-1 степени представляется в виде:
где l1, l2, …, li, …, ln - являются также полиномиальными зависимостям
Аппроксимация функций
В этом методе в случае флуктуаций (выбросов) точек, аппроксимирующая функция получается достаточно гладкой.
Аппроксимация линейной функцией
В качестве аппроксимирующей выбирают линейную функцию: y*=c0+c1x.
Здесь c0 и c1 - параметры функции, которые определим с использованием МНК.
Аппроксимация квадратичной функцией
В качестве аппроксимирующей выбирают квадратичную функцию: y*=c0+c1x+c2x2.
Здесь c0 , c1 и c2 - параметры функции, которые определим с использованием МНК.
Решаем полученную СЛАУ методом Крамера для систем 3-го порядка и вычисляем параметры c0 , c1 и c2.
Таким образом, мы получаем квадратичную аппроксимирующую функцию:
y*=c0+c1x+c2x2
Блок-схемы методов:
Интерполяция полиномом Лагранжа
Аппроксимация линейной функцией
Аппроксимация квадратичной функцией
Текст программы:
Линейная интерполяция:
program lin5;
const n=20;
var
x:array[1..20] of real;
y:array[1..20] of real;
i,k:integer;
c0,c1,yy,xx:real;
begin
x[1]:=1; x[2]:=2; x[3]:=3; x[4]:=4; x[5]:=5;
x[6]:=6; x[7]:=7; x[8]:=8; x[9]:=9; x[10]:=10;
x[11]:=11;x[12]:=12; x[13]:=13; x[14]:=14; x[15]:=15;
x[16]:=16; x[17]:=17; x[18]:=18; x[19]:=19; x[20]:=20;
y[1]:=1.03; y[2]:=0.99; y[3]:=0.96; y[4]:=0.92; y[5]:=0.87;
y[6]:=0.83; y[7]:=0.78; y[8]:=0.74; y[9]:=0.69; y[10]:=0.15;
y[11]:=0.96; y[12]:=1.82; y[13]:=4.74; y[14]:=3.72; y[15]:=4.76;
y[16]:=5.86; y[17]:=7.03; y[18]:=8.26; y[19]:=0.57; y[20]:=10.95;
xx:=4.58;
for i:=2 to n do
begin
if (x[i-1]<xx) and (x[i]>=xx) then k:=i;
end;
c1:=(y[k]-y[k-1])/(x[k]-x[k-1]);
c0:=y[k-1]-(c1*x[k-1]);
yy:=c0+c1*xx;
writeln('y=',yy:8:8);
readln;
end.
Глобальная интерполяция
program interglob;
const n=20;
var
x:array[1..20] of real;
y:array[1..20] of real;
i,j:integer;
L,yy,xx:real;
begin
x[1]:=1; x[2]:=2; x[3]:=3; x[4]:=4; x[5]:=5;
x[6]:=6; x[7]:=7; x[8]:=8; x[9]:=9; x[10]:=10;
x[11]:=11;x[12]:=12; x[13]:=13; x[14]:=14; x[15]:=15;
x[16]:=16; x[17]:=17; x[18]:=18; x[19]:=19; x[20]:=20;
y[1]:=1.03; y[2]:=0.99; y[3]:=0.96; y[4]:=0.92; y[5]:=0.87;
y[6]:=0.83; y[7]:=0.78; y[8]:=0.74; y[9]:=0.69; y[10]:=0.15;
y[11]:=0.96; y[12]:=1.82; y[13]:=4.74; y[14]:=3.72; y[15]:=4.76;
y[16]:=5.86; y[17]:=7.03; y[18]:=8.26; y[19]:=0.57; y[20]:=10.95;
xx:=4.58;
yy:=0;
for i:=1 to n do
begin
L:=1;
for j:=1 to n do
begin
if i<>j then
L:=(L*(xx-x[j]))/(x[i]-x[j]);
end;
yy:=yy+y[i]*L;
end;
writeln('y=',yy:8:8);
readln;
end.
Линейная аппроксимация
program aproximacia;
const n=20;
var
x:array[1..20] of real;
y:array[1..20] of real;
i,k:integer;
c0,c1,yy,xx,s1,s2,s3,s4:real;
begin
x[1]:=1; x[2]:=2; x[3]:=3; x[4]:=4; x[5]:=5;
x[6]:=6; x[7]:=7; x[8]:=8; x[9]:=9; x[10]:=10;
x[11]:=11;x[12]:=12; x[13]:=13; x[14]:=14; x[15]:=15;
x[16]:=16; x[17]:=17; x[18]:=18; x[19]:=19; x[20]:=20;
y[1]:=1.03; y[2]:=0.99; y[3]:=0.96; y[4]:=0.92; y[5]:=0.87;
y[6]:=0.83; y[7]:=0.78; y[8]:=0.74; y[9]:=0.69; y[10]:=0.15;
y[11]:=0.96; y[12]:=1.82; y[13]:=4.74; y[14]:=3.72; y[15]:=4.76;
y[16]:=5.86; y[17]:=7.03; y[18]:=8.26; y[19]:=0.57; y[20]:=10.95;
xx:=4.58;
s1:=0;
s2:=0;
s3:=0;
s4:=0;
for i:=1 to n do
begin
s1:=s1+x[i]*x[i];
s2:=s2+x[i];
s3:=s3+x[i]*y[i];
s4:=s4+y[i];
end;
c1:=(s3*n-s2*s4)/(s1*n-s2*s2);
c0:=(s1*s4-s2*s3)/(s1*n-s2*s2);
yy:=c0+c1*xx;
writeln('y=',yy:8:8);
writeln('c1=',c1:8:8);
writeln('c0=',c0:8:8);
readln;
end.
Квадратичная аппроксимация
program aproximaciacvad;
const n=20;
var
x:array[1..20] of real;
y:array[1..20] of real;
i:integer;
c0,c1,yy,xx,s1,s2,s3,s4:real;
s5,s6,s7,a11,a12,a13,a21,a22,a23:real;
a31,a32,a33,b1,b2,b3,c2:real;
begin
x[1]:=1; x[2]:=2; x[3]:=3; x[4]:=4; x[5]:=5;
x[6]:=6; x[7]:=7; x[8]:=8; x[9]:=9; x[10]:=10;
x[11]:=11;x[12]:=12; x[13]:=13; x[14]:=14; x[15]:=15;
x[16]:=16; x[17]:=17; x[18]:=18; x[19]:=19; x[20]:=20;
y[1]:=1.03; y[2]:=0.99; y[3]:=0.96; y[4]:=0.92; y[5]:=0.87;
y[6]:=0.83; y[7]:=0.78; y[8]:=0.74; y[9]:=0.69; y[10]:=0.15;
y[11]:=0.96; y[12]:=1.82; y[13]:=4.74; y[14]:=3.72; y[15]:=4.76;
y[16]:=5.86; y[17]:=7.03; y[18]:=8.26; y[19]:=0.57; y[20]:=10.95;
xx:=4.58;
s1:=0; s2:=0;
s3:=0; s4:=0;
s5:=0; s6:=0;
s7:=0;
for i:=1 to n do
begin
s1:=s1+x[i]*x[i]*x[i]*x[i];
s2:=s2+x[i]*x[i]*x[i];
s3:=s3+x[i]*x[i];
s4:=s4+x[i];
s5:=s5+x[i]*x[i]*y[i];
s6:=s6+x[i]*y[i];
s7:=s7+y[i];
end;
begin
a11:=s1; a12:=s2; a13:=s3;
a21:=s2; a22:=s3; a23:=s4;
a31:=s3; a32:=s4; a33:=n;
b1:=s5; b2:=s6; b3:=s7;
end;
c2:=(s5*s3*n-s5*s4*s4-s6*s2*n+s6*s4*s3+s7*s2*s4-s7*s3*s3)/(s1*s3*n-s1*s4*s4-s2*s2*n+s2*s4*s3+s3*s2*s4-s3*s3*s3);
c1:=(s1*s6*n-s1*s7*s4-s2*s5*n+s2*s7*s3+s3*s5*s4-s3*s6*s3)/(s1*s3*n-s1*s4*s4-s2*s2*n+s2*s4*s3+s3*s2*s4-s3*s3*s3) ;
c0:=(s1*s3*s7-s1*s4*s6-s2*s2*s7+s2*s4*s5+s3*s2*s6-s3*s3*s5)/(s1*s3*n-s1*s4*s4-s2*s2*n+s2*s4*s3+s3*s2*s4-s3*s3*s3);
yy:=c0+c1*xx+c2*xx*xx;
writeln('y=',yy:8:8);
writeln('c2=',c2:8:8);
writeln('c1=',c1:8:8);
writeln('c0=',c0:8:8);
readln;
end.
Результаты:
Линейная интерполяция: y=0.89100000
Глобальная интерполяция: y=3.62629080
Линейная аппроксимация: y=0.58230060
c1=0.37993233
c0=-1.15778947
Квадратичная аппроксимация: y=0.64139782
c2=0.03289758
c1=-0.31091695
c0=1.37532456
График исходной табличной функции, линии трендов линейной функции и полиномиальной функции 2-й степени:
Вывод: В ходе данной практической роботы я использовала два вида интерполяции функции(локальный и глобальный) и два вида аппроксимации функции(линейный и квадратичный). Так же я построила график исходной табличной функции и линии трендов. Коэффициенты уравнения линейной линии тренда сходятся с коэффициентами с1 и с0 линейной аппроксимации функции, а коэффициенты полиномиальной линии тренда совпадают с коэффициентами с2, с1 и с0 квадратичной аппроксимации функции.