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

3_теориЛеготкина / выч методы / отчет по 1 лабе

.doc
Скачиваний:
32
Добавлен:
09.12.2013
Размер:
61.95 Кб
Скачать

Пермский Государственный Технический Университет

Электротехнический факультет

Кафедра автоматики и телемеханики

Вычислительные методы.

Отчет по лабораторной работе №1.

Интерполирование функций.

Вариант №3.

Выполнил: студент гр. АТ-01-2

Лыткин П.В.

Проверил: Данилова С.А.

Пермь 2003 г.

Цель работы:

  1. Научиться применять численные методы интерполяции функций, заданных таблично.

  2. Изучить метод интерполирования функций с помощью кубических сплайн – функций.

Задано:

Задано множество вещественных абсцисс Х0, Х1, …, Хn и соответствующие координаты Y0, Y1, …, Yn. Здесь Х0< Х1< …< Хn, а каждое Yi – некоторое вещественное число, отвечающее Xi, определенное математически или являющееся результатом какого – либо наблюдения.

Задача одномерной интерполяции состоит в построении функции f(x), такой, что f(xi)=yi для всех i, т.е. нужно найти многочлен Pn(x) степени не выше n, значения которого в точках Xi (i=0,n) совпадают со значениями данной функции, т.е. Pn(xi)=yi. Многочлен Pn(x) является интерполяционным многочленом (полиномом), а точки xi являются узлами интерполяции.

Задана таблица:

0

1

2

3

4

5

6

7

8

xi

-4

-3

-2

-1

0

1

2

3

4

yi

0

0

1

0

0

0

-1

0

0

Необходимо составить интерполяционный полином Лагранжа и Кубическую сплайн-функцию для нахождения аналитического выражения функции f(x), при этом на экран должны выводиться графики полинома Лагранжа и кубической сплайн - функции.

Интерполяционная формула Лагранжа.

Пусть xi (i=0,n) произвольные узлы, а yi=f(xi) – значение функции в узлах. Многочленом степени n, принимающем в точке xi значения yi, является интерполяционный многочлен Лагранжа

Сплайны:

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

На практике наиболее широкое применение получили сплайны третьей степени, имеющие на заданном отрезке непрерывную, по крайней мере, первую производную. Эти сплайны называются кубическими.

На участке [x0, xn] требуется найти функцию ф(х), удовлетворяющую следующим условиям:

1.Функция ф(х) на участке [x0, xn] должна быть непрерывна вместе со своими первой и второй производными.

2. На каждом участке [xi-1, xi] функция фi(х) должна описываться кубическим полиномом

aoi+a1i(x-xi-1)+a2i(x-xi-1)2+a3i(x-xi-1)3 x с[xi-1, xi];

фi(x)=

0, x ¢[ xi-1, xi] i=1,n

Общий сплайн

при х с[x1, xn].

  1. Значения сплайна в узлах интерполяции равны значениям заданной функции, т.е. ф(хi)=yi , i=0,n.

Текст программы на языке Pascal:

Program Laba_1;

uses graph,crt;

const n=8;

var x,y:array[0..n]of real;

m:array[0..n]of real;

i,j,t,k,i1:integer;

u:real;

x0,y0:integer;

grDriver,grMode:integer;

key:boolean;

a,b,c,d,f,h,g:array [1..n] of real;

spl:array [0..1000] of real;

spline:array [0..n,1..2] of real;

function lagr(x1:real):real;

var i,j:integer;

ln,q,p:real;

begin

ln:=0;

for i:=0 to n do begin

q:=1;

p:=1;

for j:=0 to n do begin

if not (i=j) then p:=p*(x1-x[j]);

if not (i=j) then q:=q*(x[i]-x[j]);

end;

ln:=ln+y[i]*p/q;

end;

lagr:=ln;

end;

PROCEDURE Interval;

var l:integer;

begin

i:=1;

j:=n+1;

l:=1;

while l<=2 do

begin

k:=round(int((i+j)/2));

if u>=x[k] then i:=k else j:=k;

if j<=i+1 then else l:=l-1;

l:=l+1

end;

k:=j

end;

begin

for i:=0 to n do x[i]:=-4+i;

y[0]:=0;

y[1]:=0;

y[2]:=1;

y[3]:=0;

y[4]:=0;

y[5]:=0;

y[6]:=-1;

y[7]:=0;

y[8]:=0;

grDriver:=detect;

grMode:=detect;

initgraph(grDriver,grMode,'d:\bp\bgi');

setcolor(white);

line(320,0,320,480);

line(0,240,640,240);

line(120,237,120,243);

line(170,237,170,243);

line(220,237,220,243);

line(270,237,270,243);

line(370,237,370,243);

line(420,237,420,243);

line(470,237,470,243);

line(520,237,520,243);

line(317,190,323,190);

line(317,140,323,140);

line(317,90,323,90);

line(317,290,323,290);

line(317,340,323,340);

line(317,390,323,390);

m[0]:=0;

m[n]:=0;

i:=1;

while i<=n do

begin

h[i]:=x[i]-x[i-1];

i:=i+1

end;

g[1]:=2*(h[1]+h[2]);

f[1]:=6*((y[2]-y[1])/h[2]-(y[1]-y[0])/h[1]);

i:=2;

while i<=n-1 do

begin

g[i]:=2*(h[i]+h[i+1])-sqr(h[i])/g[i-1];

f[i]:=6*((y[i+1]-y[1])/h[i+1]-(y[i]-y[i-1])/h[i])-f[i-1]*h[i-1]/g[i-1];

i:=i+1

end;

m[n-1]:=f[n-1]/g[n-1];

j:=1;

while j<=n-2 do

begin

i:=n-1-j;

m[i]:=(f[i]-h[i+1]*m[i+1])/g[i];

j:=j+1

end;

i:=1;

while i<=n do

begin

a[i]:=m[i-1]/(6*h[i]);

b[i]:=m[i]/(6*h[1]);

c[i]:=(y[i-1]-1/6*m[i-1]*h[i])/h[i];

d[i]:=(y[i]-1/6*m[i]*sqr(h[i]))/h[i];

i:=i+1

end;

u:=x[0];

i1:=0;

repeat

interval;

f[k]:=a[k]*(x[k]-u)*sqr(x[k]-u)+b[k]*(u-x[k-1])*sqr(u-x[k-1])+c[k]*(x[k]-u)+d[k]*(u-x[k-1]);

spl[i1]:=f[k];

i1:=i1+1;

u:=u+0.1;

until u>=x[n];

j:=1;

for i:=0 to n do spline[i,j]:=x[i];

j:=2;

for i:=0 to n do spline[i,j]:=y[i];

k:=50;

x0:=320;

y0:=240;

moveto(x0+round(k*spline[0,1]),y0-round(k*spline[0,2]));

x0:=x0+round(k*spline[0,1]);

i:=0;

repeat

x0:=x0+round(0.1*k);

i:=i+1;

setcolor(red);

lineto(x0,y0-round(spl[i]*k));

until x0>=getmaxx div 2+round(k*spline[n,1]);

moveto(120,240);

for i:=120 to 520 do begin

t:=round(-200*(lagr(6.4*i/320-6.4))/4+240);

setcolor(green);

lineto(i,t);

key:=keypressed;

if key=true then begin closegraph;

halt;

end;

end;

readln;

closegraph;

end.

Графики полученных функций:

Соседние файлы в папке выч методы