- •В.П. Кондратьев языки программирования
- •210700 «Инфокоммуникационные технологии и системы связи»
- •Содержание
- •Пояснительная записка
- •Перечень практических занятий
- •Практическая работа 1 Структуры языка программированиия Pascal
- •Практическая работа 2 Структуры языка программированиия Pascal
- •Практическая работа 3 Визуальная среда разработки программ delphi
- •Практическая работа 4 Визуальная среда разработки программ delphi
- •Практическая работа 5 Основные алгоритмы обработки данных.
- •Практическая работа 6 Методы вычислений.
- •Практическая работа 7 Визуальное программирование
- •Практическая работа 8 Пакет математических вычислений maple.
- •Практическая работа 9 Пакет математических вычислений maple.
- •Литература
Практическая работа 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.
