Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой по информатике.doc
Скачиваний:
2
Добавлен:
12.09.2019
Размер:
173.57 Кб
Скачать

1.4. Метод Симпсона.

Этот метод более точный по сравнению с методами прямоугольников и трапеций.

Формула Симпсона (также Ньютона-Симпсона[1]) относится к приёмам численного интегрирования. Получила название в честь британского математика Томаса Симпсона (1710—1761).

Суть приёма заключается в приближении подынтегральной функции на отрезке [a, b] интерполяционным многочленом второй степени p2(x), т.е. приближение графика функции на отрезке параболой. Метод Симпсона имеет порядок погрешности 4 и алгебраический порядок точности 3.

Геометрически иллюстрация формулы Симпсона состоит в том, что на каждом из сдвоенных частичных отрезков заменяем дугу данной кривой дугой графика квадратного трехчлена.

Для непрерывной функции y=f(x) на [a,b] погрешность формулы парабол (Симпсона) пропорциональна h4.А это значит, что уменьшение шага в два раза ведет к уменьшению погрешности формулы Симпсона в 16 раз.

По формуле Симпсона при некотором шаге h вычисляют интеграл. Затем шаг увеличивают вдвое и опять вычисляют интеграл. Второе, более грубое вычисление интеграла служит для оценки точности первого, более точного. Все цифры первого и второго вычислений совпадающие в результате, а также первая неточная цифра более точного результата считаются верными. Например, если более точное вычисление число 1,4673, а второе - 1,4657, то 1,467 - верное значение интеграла (в нем 4-значащие цифры - верные).

Для проведения более грубого расчета никаких других подготовительных работ не требуется. Значения xi и y(xi) берутся через одно. Следует только учесть, что при первом (более точном) расчете необходимо выбрать такое число точек разбиения, которое кратно 4 т.е. делится на четыре. Если при выбранном исходном шаге h необходимая точность результата не достигнута, то проводят третье, четвертое вычисления с шагом равным половине исходного и т.д.

Разобьем отрезок интегрирования [a; b] на 2× n равных частей длины. Обозначим точки разбиения x0=a; x1=x0+h, ... , xi=x0+i× h, ..., x2n=b. Значения функции f в точках xi обозначим yi, т.е. yi=f(xi). Тогда согласно методу Симпсона:

Рис 3- Метод парабол (метод Симпсона)

Геометрический смысл формулы Симпсона: площадь криволинейной трапеции под графиком функции f(x) на отрезке [a, b] приближенно заменяется суммой площадей фигур, лежащих под параболами по рисунку 3.

1.5 Графика в системе Турбо Паскаль.

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

Чтобы сделать процесс графического программирования более эффективным, фирма Borland International разработала специализированную библиотеку Graph (в этом библиотечном модуле содержится 79 графических процедур, функций, различных стандартных констант и типов данных), набор драйверов, позволяющих работать с разными типами мониторов, и набор шрифтов для вывода на графический экран текстов разной величины и формы.

Аппаратная поддержка графики ПК обеспечивается двумя основными модулями: видеомонитором и видеоадаптером.

Запуск и завершение работы в графической системе осуществляется следующим образом:

1. Подключить модуль Graph (библиотеку графических процедур): normal">uses Graph;

2. Установить графический режим:

- описываем переменные, которые определяют графический драйвер и монитор:

var gd, gm: integer;

- задаем команду ПК для самовыбора значений переменных:

gd:=Detect;(значение gm после команды gd:=detect; определяется автоматически)

- инициализируем графический режим:

InitGraph( gd, gm,’ указывается путь к драйверу, чем подробнее, тем лучше’)

С этого момента все графические средства доступны пользователю.

3. Завершить работу в графической системе: CloseGraph;

Базовые процедуры и функции.

Для построения изображений на экране используется система координат. Отсчет начинается от верхнего левого угла экрана, который имеет координаты (0,0). Значение Х (столбец) увеличивается слева направо, значение Y (строка) увеличивается сверху вниз. Чтобы строить изображения, необходимо указывать точку начала вывода. В текстовых режимах эту точку указывает курсор, который присутствует на экране. В графических режимах видимого курсора нет, но есть невидимый текущий указатель CP (Current Pointer). Фактически это тот же курсор, но он невидим.

