Смекни!
smekni.com

Интерполяция функции одной переменной методом Ньютона (стр. 3 из 4)

К чему приводит пренебрежение этими правилами — видно из принципа некомпетентности Питера: «ЭВМ многократно увеличивает некомпетентность вычислителя».

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

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

Современный физик или инженер-конструктор для успешной работы должен одинаково хорошо владеть и «классическими» методами, и численными методами математики.

2. Турбо Паскаль

Язык Паскаль с момента своего создания Н. Виртом в 1971 году играет особую роль и в практическом программировании, и в его изучении. С непревзойденной четкостью в нем реализованы принципы структурного программирования. Паскаль стал первым языком, с которым знакомиться большинство будущих программистов.

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

Схематически программа представляется в виде последовательности восьми разделов:

1. Заголовок программы

2. Описание внешних модулей, процедур и функций

3. Описание меток

4. Описание констант

5. Описание типов переменных

6. Описание переменных

7. Описание функций и процедур

8. Раздел операторов

Разработка программы по схеме алгоритма

При разработке программы в данной работе используются следующие операторы и стандартные процедуры:

Program - Заголовок программы

Uses – раздел подключения модулей

Begin – открывающая логическая скобка

End – закрывающая логическая скобка

:= - оператор присваивания

Crt - (Cathod ray tube - электронно-лучевая трубка) один из наиболее часто используемых модулей. Он содержит процедуры обслуживания процессов вывода информации на экран, ввода с клавиатуры, а также процедуры и функции вывода звуковых сигналов, работы с окнами на экране и вывода цветных текстовых строк на экран.Graph – графический модуль для вывода базовых графических элементов, таких как точки, отрезки прямых линий, дуги и целые окружности и других графических элементов, называемых графическими примитивами

Var – раздел описания переменных

Writeln, Write – операторы вывода информации

Readln, Read – операторы ввода информации

If <условие> then <оператор>– оператор условного перехода

For <параметр>:=<нач.знач.> to <конечн.знач.> do <оператор> – оператор цикла с параметром

Repeat <оператор> until <условие> - оператор цикла с постусловием

Clrscr – очистка экрана

Initgraph – процедура инициализации графического режима

Closegraph – процедура закрытия графического режима

Line (x1, y1, x2, y2) – соединение двух точек отрезком

Putpixel (x, y, c) – построение точки (x, y) цветом с

Readkey – оператор считывание кода клавиш

Outtextxy (x, y, st) – вывод строки st, начиная с точки (x,y)

Getmaxx – результатом этой функции будет max значение x в данном видеорежиме

Goto – перейти к + - арифметическая операция сложения- - арифметическая операция вычитания* - арифметическая операция умножения/ - арифметическая операция деления

Описание переменных и констант используемых в алгоритме

n – количество узлов в таблице, не считая начальную точку

;

i, j – счётчики;

- значения узлов записанных в одномерные массивы;

D – переменная, используемая для нахождения значения полинома Ньютона в этой точке;

L – переменная значения полинома Ньютона

k, step – константы используемые для построения графика полинома;

u – переменная шага деления графика;

Для описания алгоритма в данной курсовой работе были пронумерованы символы.

Инструкция пользования программой

Для запуска программы необходимо дважды щелкнуть на ярлыке с именем Niton.exe. После этого на экран будет выведен титульный лист. Чтобы продолжить надо нажать клавишу Enter.

Следующим шагом в окне программы будет показана строка с текстом «Показать пояснения к программе (1/0)?», чтобы увидеть их следует нажать 1 и подтвердить ввод нажатием клавиши Enter. Чтобы продолжить надо нажать клавишу Enter. Сразу после этого в диалоговом окне появится строка «Введите количество уpлов n (N=n+1)», где нужно указать количество (N-1) узлов таблицы и нажать Enter. Далее надо будет ввести значения из таблицы, по окончанию ввода нажать Enter.

На экран будет выведена введённая таблица значений. Затем пользователю будет предложено «Введите x». Нужно ввести x для которого необходимо найти приближённое значение. После этого программа вычислит значение и предложит найти значения для другого x.

Дальше программа попросит ввести шаг деления графика. После ввода шага программа построит график полинома. Для продолжения нужно нажать Enter.

Потом программа спросит «повторить вычисления и построения графика полинома для другой функции?» Чтобы начать заново нужно нажать 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;

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

ProcedureTitul;

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;

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

Procedurehelp;

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 ('Ошибка. Повторите ввод.');

gotomp

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)');