47095 (608080), страница 3
Текст из файла (страница 3)
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 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 В курсовой работе я рассмотрел только первую формулу полинома Ньютона, которая используется вблизи начала таблицы. Интерполяционный полином в форме Ньютона удобно использовать, если точка интерполирования находится вблизи начала таблицы. Этот полином интересен тем, что каждая частичная сумма первых m слагаемых есть интерполяционный полином m-1 степени, построенный по m первым табличным точкам. Поэтому интерполяционные полиномы Ньютона удобно использовать при последовательном увеличении степени интерполяционного многочлена. К недостатку формулы Ньютона можно отнести то, что при вычислениях в таблице с постоянным шагом при увеличении количества узлов не всегда удается добиться повышения точности вычислений. Это обусловлено тем, что равноотстоящие узлы не являются лучшими с точки зрения уменьшения погрешности интерполирования. Если имеется возможности выбора узлов интерполирования, то их следует выбирать так, чтобы обеспечить минимум погрешности интерполяции. В процессе выполнения курсовой работы были закреплены приобретенные за период обучения навыки и умения самостоятельного составления алгоритмов и программ на языке программирования Turbo Pascal 7.0 для решения простых типовых математических задач. Эта работа ещё раз подтвердила полезность использования ЭВМ для решения прикладных математических задач. Полученные знания и накопленный опыт решения простых задач в будущем позволят разрабатывать гораздо более сложные программы и алгоритмы, облегчат разбиение сложных задач на простые элементы. Список использованных источников Введение в численные методы/ А.А. Самарский – М.: наука, 1982. Начала программирования на языке Паскаль/С.А. Абрамов – М., 1987. Практическое руководство по методам вычислений с приложением программ для персональных компьютеров/ В.И. Ракитин – М.: Высш. шк., 1998. Программирование в среде Турбо Паскаль/Д.Б. Поляков – М., 1992. Справочник по алгоритмам и программам на языке бейсик для персональных ЭВМ/ В.П. Дьяконов – М.: Наука, 1987. Турбо Паскаль 7.0/В.В. Фаронов – М., 1998. Численные методы анализа/Б.П. Демидович – М.: Государственное издательство физико-математической литературы, 1962. Численные методы /Калиткин Н.Н. – М.: 1996 Немнюгин С.A. Turbo Pascal - СПб.: Питер, 2002.- 496 с, 30
Вычислим значение таблично заданной функции в точке x=1.5
Ми получили значение 0.707 которое мало отличается от точного значения
.
Заключение















