Чисельне інтегрування функції

Міністерство освіти і науки, молоді та спорту України

Бердичівський коледж промисловості, економіки та права

Циклова комісія спеціальності 5.05010301 „Розробка програмного забезпечення”

Чисельне інтегрування функції

Курсова робота

з дисципліни „Основи програмування та алгоритмічні мови”

Виконав

 

Педосенко Д.В.

Керівник викладач

 

Куропаткін С.Г.


 

 

Зміст

Реферат

 

4

1 Вступ

 

5

2 Основна частина

 

7

2.1 Аналіз розв’язуваної задачі

 

7

2.2 Дослідження джерел існуючої інформації

 

9

3 Вибір мови і технології програмування

 

10

4 Опис творчого процесу розв’язку задачі

 

12

4.1 Структура програмного виробу

 

12

4.2 Інтерфейс користувача

 

13

4.3 Розробка алгоритму програми

 

14

4.4 Опис програми

 

15

4.5 Структура файлів вхідних даних

 

18

4.6 Опис роботи програми

 

19

5 Вимоги до програмної та інформаційної сумісності

 

20

6 Висновок

 

21

7 Список використаних джерел

 

22

8 Додатки

 

23

    1. Лістинг програми
 

23

  1. Блок-схеми
 

30

      1. FUNCTION F
 

30

  1. PROCEDURE WORK
 

31

  1. PROCEDURE INPUT
 

32

  1. PROCEDURE INPUTFILE
 

33

  1. PROCEDURE EKRAN
 

34

  1. PROCEDURER PROPROG
 

35


 

РЕФЕРАТ

Курсова робота, 35с., 9 джерел, 2 додатки.

ЧИСЕЛЬНЕ ІНТЕГРУВАННЯ ФУНКЦІЇ

У роботі описані процес і результати розробки програмного продукту, який виконує розв’язок поставленої в курсовій роботі задачі.

При розробці програми використані мова програмування PASCAL, та технологія покрокової деталізації.

Робота програми можлива в операційній системі MS DOS на комп'ютерах, сумісних з IBM PC.

Подальший розвиток роботи можливо убік покращення зовнішнього інтерфейсу і адаптації програми до можливо більшої області потенційного застосування.

Робота має практичну цінність. Розрахунок економічної ефективності не виконувався.

 

ВСТУП

Розвиток і широке поширення засобів обчислювальної техніки в останні десятиліття послужило поштовхом до розробки програмного забезпечення різного рівня складності та різного за призначенням.

Для придбання вмінь та навичок розробки програмного забезпечення в процесі навчання вивчається предмет “Основи програмування та алгоритмічні мови”. Курсова робота є підсумком отриманих знань під час навчання.

Курсова робота “Чисельне інтегрування функцій” розроблена на алгоритмічній мові програмування з використанням текстового меню та методів математичної обробки інформації.

Наявність зручного інтерфейсу полегшує процес роботи користувача з програмою.

Основна частина курсової  робота містить чотири розділи, в яких розглянуто:

в першому розділі виконується аналіз задачі, що вирішується, а саме:

детальне вивчення завдання, доповнення необхідними додатковими умовами, формування виду вхідних даних та даних що необхідно отримати в результаті виконання програми,

вивчаються існуючі способі вирішення поставленої задачі в інформаційних джерелах та надається оцінка існуючим способам рішення;

обирається спосіб розв’язку, реалізації поставленої задачі.

в другому розділі здійснюється вибір технології та мови програмування

в третьому розділі розкривається творчій процес рішення, а саме:

розробка структурної схеми програми;

розробка інтерфейсу;

опис і розробка алгоритму розв’язку;

опис програми;

опис структури вхідної і вихідної інформації;

опис роботи програми.

в четвертому розділі вказані вимоги до програмної та інформаційної сумісності.

Отже, тема курсової роботи “Чисельне інтегрування функцій” носить практичний характер і є досить актуальною.

 

ОСНОВНА ЧАСТИНА

АНАЛІЗ РОЗВ'ЯЗУВАНОЇ ЗАДАЧІ