Процедуры модуля Graph (процедура, формат, действие).

SetColor SetColor (a: word); Устанавливает цвет, которым будет осуществляться рисование.

SetBkColor SetBkColor (a: word); Устанавливает цвет фона.

SetFillStyle SetFillStyle (a,b: word); a – стиль закраски, b – цвет Устанавливает стиль и цвет закраски.

SetLineStyle SetLineStyle (a,b,c: word); а – стиль линии, b- образец построения линии (может устанавливаться пользователем), с-толщина линии Устанавливает стиль и толщину линии.

SetTextStyle SetTextStyle (a,b,c: word); Устанавливает шрифт, стиль и размер текста.

SetFillPattern SetFillPattern (Pattern: FillpatternType; Color:word); Выбирает шаблон заполнения, определенный пользователем.

ClearDivice ClearDivice; Очищает экран и устанавливает текущий указатель в начало.

SetViewPort SetViewPort (x1, y1 , x2, y2 : integer, Clip:boolean); Устанавливает текущее окно для графического вывода.

ClearViewPort ClearViewPort; Очищает окно.

PutPixel PutPixel (a,b,c :integer); Рисует точку цветом с в (x,y)

Line Line(x1, y1 , x2,y2 :integer); Рисует линию от (x1, y1) к (x2,y2).

Rectangle Rectangle (x1, y1 , x2, y2:integer ); Рисует прямоугольник с диагональю от (x1, y1) к (x2, y2) .

Bar Bar (x1, y1 , x2, y2:integer); Рисует закрашенный прямоугольник.

Bar3D Bar3D (x1, y1 , x2,y2, d:integer, a:boolean); Рисует трехмерную полосу (параллелепипед).

Circle Circle (x,y,r: word); Рисует окружность радиуса r с центром в точке (x, y).

Arc Arc(x, y, a, b, R:integer); a, b- начальный и конечный углы в градусах. Рисует дугу из начального угла к конечному, используя (x,y) как центр.

Ellipse Ellipse (x, y, a, b, Rx, Ry: integer); a, b- начальный и конечный углы в градусах. Рисует эллиптическую дугу от начального угла к конечному, используя (x, y) как центр.

FillEllipse FillEllipse (x, y, Rx, Ry:integer); Rx, Ry – вертикальная и горизонтальная оси; Рисует закрашенный эллипс .

MoveTo MoveTo (x, y:integer); Передвигает текущий указатель в (x, y).

MoveRel MoveRel(x, y : integer); Передвигает текущий указатель на заданное расстояние от текущей позиции на x по горизонтали и на y по вертикали.

OutText OutText (text: string); Выводит текст от текущего указателя.

OutTextxy OutTextxy(x, y: integer, text: string); Выводит текст из (x, y).

Sector Sector(x, y, a, b, Rx, Ry: integer); a, b- начальный и конечный углы в градусах ;Рисует и заполняет сектор эллипса.

Функции модуля Graph

GetBkColor- Возвращает текущий фоновый цвет;

GetColor- Возвращает текущий цвет;

GetX -Возвращает координату X текущей позиции;

GetY -Возвращает координату Y текущей позиции;

GetPixel- Возвращает цвет точки в (x, y).

Экран и окно в графическом режиме

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

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

Если требуется создать окно, следует воспользоваться процедурой SetViewPort (x1, y1, x2, y2 : integer, Clip:boolean) ; где x1, y1 – координаты левого верхнего угла, x2, y2 – координаты правого нижнего угла окна. После создания окна за точку отсчета принимается верхний левый угол окна, имеющий координаты (0,0).

Вывод простейших фигур. Вывод точки .

Какие бы изображения не выводились на экран, все они построены из точек, теоретически можно создать любое изображение путем построения точек определенного цвета в нужном месте экрана. В библиотеке Graph вывод точки осуществляется процедурой PutPixel (x, y: integer, color:word); где x, y: координаты расположения точки, color – цвет. Возможные значения Color приведены в таблице 1- Настройка цветов в модуле CRT Turbo Pascal.

