Вычисление інтеграла фукции f (x) (методом Сімпсона WinWord)
Історія появи та розвитку персональних комп’ютерів є один із явищ ХХ століття. З часу появи перших зразків персональних комп’ютерів минуло менше 25 років, а тепер без них вже немислимо дуже багато областей людської діяльності — економіка, управління, наука, інженерну справу, видавничу справу, освіту, культура тощо. Інтерес Вільгельма до персональним комп’ютерів постійно зростає, а коло… Читати ще >
Вычисление інтеграла фукции f (x) (методом Сімпсона WinWord) (реферат, курсова, диплом, контрольна)
З Про Д Є Р Ж, А М І Е Введение 2 1. Постановка завдання 3 2. Математична частина 4 3. Опис методу виконання завдання 9 4. Опис алгоритму виконання завдання 10 5. Текст програми 11 6. Результати роботи програми 15 Укладання 16.
Список використаних джерел: 17.
Історія появи та розвитку персональних комп’ютерів є один із явищ ХХ століття. З часу появи перших зразків персональних комп’ютерів минуло менше 25 років, а тепер без них вже немислимо дуже багато областей людської діяльності - економіка, управління, наука, інженерну справу, видавничу справу, освіту, культура тощо. Інтерес Вільгельма до персональним комп’ютерів постійно зростає, а коло користувачів удвічі нижчу безупинно розширюється. До користувачів ПЕОМ втягуються як новачки в комп’ютерному справі, і фахівці з інших класам ЭВМ.
Мова Паскаль — це з найбільш поширених мов програмування 80−90х років, підтримуючий найсучасніші методології проектування програм (спадне, модульне проектування, структурне програмування) мають свою досить багату історію развития.
Нове життя мови дала фірма Борланд, розробила його основі сімейство Паскаль — систем, званих Турбо Паскалем. Інтегрована середовище, забезпечує многооконную розробку програмної системи, великий набір вмонтований у неї коштів компіляції і налагодження, доступним роботи через легко освоюване меню, — усе це забезпечує високу продуктивності праці програміста, недосяжну під час роботи з колишніми средами.
Мова Турбо Паскаль добре адресований навчання программированию.
1. Постановка задачи.
Завданням на курсову роботу є створення програми мовою програмування Турбо Паскаль, які мають здійснювати рішення наступній завдання :
Обчислити приближённое значення інтеграла функції f (x) на інтервалі з точністю до 0.01 методами Сімпсона і трапеції із єдиною метою сравнения.
Интегрируемая функція: [pic].
Визначити метод, що вирішує це завдання за мінімальне число повторений.
Побудувати графік функції f (x) на заданому інтервалі. Вирішити це завдання з допомогою функцій і процедур алгоритмічного мови Турбо Паскаль.
2. Математична часть.
Для приближённого обчислення інтеграла функції f (x) використовуються методи приближённого інтегрування, найбільш уживані їх засновані на заміні інтеграла кінцевої сумою. Для обчислення [pic]промежуток від a (x0) до b (xn) розбивається на n рівних частин, й у точок розподілу x0, x1, x2, x3, .. ., xn-1, xn обчислюються значення интегрируемой функції y. Потім необхідно скористатися формулою приближённого интегрирования:
1) Формула трапецій (мал.1) :
[pic]. (1).
[pic].
Рис. 1.
2) Формула Cимпсона (парабол) (мал.2) :
[pic] (2).
[pic].
Рис. 2.
У моєму курсової роботі розглядається близьке обчислення інтеграла [pic].
(1).
У його апроксимації замінимо функцію f (x) параболою, що проходить через точки [pic] тобто уявімо наближено f (x) в виде.
[pic] [pic].
де [pic] - интерполяционный багаточлен Лагранжа другий степени,.
[pic]. (2).
Проводячи інтегрування получим.
[pic] [pic].
Отже дійшли наближеному равенству.
[pic] (3).
Яке називається формулою Сімпсона чи формулою парабол.
На всім відрізку [a, b] формула Сімпсона має вид.
[pic].
Чтобы не використовувати дробових індексів можна обозначить.
xi=a+0,5hi, fi=f (xi), i=1,2,…, 2N, hN=b-a.
и записати формулу Сімпсона в виде.
[pic] (4).
Перш ніж переходити для оцінювання похибки формули (3) зауважимо, що вона є точної нічого для будь-якого багаточлена третього ступеня, тобто. має місце точне равенство.
[pic].
если f (x)=a0+a1x+a2x2+a3x3. Це твердження неважко перевірити безпосередньо. Для оцінки похибки формули Сімпсона скористаємося интерполяционным многочленом Эрмита. Побудуємо багаточлен третього ступеня H3(x) такий, что.
[pic] [pic] [pic] [pic].
Такой багаточлен є і єдиний. Проте навіть знадобиться явний вид багаточлена H3(x). Згадуючи, що формула Сімпсона точна нічого для будь-якого багаточлена третього ступеня, получим.
[pic] (5).
Представим тепер f (x) в виде.
f (x)=H3(x)+ri (x), [pic]x ([xi-1,xi], (6).
где ri (x) — похибка интерполирования многочленом Эрмита H3(x). Інтегруючи (6) та враховуючи (5), получим.
[pic] (7).
Далее имеем.
[pic].
поэтому з (7) для похибки [pic] формули (3) отримуємо оценку.
[pic] де [pic].
Вычисляя інтеграл дійшли остаточної оцінці [pic] (8).
Погрешность складовою формули Сімпсона оцінюється так.
[pic] (9).
Отсюда видно, що формула Сімпсона істотно точніше, ніж формули прямокутників і трапецій. На частковому відрізку вона не має точність О (h5), але в всім відрізку — O (h4).
3. Опис методу рішення задачи.
Аби вирішити поставленого завдання необхідні такі действия:
1) Запровадити значення кордонів отрезков;
2) Вивести графік функції на екран з урахуванням масштаба;
3) Обчислити інтеграл методом трапеций;
4) Обчислити інтеграл методом Симпсона;
Для забезпечення успіху цих дій програма має складатися з наступних функціональних модулей:
1) Функція f — обчислює значення интегрируемой функции;
2) Функція trap — обчислює інтеграл методом трапеций;
3) Функція simpson — обчислює інтеграл методом Симпсона;
4) Процедура norm — обчислює порядок числа, необхідний побудови графіка функції з урахуванням масштаба;
5) Процедура out_gr — будує графік функції на екрані а графічному режимі з урахуванням масштаба.
Основна (головна) програма має здійснювати введення значення кордонів відрізків, виклик функцій і процедур обчислення та виведення результатів на экран.
4. Опис алгоритму рішення задачи.
Відповідно до приведеним словесними описами алгоритму рішення поставленого завдання розроблена блок схема розв’язуваної завдання, яка зображено на рис. 3.
У зображеному алгоритмі блоки мають описане нижче назначение:
Блок 1. Початок программы;
Блок 2. Очищення экрана;;
Блок 3. Запит на введення значень Проте й В;
Блок 4. Введення значень Проте й У з клавиатуры;
Блок 5. Виклик процедури виведення графіка функції на экран;
Блок 6. Установка початкового значення счётчика відрізків рівним 3;
Блок 7. Обчислення значення початкового значення інтеграла методом трапеций;
Блок 8. Запам’ятовування попереднього значення інтеграла, обчисленого методом трапецій, збільшення значення числа відрізків на 2, обчислення наступного значення інтеграла методом трапеций;
Блок 9. Перевірка умови: абсолютне значення різниці поточного і попереднього значень інтегрування менш як 0.001, якщо так, то вихід із циклу, якщо ні, то перехід на блок 8.
Блок 10. Висновок результатів, отриманих при обчисленні інтеграла методом трапецій на экран.
Блок 11. Установка початкового значення счётчика відрізків рівним 3;
Блок 12. Обчислення значення початкового значення інтеграла методом Симпсона;
Блок 13. Запам’ятовування попереднього значення інтеграла, обчисленого методом Сімпсона, збільшення значення числа відрізків на 2, обчислення наступного значення інтеграла методом Симпсона;
Блок 14. Перевірка умови: абсолютне значення різниці поточного і попереднього значень інтегрування менш як 0.001, якщо так, то вихід із циклу, якщо ні, то перехід на блок 13.
Блок 15. Висновок результатів, отриманих при обчисленні інтеграла методом Сімпсона на экран.
Блок 16. Кінець программы.
5. Текст программы.
program tr_s; uses crt, graph; var a, b: real; { Кордони відрізка } r, r2: real; { Попереднє і поточне наближені значення інтеграла} n: integer; { Лічильник } { Интегрируемая функція } function f (x:real):real; begin f:=1/(x*ln (x)*0.43 429); end; { Метод трапецій } function trap (a, b: real;n:integer):real; var s: real; { Отримана сума } h: real; { Крок } m: integer; { Лічильник } begin h:=(b-a)/(n-1); { Визначається крок } s:=(f (a)+f (b))/2; { Початкова значення суми } for m:=1 to n-2 do s:=s+f (a+m*h); { Суммиование інших елементів} trap:=s*h; { Повертається значення інтеграла } end; { Метод Сімпсона } function simpson (a, b: real;n:integer):real; var s: real; { Сума } h: real; { Крок } m: integer; { Лічильник } mn: integer; { Черговий множник } begin h:=(b-a)/(n-1); { Розраховується крок } s:=f (a)+f (b); { Початкова значення кроку } mn:=4; { Перший мнодитель — 4 } { Підсумовування інших елементів } for m:=1 to n-2 do begin s:=s+mn*f (a+h*m); if (mn=4) then mn:=2 else mn:=4;{ Именение мноителя 24 } end; simpson:=s*h/3; { Повертається розрахований значення } end;
{ Процедура обчислення порядку числа } procedure norm (a:real); var n: real; begin { Якщо замало — повертається нуль } if (a0.01 then dlty:=20 else dlty:=0; { Розрахунок масштабів } mx:=500/(xmax-xmin); my:=400/(ymax-ymin); { Розрахунок збільшення по X } sx:=(xmax-xmin)/550; { Висновок системи координат } settextjustify (1,1); xx:=xmin; repeat setcolor (1); line (trunc (40+mx*(xx-xmin)+dltx), 20, trunc (40+mx*(xx-xmin)+dltx), 469); str (xx:4:2,s); setcolor (15); outtextxy (trunc (40+mx*(xx-xmin)+dltx), 475, s); xx:=xx+50*sx; until (xx>(xmax+50*sx)); yy:=ymin+(ymax-ymin)/10; repeat setcolor (1); line (41,trunc (470-my*(yy-ymin)-dlty), 630, trunc (470-my*(yy-ymin)-dlty)); str (yy:4:2,s); setcolor (15); outtextxy (20,trunc (470-my*(yy-ymin)-dlty), s); yy:=yy+(ymax-ymin)/10; until (yy>(ymax+(ymax-ymin)/10)); line (40,0,40,480); line (0,470,640,470); line (40,0,38,10); line (40,0,42,10); line (640,470,630,472); line (640,470,630,468); { Висновок графіка } xx:=xmin; repeat yy:=f (xx); putpixel (trunc (40+mx*(xx-xmin)+dltx), trunc (470-my*(yy-ymin)-dlty), 7); xx:=xx+sx; until (xx>xmax); outtextxy (300,10, «Press ESC to continue »); repeat until (readkey=#27); closegraph; end;
{ Основна програма } begin { Введення кордонів відрізків } clrscr; write («Запровадьте A, B: »); readln (a, b); { Виводиться графік функції } out_grp (a, b, f (b), f (a)); { Обчислюється інтеграл методом трапецій } n:=3; r:=trap (a, b, n); { Початкова значення } repeat r2:=r; { Запам’ятовується попереднє значення } n:=n+2; { Збільшується кількість кроків } r:=trap (a, b, n); { Розраховується нового значення } until (abs (r-r2).