Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Отчет по 5ой программе

.docx
Скачиваний:
13
Добавлен:
14.05.2015
Размер:
68.77 Кб
Скачать

Гусева Настя гр. 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 квадратичной аппроксимации функции.