( См. Приложение).

Вывод линии

Из точек строятся линии (отрезки прямых). Это можно сделать с помощью процедуры Line (x1, y1 , x2,y2 :integer); где x1, y1 – координаты начала, x2,y2 - координаты конца линии. В процедуре Line нет параметра для установки цвета. В этом случае цвет задается процедурой SetColor (цвет: word); где цвет из таблицы 1.

Для черчения линий применяются еще две процедуры: LineTo и LineRel. Процедура LineTo (x,y: integer) строит линию из точки текущего положения указателя в точку с координатами x,y. Процедура LineRel (dx,dy: integer) проводит линию от точки текущего расположения указателя (x, y) в точку x+dx, y+dy.

Турбо Паскаль позволяет вычерчивать линии самого различного стиля: тонкие, широкие, штриховые, пунктирные и т.д. Установка стиля производится процедурой SetLineStyle(a,b,c: word), где a устанавливает тип строки; b – образец, с – толщина линии, определяемая константами, возможные значения приведены в таблице 2.(См.Приложение). Если применяется один из стандартных стилей, то значение b равно 0. Если пользователь хочет активизировать собственный стиль, то значение b =4. В этом случае пользователь сам указывает примитив (образец), из которого строится линия.

2 ОПИСАНИЕ ПРОГРАММЫ

Исходные данные: Две пересекающиеся кривые заданы функциями

f(x) = x – cos(x), g(x) = x2 – 3,8x + 4,6.

Program {служебное слово, заголовок} KR{имя программы}

Uses crt, graph {подключение модуля CRT, подключение модуля Graph}.

Var {раздел описания данных} real {десятичное число с дробной частью}

integer {целое десятичное число}

string {переменная строки}

Function f(x:real): real;{раздел описания данных функции с переменной x действительного типа}

Begin {первая операторная скобка}

f:= x- cos(x);{заданная функция}

end { вторая операторная скобка}

Function g(x: real): real;

Begin

g:= x*x – 3.8*x + 4.6;

End;

Procedure GRF {Инициализация графики}

Var gd, dm: integer {gd-графический драйвер, gm-графическую мода целого типа}

Begin

gd:= detect {Автоматически определяет графический драйвер}

InitGraph (gd, gm, `C: \pas5`) ;{ Инициализирует графическую систему, устанавливает графический режим, указывается путь к драйверу, чем подробнее, тем лучше}

Cleardevice {Очищает экран в графическом режиме}

End;

Procedure GRAFIK;

Begin

Sx: =50;

Sy: =40;

GRF; setcolor (15) ;{ Устанавливает цвет, которым будет осуществляться рисование}

SetTextStyle (2, 0, 5) ;{ Устанавливает шрифт, стиль и размер текста}

X0:=200; Y0:=280;

Line (150, y0, 530, y0) ;{ координаты начала, координаты конца линии}

Line(x0, 50, x0, 400);

Line(x0, 50, x0 - 3, 60);

Line(x0, 50, x0 + 3, 60);

Line (530,280,520,280 - 3);

Line (530,280,520,280+3);

OutTextXY (540, y0 – 5,`x`);{Подписывает ось абсцисс}

OutTextXY (x - 10, 30,`y`); { Подписывает ось ординат}

SetLineStyle (1, 0, 2) ;{ а – стиль линии, b- образец построения линии (может устанавливаться пользователем), с-толщина линии. Устанавливает стиль и толщину линии}

Line (270, 230, 270, 280);

Line (390, 90, 390, 280);

{шкала х}

hx: =1*Sx;

For i: = 0 to 6 do {для организации цикла с известным числом повторений, i -параметр цикла, to- до, do – делать}

Begin

w: =round(x0 + hx*i); {Округляет значение вещественного типа до значения целочисленного типа}

Line (w, y0 – 5, w, y0);

Str (1*i: 3, a); {Преобразует число в последовательность символов}

