Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
210700_МУ_ПР_ЯП.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
539 Кб
Скачать
☆

Практическая работа 5 Основные алгоритмы обработки данных.

Цель работы:

Ознакомление с алгоритмами интерполирования табличных функций. Применение этих алгоритмов для построения аналитических выражений, представляющих таблицы экспериментальных данных, а также для замены трудновычислимых функций алгебраическими многочленами.

Порядок выполнения задания:

Ознакомиться с методами интерполирования табличных функций алгебраическими многочленами в форме Лагранжа и Ньютона [1]. Построить процедуры, реализующие эти методы средствами системы Maple.

В качестве модельного примера построения интерполяционного многочлена Лагранжа рассмотрим интерполирование табличных значений функции

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

Uses CRT;

const

n=4;h=2;

type

dann=array[0..n] of real;

var

X,Y:dann;

k: integer;

t,z: real;

function Lagrange(n:integer;X,Y:dann;t:real):real;

var

p,z: real;

k,j: integer;

begin

z:=0;

for k:=0 to n do

begin

p:=1;

for j:=0 to n do

begin

if k<>j then

p:=p*(t-X[j])/(X[k]-X[j]);

end;

z:=z+Y[k]*p;

end;

Lagrange:=z;

end;

begin

clrscr;

X[0]:=0;Y[0]:=1;

for k:=1 to n do

begin

X[k]:=k*h;

Y[k]:=sin(X[k])/X[k];

end;

for k:=0 to 2*n do

begin

t:=k*h/2;

z:=Lagrange(n,X,Y,t);

WRITELN(t:6:2,z:14:6);

End;

end.

Интерполяционный многочлен Ньютона.

Поскольку узлы интерполирования равноотстоящие, построим таблицу конечных разностей [1] и вычислим с ее помощью интерполяционный многочлен в форме Ньютона. Для удобства работы с индексами элементов двумерного массива будем использовать транспонированную таблицу разностей. В процедуре Newton предусмотрим возможность вычисления многочлена в точке не по всем, а по нескольким первым узлам, чтобы иметь возможность строить многочлены меньшей степени.

Uses CRT;

const

n=4;h=2;

type

dann=array[0..n] of real;

table=array[0..n+1] of dann;

var

X,Y:dann;

k: integer;

t,z: real;

dif:table;

pow:integer;

function Newton(n,p:integer;X,Y:dann;t:real):real;

var

q,z: real;

k,j: integer;

begin

dif[0]:=Y;

for k:=1 to n do

begin

for j:=0 to n-k do

dif[k][j]:=dif[k-1,j+1]-dif[k-1,j];

end;

z:=Y[0];

q:=1;

for k:=1 to p do

begin

q:=q*(t-X[k-1])/k/h;

z:=z+q*dif[k,0];

end;

Newton:=z;

end;

begin

clrscr;

X[0]:=0;Y[0]:=1;

for k:=1 to n do

begin

X[k]:=k*h;

Y[k]:=sin(X[k])/X[k];

end;

pow:=4;

for k:=0 to 2*n do

begin

t:=k*h/2;

z:=Newton(n,pow,X,Y,t);

WRITELN(t:6:2,z:14:6);

End;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]