У курсовій роботі проведено дослідження методів чисельного інтегрування. Адже, у задачах, пов'язаних з аналізом, ідентифікацією, оцінкою якості, моделюванням різноманітних пристроїв автоматики, керування, інформаційно-вимірювальної техніки, радіоелектроніки, виникає необхідність обчислення визначених інтегралів. 

В основу чисельного інтегрування покладено наближене обчислення площини під кривою, яка описується підінтегральною функцією інтеграла:

Загальний підхід до розв’язування цієї задачі такий: визначений інтеграл I являє собою площину, обмежену кривою f(х), віссю Х та прямими Х=a, Х =b, відрізок від a до b розбивають на множину менших відрізків, знаходять наближено площу кожної площини Si, яку отримують за таким розбиванням, значення інтеграла І знаходять як суму площ площин Sі, тобто I =  Si. При цьому використовують два способи розбивання початкового відрізка на менші 

1.Розбивання відрізка проводиться  раніше, до того ж завжди відрізок  вибирають рівним (метод прямокутників, трапецій, Сімпсона). 

2.Місцезнаходження та довжина  відрізків визначаються аналізом, до того ж спочатку ставиться за мету досягти найбільшої точності з заданим числом відрізків, а потім відповідно з цим визначають їхні межі (методи Гаусса, Ньютона - Котеса, Чебишева) [1]. 

Метод прямокутників

Найпростішим методом наближеного обчислення інтеграла є метод прямокутників, геометрична інтерпретація якого зводиться до знаходження визначеного інтеграла як суми площ N прямокутників (з висотою f(x) та основою h=  xi=xi+1-xi), отриманих розділень відрізка[a,b] на N рівних частин, до того ж якщо розділити на прямокутники зліва на право, то отримаємо формулу лівих прямокутників: 

In=  f(x)dx»  Si=h[f(x0)+f(x1)+...+f(xn-1)]=  f(xi);(1.1) 

якщо ж розділити на N прямокутників справа на ліво, то отримаємо формулу правих прямокутників: 

Iпр=  f(x)dx => h[f(xn)+...+f(x1)]=  f(xi)(1.2) 

Метод трапецій

Суть методу трапеції, полягає в тому, що інтеграл обчислюється по-іншому, відрізок інтегрування поділяється на N рівних відрізків, всередині яких підінтегральна крива f(x) замінюється кусково- лінійною функцією j(x), отриманою стягуванням ординат N відрізків хордами. 

Обчислення визначеного інтеграла зводиться до знаходження сум площ Si прямокутних трапецій N. 

Площа кожної такої трапеції визначається як:

Si=h  (f(xi)+f(xi+1)).(1.3)

Отже, формула трапеції: 