OutTextXY (w – 12, y0 + 10, a);

End;

x: =0;

SetLineStyle (0, 0, 3);

MoveTo(x0 + round(x*Sx), y0 – round (F(x)*Sy)); Перемещает указатель вывода в точку с координатами х и у}

For i: = 0 to 50 do

LineTo(x0 + round (i/10*Sx), y0 – round (F (i/10)*Sy)) ;{ Рисует прямую линию из точки, в которой находится текущий указатель, в точку (x,y).}

x: =0;

For i: = 0 to 40 do

LineTo(x0 + round (i/10*Sx), y0 – round (G (i/10)*Sy));

SetFillStyle (3, 0) ;{ Задает стандартный орнамент и цвет заполнения фигур, a -задаваемый стандартный параметр, b - цвет заполнения фигур (номер цвета в палитре)}

FloodFill (300, 210, 15) ;{ Заполняет произвольную замкнутую фигуру, используя текущий стиль заполнения (узор и цвет), X, Y – координаты любой точки внутри замкнутой фигуры; Border – цвет граничной линии. Если фигура не замкнута, заполнение «разольется по всему экрану}

Readln {переход на новую строку при вводе данных}

CloseGraph {процедура Turbo Pascal, которая выполняет закрытие графической системы}

End;

Procedure MPD;

Begin

write (`начало интервала j=`) ;{ Выводим содержимое файла на экран} Readln (j);

write (`конец интервала b=`) ;{ Выводим содержимое файла на экран} Readln (b);

repeat {начало цикла, служит для организации циклов с заранее неизвестным

(известным) числом повторений}

x :=( j+b)/2;

if (F (j) – G (j))*(F(x) – G(x)) <0 {Условие}

then b: =x {условие истинно}

else j: =x ;{ условие ложно}

until abs (b-j) <1e-4 ;{ Все операторы, находящиеся между словами Repeat и Until}

повторяются до тех пор, пока логическое условие является истинным}

end;

Procedure MT;

Begin

While true do

Begin

write (`число интервалов l=`); Readln (l);

h :=( x2 – x1)/l;

s :=(( f(x1) – g(x1)) + (f(x2) – g(x2))/2);

for i: =1 to l-1 do

begin

x: = x1+i*h;

s: =s+f(x) – g(x);

end;

writeln (` значение интервала S = `, s*h: 8:5) ;{ оператор вывода данных на

экран монитора}

End;

End;

Begin

Clrscr ;{ очистка экрана}

GRAFIK;

MPD; x1:=x; writeln (`x1=`, x1:6:4);

MPD; x2:=x; writeln( `x2 =` ,x2:6:4);

MT;

Readln;

End.

Таблица 1 - Настройка цветов в модуле CRT Turbo Pascal.

Константа

Число

Цвет

Процедуры

Black

0

Черный

TextColor, TextBackGround

Blue

1

Синий

TextColor, TextBackGround

Green

2

Зеленый

TextColor, TextBackGround

Cyan

3

Голубой

TextColor, TextBackGround

Red

4

Красный

TextColor, TextBackGround

Magenta

5

Фиолетовый

TextColor, TextBackGround

Brown

6

Коричневый

TextColor, TextBackGround

LightGray

7

Ярко-серый

TextColor, TextBackGround

DarkGray

8

Темно-серый

TextColor

LightBlue

9

Ярко-синий

TextColor

LightGreen

10

Ярко-зеленый

TextColor

LightCyan

11

Ярко-голубой

TextColor

LightRed

12

Ярко-красный

TextColor

LightMagenta

13

Ярко-фиолетовый

TextColor

Yellow

14

Желтый

TextColor

White

15

Белый

TextColor

Blink

128

Мерцание

TextColor (как слогаемое)

Таблица 2- Константы типов и толщины линий

SolidLn

0

Сплошная

DottedLn

1

Точечная

CenterLn

2

Штрихпунктирная

DashedLn

3

Пунктирная

NormWidth

1

Нормальная толщина

ThickWidth

3

Тройная толщина