Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Метод Сімпсона на компьютере

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Для цього розділимо відрізок точкою з = (a + b) / 2 навпіл й у точці C (c, f (c)) проведемо дотичну до лінії y = f (x). Після цього розділимо точками p і q на 3 однакові частини і проведемо них прямі x = p і x = q. Нехай P і Q — точки перетину цих прямих з дотичній. Поєднавши A з P і B з Q, одержимо 3 прямолінійні трапеції aAPp, pPQq, qQBb. Тоді площа трапеції aABb можна наближено вважати… Читати ще >

Метод Сімпсона на компьютере (реферат, курсова, диплом, контрольна)

МОСКОВСЬКИЙ ДЕРЖАВНИЙ БУДІВЕЛЬНИЙ УНИВЕРСИТЕТ.

КУРСОВА РАБОТА.

«Програма наближеного обчислення певного інтеграла з допомогою ф — лы Сімпсона на компьютере».

Виконав: студент ф — та ЭОУС — 1 — 12.

Валюгин А. С.

Принял:

Зоткин З. П.

Москва 2001.

1.

Введение

.

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

Розглянемо функцію y = f (x). Вважатимемо, що у відрізку [a, b] вона позитивна і безупинна. Знайдемо площа криволінійної трапеції aABb (рис. 1).

[pic] рис. 1.

Для цього розділимо відрізок [a, b] точкою з = (a + b) / 2 навпіл й у точці C (c, f (c)) проведемо дотичну до лінії y = f (x). Після цього розділимо [a, b] точками p і q на 3 однакові частини і проведемо них прямі x = p і x = q. Нехай P і Q — точки перетину цих прямих з дотичній. Поєднавши A з P і B з Q, одержимо 3 прямолінійні трапеції aAPp, pPQq, qQBb. Тоді площа трапеції aABb можна наближено вважати за такою формуле.

