Рефераты. Интерполяция функции одной переменной методом Ньютона

Потом программа спросит «повторить вычисления и построения графика полинома для другой функции?» Чтобы начать заново нужно нажать 1, чтобы закончить работу с программой нажать 0 и после ввода подтвердить выбор клавишей Enter.

Текст программы

program interpol;

uses crt,graph;

const

MAXCOUNT=30;

type

per = array [0..MAXCOUNT] of real;

var

X,y :per;

n,i :integer;

l,D,f :real;

label Lp, Lt;

{Процедура вывода титульного листа}

Procedure Titul;

begin

Clrscr;

GoToXY(23,2);

Writeln(`Федеральное агентство по образованию');

GoToXY(22,3);

Writeln('Тульский государственный университет');

GoToXY(28,4);

Writeln('КАФЕДРА РАДИОЭЛЕКТРОНИКИ');

GoToXY(14,8);

Writeln('Интерполяция функции одной переменной методом Ньютона.');

GoToXY(27,9);

Writeln('Построение графика полинома.');

GoToXY(34,12);

Writeln('Вариант #7');

GoToXY(24,17);

Writeln('Студент гр. 220371 Поляков A.M.');

GoToXY(20,19);

Writeln('Руководитель доцент, K.T.H. Давыдов B.B.');

GoToXY(33,23);

Writeln('Тула, 2008 g.');

readkey;

clrscr;

end;

{Процедура вывода пояснения к программе}

Procedure help;

begin

clrscr;

writeln (Эта программа по значениям функции f(x) заданной таблично в нескольких точках отрезка находит ее значения в ' +

+ остальных точках данного отрезка. Точки с координатами (xi, yi) называются узловыми точками или узлами.');

writeln ('Количество узлов в табличной функции должно быть равно N=n+1. ');

writeln (' После ввода количества узлов n (начальная точка (x[0],y[0]) не является узлом) нужно вводить узловые точки +

+' функции. После этого программа сможет находить значения данной функции в остальных точках отрезка (x[0]..x[n]).');

writeln (После этого на экран будут выведен график полинома.');

readkey;

clrscr;

end;

{Процедура ввод табличных значений}

procedure Enter(var X,y: per);

var

i: integer;

label mp;

begin

mp: for i:=0 to n do

begin

write('X[',i,'] = '); readln(x[i]);

write('y[',i,'] = '); readln(y[i]);

end;

for i:=0 to n-1 do

if x[i+1]-x[i]<=0 then

begin

writeln ('Ошибка. Повторите ввод.');

goto mp

end;

end;

{процедура вывода табличных значений}

procedure Print(n: integer; X,y: per); var

i: integer;

begin

for i:=0 to n do

begin

write(x[i]:12:6);

end;

writeln;

for i:=0 to n do

begin

write(y[i]:12:6);

end;

writeln;

end;

{Функция формулы Ньютона}

Function Polinom(n: integer; d:real; X,y :per):real;

var

l:real;

k,i:integer;

p: real;

begin

L:=y[0];

P:=1;

for k:=1 to n do begin

P:=P*(D-X[k-1]);

for i:=0 to (n-k) do begin

Y[i]:=(y[i+1]-y[i])/(x[i+k]-x[i]);

end;

L:=L+P*y[0];

end;

POlinom:=l;

end;

{ процедура построение графика}

procedure Grafik(n: integer; D :real ; X,Y: per; L:real);

const

step=10;

var

driver,mode: integer;

i:longint;

st:string;

u,k:integer;

begin

writeln('Введите шаг деления графика');

readln(u);

k:=26;

driver:=detect;

initgraph (driver,mode,'');

setcolor (1);

line (320,0,320,480);

line (0,240,640,240);

for i:=0 to 32 do begin

setlineStyle (1,0,0);

line (0,i*k+6,640,i*k+6);

line (i*k+8,0,i*k+8,480);

end;

setcolor (3);

outtextxy (310,15,'y');

outtextxy (620,240,'x');

for i:=0 to getmaxx div (2*k) do

begin

str (i*u,st);

outtextxy(getmaxx div 2+i*(k),getmaxy div 2+step,st);

str (-i*u,st);

outtextxy (getmaxx div 2-i*k,getmaxy div 2+step,st);

end;

for i:=1 to getmaxy div (2*k) do

begin

str (-i*u,st);

outtextxy (getmaxx div 2+step,getmaxy div 2+i*k,st);

str (i*u,st);

outtextxy (getmaxx div 2+step,getmaxy div 2-i*k,st);

end;

d:=-u*12;

repeat

d:=d+0.002;

putpixel (round(320+d*k/u),round(240+(-POlinom(n,d,x,y))*k/u),10);

until d>u*12;

readkey;

end;

{Основной текст программы}

begin

TextMode(3);

TextBackground(1);

TextColor(14);

Titul;

writeln ('Вывести пояснение к программе?? (Да-1,Нет-0)');

read (f);

if f=1 then help else

lp:clrscr;

writeln('Введите количество узлов n (N=n+1)');

read(n);

Enter(X,y);

Print(n,X,y);

repeat

lt:Writeln('BbBedite X (ot ',x[0]:4:2,' do ',x[n]:4:2,')');

read(d);

if d<x[0] then begin

writeln('Ошибка. x не может быть меньше ',x[0]:4:2);

goto lt; end;

if d>x[n] then begin

writeln('Ошибка. x не может быть больше ',x[n]:4:2);

goto lt; end;

writeln(Polinom (n,d,X,y):6:3);

writeln('Найти значения для другой точки X?(ДА-1,НЕТ-0)');

read(f)

until f=0;

Grafik(n,D,X,Y,l);

readkey;

CloseGraph;

clrscr;

writeln('Повторить для другой функции? (Да-1,Нет-0)');

read(f);

if f=1 then goto lp else end.

Исходные данные и результат решения контрольного примера

0

1

2

3

4

0

0.5

0.866

1

0.866

Вычислим значение таблично заданной функции в точке x=1.5

Ми получили значение 0.707 которое мало отличается от точного значения

.

Заключение

В курсовой работе я рассмотрел только первую формулу полинома Ньютона, которая используется вблизи начала таблицы. Интерполяционный полином в форме Ньютона удобно использовать, если точка интерполирования находится вблизи начала таблицы. Этот полином интересен тем, что каждая частичная сумма первых m слагаемых есть интерполяционный полином m-1 степени, построенный по m первым табличным точкам. Поэтому интерполяционные полиномы Ньютона удобно использовать при последовательном увеличении степени интерполяционного многочлена.

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

В процессе выполнения курсовой работы были закреплены приобретенные за период обучения навыки и умения самостоятельного составления алгоритмов и программ на языке программирования Turbo Pascal 7.0 для решения простых типовых математических задач. Эта работа ещё раз подтвердила полезность использования ЭВМ для решения прикладных математических задач. Полученные знания и накопленный опыт решения простых задач в будущем позволят разрабатывать гораздо более сложные программы и алгоритмы, облегчат разбиение сложных задач на простые элементы.

Список использованных источников

1. Введение в численные методы/ А.А. Самарский - М.: наука, 1982.

2. Начала программирования на языке Паскаль/С.А. Абрамов - М., 1987.

3. Практическое руководство по методам вычислений с приложением программ для персональных компьютеров/ В.И. Ракитин - М.: Высш. шк., 1998.

4. Программирование в среде Турбо Паскаль/Д.Б. Поляков - М., 1992.

5. Справочник по алгоритмам и программам на языке бейсик для персональных ЭВМ/ В.П. Дьяконов - М.: Наука, 1987.

6. Турбо Паскаль 7.0/В.В. Фаронов - М., 1998.

7. Численные методы анализа/Б.П. Демидович - М.: Государственное издательство физико-математической литературы, 1962.

8. Численные методы /Калиткин Н.Н. - М.: 1996

9. Немнюгин С.A. Turbo Pascal - СПб.: Питер, 2002.- 496 с,

Страницы: 1, 2, 3



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.