I=  =>  Si=h(  f(x0)+f(x1)+f(x2)+...+f(xn-1)+  f(xN)= [ (f(x0)+f(xn))+  f(xi)].  (1.4) 

Графічна модель 

Похибка обчислення інтеграла за формулою трапецій оцінюється як 

(1.5)

Де М2 – максимальне значення другої похідної. f(x) при  ,h-крок обчислень. 

Метод Ньютона-Котеса

Цей метод засновано на апроксимації однієї із сторін криволінійної трапеції, яка отримується поділом відрізка [a,b] на N рівних частин, многочленами вищих порядків, також як у методі трапецій використовується лінійна апроксимація (заміна однієї із сторін трапеції прямою лінією), а в методі Сімпсона - апроксимація параболою. 

Основна формула методу: 

yiHi,(1.9) 

де Hi - коефіцієнти Ньютона - Котеса. Ці коефіцієнти не залежать від вигляду f(x), а є функцією тільки N (кількість вузлів інтерполяції). Таким чином, коефіцієнти Ньютона - Котеса можна обчислити раніше для різного числа вузлів інтерполяції . 

Легко можна показати, що методи трапецій та Сімпсона є частинними випадками методу Ньютона - Котеса. 

 

ДОСЛІДЖЕННЯ ДЖЕРЕЛ ІСНУЮЧОЇ ІНФОРМАЦІЇ

Метод Сімпсона (метод парабол або метод криволінійних трапецій)

Цей метод також використано у курсовій роботі, близький до методу трапецій у тій частині, що інтегрування проводиться шляхом поділу відрізка інтегрування [а, b] на множину відрізків (N пар відрізків). Однак, з метою збільшення точності наближеного інтегрування на кожному відрізку [Xi, Xi+2] підінтегральної функції f(x) замінюють квадратичною параболою j(x), обчислення визначеного інтеграла зводиться до обчислення суми N криволінійних трапецій Si: I=  f(x)dx»  Si [1]. 

 
 


Графічна модель. 

Площа кожної такої трапеції визначається за формулою Сімпсона: 

Si=   [f(xi)+4f(  xi+1)+f(xi+2)], (1.6), тобто 

(y0+4y1+y2), 

(y2+4y3+y4), 

(y4+4y5+y6), (1.7) 

(y2n-2+4y2n-1+y2n), 

Тоді чисельне значення визначеного інтеграла на відрізку [a,b] дорівнюватиме сумі інтегралів, тобто 

[y0+y2n+4(y1+...+y2n-1)+2(y2+...+y2n-2)], 

або 

[y0+y2n+4  y2i-1+2  y2i],(1.8) 

де h =(b-a)/2N. 

Похибка обчислення інтеграла за формулою Сімпсона оцінюється як 

де М4 – максимальне значення четвертої похідної. f(x) при  , h-крок обчислень. 

 

ВИБІР ТЕХНОЛОГІЇ І МОВИ ПРОГРАМУВАННЯ

В даний час ми є свідками бурхливого розвитку обчислювальної техніки і її упровадження в багато сфер людської діяльності. Особливо чітко ці тенденції виявляються, коли мова заходить про персональний ЕОМ.

Інтерес до персональних комп'ютерів постійно росте, а коло їхніх користувачів безупинно розширюється. У число користувачів ПЕОМ  утягують як новачки в комп'ютерній справі, так і фахівці з інших класів ЕОМ.

Хоча на ПЕОМ  може використовуватися багато різних мов програмування: BASIC, PASCAL, С++, ASSEMBLER, використання мови програмування Turbo Pascal найбільше ефективно.

Мова BASIC входить до складу програмного забезпечення майже усіх ПЕОМ, що випускаються в дійсний час. Розроблювачі ПЕОМ, як правило, включають у реалізовану версію мови засобу, що дозволяють використовувати всі можливості, надані апаратурою конкретної ПЕОМ. Завдяки цьому для користувача, що не є професійним програмістом (а таких користувачів ПЕОМ  більшість), BASIC виконує роль "базової" мови подібно мові ASSEMBLER для професійного програміста.

Мова С++ - універсальну мову загального призначення, область додатків якого - програмування систем у самому широкому змісті. Крім цього, С++ успішно використовується як у багатьох додатках, так і в могутніх операційних системах. Реалізація С++ здійснена для машин у діапазоні від найпростіших персональних комп'ютерів до самих могутніх комп'ютерів і для всіх операційних систем.

Мова ASSEMBLER - мова, найбільш близька до машинної. Він дозволяє програмісту найбільше ближче познайомитися з машиною (на відміну від мов програмування високого рівня), і тому вивчення ASSEMBLER означає також вивчення самого мікропроцесора 8086. Як правило програма, написана на ASSEMBLER, виконується набагато швидше програми, написаної на будь-якій іншій мові. Звичайно ассемблировані програми виконуються в 2-3 рази швидше, ніж еквівалентні програми С чи PASCAL, і в 15 і більш раз швидше, ніж програми, по-кроково інтерпретовані BASIC. Ассемблерні програми також значно менші за розміром.

Програми на ASSEMBLER відкривають програмісту повний доступ до можливостей комп'ютера.

Мова Turbo Pascal - це одна з найпоширеніших мов програмування. Вона розроблена фірмою "BORLAND" як діалект стандартної мови PASCAL, але завдяки своїй популярності сам став стандартом мови програмування.

До найважливіших переваг мови Turbo Pascal відносяться невеликий розмір компілятора, висока ступінь відповідності стандартному PASCAL, дуже швидка компіляція програм, об'єднання компілятора з інтерактивним екранним редактором,попередження про помилки на рівні вихідної програми, велика бібліотека підпрограм і корисні розширення, що спрощують системне програмування.

І що сама головне, мова Turbo Pascal підходить для навчання починаючих програмістів гарному стилю програмування.

При розробці алгоритму та програми мною було вибрано метод покрокової деталізації.

Перевага цього методу в тому, що можна було написавши головну програму, яка має вигляд:

begin

menu

end.

поступово уточнювати як самі пункти меню, так і поступово розробляти окремі процедури.

При виборі цього методу програмування прийшлось до найбільш важливих змінних та процедур писати коментарі, оскільки при повторному уточненні вже розробленого фрагменту інколи доводилось “згадувати”, що ж це я там написав. Це ще раз підтвердило вимогу до необхідності коментування власних програм, що і було зроблено. 
ОПИС ТВОРЧОГО ПРОЦЕСУ РОЗВ'ЯЗКУ ЗАДАЧІ


    • Input_keybord – введення числа з  клавіатури.
    • List_file – зчитування числа з файлу.
    • Work – процес інтегрування функції.
    • Save – збереження результатів інтегрування у файл.
    • Output – виведення розв'язку на екран.
 

ІНТЕРФЕЙС КОРИСТУВАЧУ


 


 



 

При запуску програми з'являється головне меню, яке включає в себе наступні пункти, що вказані вище на схемі:

У основному циклі програми користувачеві надається можливість вибору пункту меню і запуск відповідних дій. При виборі пункту меню «Вихід» програма завершує своє функціонування.

 
РОЗРОБКА АЛГОРИТМУ ПРОГРАМИ

 

Блок-схеми процедур та функцій описані в додатках.

 

ОПИС ПРОГРАМИ

Основна програма

    1. ім’я — TERMPAPER
    • глобальні константи:

a — верхня межа інтегрування;

b — нижня межа інтегрування;

    • Типи користувача:

Відсутні.

    • Глобальні змінні:

h,x,integ:real;

klav:char – символ, що вводиться  з клавіатури.

s:char – значення змінної;

f1,f2,f3:text—текстові файли;

st:string — рядок інформації  про програму.

    1. Пиризначення — виводить на екран текстове меню за допомогою якого організовується діалог користувача і програми.

Процедури та функції

Функція FUNCTION F(x:real):real. Дана функція в собі містить рівняння F:=exp(1/x+sin(x)).

Процедура PROCEDURE WORK – це сам процес інтегрування функції, де а,b – межі інтегрування, які нам відомі і результат записує в файл.

Процедура PROCEDURE INPUT – це процес введення числа – кількості розбиттів, що вводимо з клавіатури. Перевіряємо на парність: якщо непарне, то додаємо одиницю і виконуємо процедуру WORK.

Процедура PROCEDURE INPUTFILE аналогічна до попередньої, але зчитування числа йде з файлу.

Процедура PROCEDURE EKRAN виконує виведення на екран з файлу по одному рядку результат роботи програми.

Процедура PROCEDURE PROPROG виконує виведення на екран з файлу по одному рядку інформацію про програму.

СТРУКТУРА ФАЙЛІВ ВХІДНИХ ТА ВИХІДНИХ ДАННИХ

Файл вхідних даних vvod.txt має таку структуру:

8

В рядку міститься кількість точок розбиттів графіка функції;

Вихідним файлом є файл rez.txt, який містить результат обчислення визначеного інтегралу функції.

 

ІНСТРУКЦІЯ КОРИСТУВАЧА

При запуску програми з'явиться Меню з наступними пунктами:

    • Обробка даних з клавіатури
    • Обробка даних з файлу
    • Вивести результат на екран
    • Про програму
    • Вихід

При виборі першого пункту меню вам буде запропоновано ввести кількість точок розбиття. Після введення потрібно буде натиснути пробіл для виходу в головне меню.

При виборі другого пункту меню  програма автоматично зчитає число яке було збережено у файлі vvod.txt. Після введення потрібно буде натиснути пробіл для виходу в головне меню.

Після вибору третього пункту на екран буде виведено результат обчислення інтегралу. Для завершення потрібно буде натиснути пробіл.

При виборі четвертого пункту меню «Про програму» користувач може побачити інформацію про саму програму та її розробника.

При виборі п'ятого пункту програма завершує своє функціонування.

 

ВИМОГИ ДО ПРОГРАМНОЇ ТА ІНФОРМАЦІЙНОЇ СУМІСНОСТІ

Програма призначена для шифрування та розшифрування тексту.

Комплект поставки:

    • kursova.exe- виконуваний файл;
    • kursova.pas – код програми;
    • start.bat – загрузочний файл;
    • vvod.txt – контрольний файл вхідних даних;
    • rez.txt – контрольний файл із результатом;
    • proprog.txt – файл з інформацією про програму.

Мінімальні апаратні вимоги:

Процесор – 120 МГц

300 Кб  оперативної пам’яті

100 Кб  місця на диску

Операційна система DOS або Windows

Операційна оболонка.

Для встановлення програми на комп’ютер потрібно створити на жорсткому диску папку , а потім скопіювати у неї перераховані вище файли.

Для завантаження програми потрібно запустити виконуваний файл start.bat з операційної оболонки NC або Far Manager.

 

ВИСНОВОК

У даній курсовій роботі вирішена задача інтегрування функції методом парабол. Розроблено алгоритм рішення поставленої задачі.

Складена і налагоджена програма мовою Pascal.

У процесі налагодження програми була отримана цілком працездатна програма.

Проведено тестування програми, проаналізовані отримані результати.

Аналіз результатів показав, що поставлена задача успішно розв’язується.

 

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

    1. Ляшенко М.Я., Головань М.С. Чисельні методи: Підручник. Либідь. 1996. – 288 с.
    2. Крылов В. И., Шульга А. Т. Справочная книга по численному интегрированию. – М.: Наука, 1966.
    3. Хемминг Р. В. Численные методы. – М.: Наука, 1972. – 399 с.
    4. Плис А.И., Сливина Н.А. Mathcad. Математический практикум для инженеров и экономистов: – М.: Финансы и статистика, 2003. – 656с.
    5. Крилов В. И. и др. Начала теории вычислительных методов. Интегральное уравнение, некорректные задачи и улучшение сходимости. – Минск: Наука и техника, 1984. –   263 с.
    6. Прикладные методы и программирование в численном анализе. – М.: Изд-во Моск. ун – ту, 1985. – 185 с.
    7. Вирт Н. Алгоритмы + структуры данных = программы. Пер. с англ. — М.:Мир 1985. —406с.
    8. Иванов Б.Н. Дискретная математика. Алгоритмы и программы: Учеб. пособие. — М.: Лаборатория Базовых Знаний, 2001 — 288с.
    9. Дискретная математика для программистов/ Ф.А.Новиков. — СПб.: Питер, 2001. — 304с.
 

ДОДАТКИ

Лістинг програми:

program TERMPAPER;

uses crt;

const punkt:array[1..5] of string[30]=

('Обробка  даних з клавiатури','Обробка даних  з файлу',

'Вивести результат на екран','Про програму','Вихiд');

VAR i,y:byte;

a,b,h,x,integ:real;

k:integer;

klav,s:char;

f1,f2,f3:text;

st:string;

FUNCTION F(x:real):real;

BEGIN

  F:=exp(1/x+sin(x));

END;

PROCEDURE WORK;

BEGIN

  a:=5;

  b:=15;

  h:=(b-a)/k;

  integ:=F(a)+F(b)+4*F(a+h);

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

   begin

    x:=a+2*h*i;

    integ:=integ+2*F(x)+4*F(x+h);

   end;

  integ:=h*integ/3;

  assign(f1,'rez.txt');

  rewrite(f1);

  writeln(f1,integ);

  close(f1);

END;

PROCEDURE INPUT;

BEGIN

  write('Введiть  кiлькiсть(парне) => ');

  read(k);

   if (k mod 2)>0 then

    begin

     k:=k+1;

     writeln('Число не парне, тому було  замiнено на ',k);

    end;

  WORK;

END;

PROCEDURE INPUTFILE;

BEGIN

  assign (f2,'vvod.txt');

  reset(f2);

  while not eof (f2) do

   begin

    readln(f2,s);

   end;

  k:=ord(s)-48;

  if (k mod 2)>0 then

    begin

     k:=k+1;

     writeln('Число не парне, тому було  замiнено на ',k);

    end;

   close(f2);

   WORK;

END;

PROCEDURE EKRAN;

  var f1:text;

        s:string;

BEGIN

Assign (f1,'rez.txt');

reset(f1);

while not eof (f1) do

begin

readln(f1,s);

writeln(s);

end;

close(f1);

END;

PROCEDURE PROPROG;

BEGIN

  assign (f3,'proprog.txt');

  reset(f3);

  while not eof (f3) do

   begin

    readln(f3,st);

    writeln(st);

   end;

  close(f3);

END;

PROCEDURE ZASTAVKA;

BEGIN

  window(1,1,80,24);

  clrscr;

  textcolor(15);

  for i:=1 to 5 do

   Begin

    gotoxy(15,i*2);

    writeln(punkt[i]);

   End;

END;

PROCEDURE BLOKCURSOR;

ASSEMBLER;

ASM

MOV AH, 01

MOV CH, 32

MOV CL, 15

INT 10H

END;

PROCEDURE NORMALCURSOR;

ASSEMBLER;

ASM

MOV AH,01

MOV CH,14

MOV CL,15

INT 10H

END;

BEGIN

BLOKCURSOR;

y:=1;

ZASTAVKA;

repeat

  textcolor(12);

  gotoxy(13,y*2);

  write(chr(42));

  klav:=readkey;

  gotoxy(13,y*2);

  write(' ');

  if ord(klav)=72 then

   if y>1 then dec(y)

   else y:=5;

   if ord(klav)=80 then

    if y<5 then inc(y)

    else y:=1;

   if ord(klav)=27 then

    begin

     y:=5;

     klav:=chr(13);

    end;

   if (ord(klav)=13)and(y<5) then

    begin

     clrscr;

     case y of

      1:

      begin

       clrscr;

       NORMALCURSOR;

       textcolor(15);

       writeln(punkt[y]);

       INPUT;

       writeln('Для завершення натиснiть  пробiл');

        repeat until keypressed;

       clrscr;

       BLOKCURSOR;

       ZASTAVKA;

       klav:=chr(27);

      end;

      2:

      begin

       clrscr;

       NORMALCURSOR;

       textcolor(15);

       writeln(punkt[y]);

       INPUTFILE;

       writeln('Spase BAR');

        repeat until keypressed;

       clrscr;

      BLOKCURSOR;

       ZASTAVKA;

       klav:=chr(27);

      end;

      3:

      begin

       clrscr;

       NORMALCURSOR;

       textcolor(15);

       writeln(punkt[y]);

       EKRAN;

       writeln('Spase BAR');

        repeat until keypressed;

       clrscr;

       BLOKCURSOR;

       ZASTAVKA;

       klav:=chr(27);

      end;

      4:

      begin

       clrscr;

       NORMALCURSOR;

       textcolor(15);

       writeln(punkt[y]);

       PROPROG;

       writeln('Spase BAR');

        repeat until keypressed;

       clrscr;

       BLOKCURSOR;

       ZASTAVKA;

       klav:=chr(27);

      end;

     end;

    end;

UNTIL (ord(klav)=13)and(y=5)

END.

 

Блок-схеми:

  1. FUNCTION F


 

 
  1. PROCEDURE WORK


 

 
  1. PROCEDURE INPUT


 

 
  1. PROCEDURE INPUTFILE


 

 
  1. PROCEDURE EKRAN


 
  1. PROCEDURE PROPROG

Бердичів 2012