I ((aA + pP) / 2 * h + (pP + qQ) / 2 * h + (qQ + bB) / 2 * h, де h =.

(b — a) / 3.

Откуда получаем.

I ((b — a) / 6 * (aA + 2 * (pP + qQ) + bB).

заметим, що aA = f (a), bB = f (b), а pP + qQ = 2 * f©, у результаті отримуємо малу фор — лу Симпсона.

Мала формула Сімпсона дає інтеграл із хорошою точністю, коли графік подинтегральной функції мало зігнуть, у разі ж, коли дана більш складна функція мала формула Сімпсона непридатна. Тоді, щоб вважати інтеграл заданої функції потрібно розбити відрізок [a, b] на n частин 17-ї та до кожному з відрізків застосувати формулу (1). Після зазначених вище дій вийде «велика» формула Сімпсона, має вид, где Yкр = y1 + yn, Yнеч = y3 + y5 + … + yn — 1, Yчет = y2 + y4 + … + yn — 2, а h = (b — a) / n.

Завдання. Нехай потрібно проинтегрировать функцію f (x) = xі(x — 5)І на відрізку [0, 6] (рис. 2). У цьому відрізку функція безупинна та приймає лише неотрицательные значення, т. е. знакопостоянна.

[pic] рис. 2.

На виконання поставленого завдання складена нижчеописана програма, наближено вычисляющая певний інтеграл з допомогою формули Сімпсона. Програма складається з трьох функцій main, f і integral. Функція main викликає функцію integral для обчислення інтеграла і опубліковує на екрані результат. Функція f приймає аргумент x типу float і повертає значення интегрируемой функції у цій точці. Integral — основна функція програми: вона виконує все обчислення, пов’язані з перебуванням певного інтеграла. Integral приймає чотири параметра: межі інтегрування типу float, допустиму відносну помилку типу float і покажчик на интегрируемую функцію. Обчислення виконуються до того часу, поки відносна помилка, вычисляемая по формуле.

| (In/2 — In) / In | ,.

где In інтеграл при числі разбиений n, нічого очікувати менше необхідної. Наприклад, допустима відносна помилка e = 0.02 це що означає, що максимальна похибка в обчисленнях буде більше, ніж In * e = 0.02 * In. Функція реалізована з економією обчислень, т. е. враховується, що Yкр стала, а Yнеч = Yнеч + Yчет, тому ті значення обчислюються раз. Висока точність і швидкість обчислення роблять використання програми з урахуванням формули Сімпсона більш бажаним при наближеному обчисленні з дитинства інтегралів, ніж використання програм з урахуванням формули трапеції чи методу прямоугольников.

Нижче пропонується блок — схема, специфікації, лістинг і ручний рахунок програми з прикладу поставленої вище завдання. Блок — схема дозволяє відстежити і зрозуміти особливості алгоритму програми, специфікації дають уявлення про призначення кожної перемінної в основний функції integral, лістинг — вихідний код працюючої програми з коментарями, а ручний рахунок дає можливість проаналізувати результати виконання программы.

2. Блок — схема программы.

ДА НЕТ.

3. Спецификации.

|Имя переменной|Тип |Призначення | |n |int |Кількість разбиений відрізка [a, b] | |і |int |Лічильник циклів | |a |float |Нижній межа інтегрування | |b |float |Верхня межа інтегрування | |h |float |Крок розбивки відрізка | |e |float |Припустима відносна помилка | |f |float |Покажчик на интегрируемую фун — цию | | |(*) | | |s_ab |float |Сума значень фун — ции в точках a і| | | |b | |s_even |float |Сума значень фун — ции в непарних | | | |точках | |s_odd |float |Сума значень фун — ции в парних | | | |точках | |s_res |float |Поточний результат інтегрування | |s_pres |float |Попередній результат інтегрування |.

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

#include.

#include.

/* Прототип фун — ции, вычисляющей інтеграл */ float integral (float, float, float, float (*)(float));

/* Прототип фун — ции, яка задає интегрируемую фун — цию */ float f (float);

main ().

{ float result;

result = integral (0, 6, .1, f); printf («%f », result);

return 0;

}.

/* Реалізація фун — ции, яка задає интегрируемую фун — цию.

*/ float f (float x).

{.

/* Функція f (x) = xі(x — 5)І */ return pow (x, 3) * pow (x — 5, 2);

}.

/* Реалізація фун — ции, вычисляющей інтеграл */ float integral (float a, float b, float e, float.

(*f)(float)).

{ int n = 4, і; /* Початкова число разбиений 4 */ float s_ab = f (a) + f (b); /* Сума значень фун — ции в a і b */ float h = (b — a) / n; /* Обчислюємо крок */ float s_even = 0, s_odd; float s_res = 0, s_pres;

/* Сума значень фун — ции в непарних точках */ for (і = 2; і < n; і += 2) { s_even += f (a + і * h);

} do { s_odd = 0; s_pres = s_res;

/* Сума значень фун — ции в парних точках */ for (і = 1; і < n; і += 2) { s_odd += f (a + і * h);

}.

/* Підрахунок результату */ s_res = h / 3 * (s_ab + 2 * s_even + 4 * s_odd);

/* Уникаємо розподілу на нуль */ if (s_res == 0) s_res = e; s_even += s_odd; n *= 2; h /= 2;

} while (fabs ((s_pres — s_res) / s_res) > e);/*.

Виконувати до того часу, поки результат досягнуто не задовольнятиме припустимою помилці */.

return fabs (s_res); /* Повертаємо результат */.

}.

5. Ручний счет.

Таблиця константних значень для n = 8 |Ім'я переменной|Значение| |a |0 | |b |6 | |e |.1 | |s_ab |216 | |h |.75 |.

Підрахунок s_even |і |a + і * |f (a + і *|s_even | | |h |h) | | |2 |1.5 |41.34 375 |41.34 375 | |4 |3 |108 |149.34 375| |6 |4.5 |22.78 125 |172.125 |.

Підрахунок s_odd |i|a + і *|f (a + і |s_odd | | |h |* h) | | |1|.75 |7.62 012 |7.6201| | | | |2 | |3|2.25 |86.14 158|93.761| | | | |7 | |5|3.75 |82.3973 |176.15| | | | |9 | |7|5.25 |9.044 |185.20| | | | |3 |.

Підрахунок s_res |(f (x)|s_res = h / 3 * (s_ab + 2 * s_even +|Абсолютна помилка | |dx |4 * s_odd) | | |324 |325.266 |1.266 |.

———————————- Введення a, b, e, f (x).

n = 4, h = (b — a) / n s_ab = f (a) + f (b) s_even = 0, s_res = 0.

s_even = s_even + f (a??? " ??? " ??? ???††??? + і * h).

і = 2, n — 1, 2.

s_odd = 0, s_pres = s_res.

і = 1, n — 1, 2.

s_odd = s_odd + f (a + і * h).

s_res = h / 3 * (s_ab + 2 * s_even + 4 * s_odd) s_even = s_even + s_odd, n = n / 2, h = h / 2.

| (s_pres — s_res) / s_res | > e.

I ((b — a) / 6 * (f (a) + 4 * f© + f (b)) (1).

Висновок s_res.

I (h / 3 * (Yкр + 2 * Yнеч + 4 * Yчет) (2).

Показати весь текст
Заповнити форму поточною роботою