Реферат по предмету "Программирование, Базы данных"


Вычисление определённого интеграла с помощью метода трапеций на компьютере

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙСТРОИТЕЛЬНЫЙ УНИВЕРСИТЕТ








КУРСОВАЯ РАБОТА
тема:
«Вычисление определённого интеграла
 с помощью метода трапеций
на компьютере»







Выполнил:
 студент ф-та
 ЭОУС-1-12
Зыков И.

Принял:
Зоткин С. П.










Москва 2001
1.  Введение:

Определенный интеграл от функции, имеющейнеэлементарную первообразную, можно вычислить с помощью той или инойприближенной формулы. Для решения этой задачи на компьютере, можновоспользоваться формуламипрямоугольников, трапеций или формулой Симпсона. В данной работе рассматривается формулатрапеций.
Пусть I=òf(x)dx, гдеf(x) –непрерывная функция, которую мы для наглядности будем предполагатьположительной. ТогдаIпредставит собой площадькриволинейной трапеции, ограниченной линиямиx=a, x=b, y=0, y=f(x). Выберем какое-нибудь натуральное числоnи разложим отрезок[a,b] наnравных отрезков при помощи точек x0=aПрямыеx=xiразбивают интересующую наскриволинейную трапецию на nполосок. Примем каждую из этихполосок за обыкновенную прямолинейную трапецию (рис. 1, гдеn=4).

рис. 1
Тогда площадь первой слева полоски будет приближенно выражаться числом
((f(x0)+f(x1))/2)*(x1-x0)=((y0+y1)/2)*((b-a)/n),
ибо основания трапеции, за которую мыпринимаем полоску, равныf(x0)=y0и f(x1)=y1, а высота её
x1-x0=(b-a)/n.
Аналогично площади дальнейших полосоквыразятся числами
(y1+y2)*((b-a)/2*n),(y2+y3)*((b-a)/2*n), …, (yn-1+yn)*((b-a)/2*n).
Значит, для нашего интеграла получаетсяформула
I»((b-a)/2*n)*[y0+2*(y1+…+yn-1)+yn].
Пологая для краткостиy0+yn=Yкр(крайние), y1+y2+…+yn-1=Yпром (промежуточные), получим

òydx »((b-a)/2* n)*(Yкр+2*Yпром)  

                                                                                                                
Эту формулу можно записать в другом виде
òf(x)dx »(h/2)*[f(a)+f(b)+2åf(xi)]
(гдеh– длина одного изnравных отрезков,xi=a+i*h). Эта приближенная формула и называется формулой трапеций. Она оказывается тем более точной, чембольше взятое нами число n. Погрешность одного шага вычисляется поформуле: -(h^3)/12.
        Задача. Пусть нужно проинтегрировать функциюf(x) = x³ +2x²-3x-8 наотрезке [0, 6]. На этом отрезке функция непрерывна.
Для выполнения поставленной задачисоставлена нижеописанная программа, приближенно вычисляющая определенный интеграл с помощью методатрапеций. Программа состоит из трехфункций main, fиtrap. Функцияmainпозволяет ввести интервалы интегрирования изадать точность вычисления интеграла, а такжевызывает функциюtrapдля вычисления интеграла ираспечатывает на экране результат. Функцияfпринимает аргументxтипаfloatи возвращает значениеинтегрируемой функции в этой точке. Trap– основная функция программы: она выполняет все вычисления, связанные снахождением определенного интеграла.Trapпринимает четыре параметра: пределыинтегрирования типаfloat(aи b), допустимую относительную ошибкутипаfloatи указатель на интегрируемую функцию. Вычисления выполняются до техпор, пока относительная ошибка, вычисляемая по формуле | S-Sn |, не будет меньше или равнатребуемой. Функция реализована с экономией вычислений, т. е. учитывается, что S0 постоянная и S1=S1+f(a+(2*i+1)*h), поэтому эти значениявычисляются единожды. Методтрапеций обладает высокой скоростьювычисления, но меньшей точностью, чем метод Симпсона, поэтому его применение удобно там, где нетребуется очень высокая точность.
            Ниже предлагается блок-схема,листинг, спецификации, ручной счет и результат работы программы на примере поставленной выше задачи. Блок-схема позволяет отследить и понять особенностиалгоритма программы, спецификации дают представление о назначении каждойпеременной в основной функции trap, листинг - исходный код работающей программы с комментариями, а ручной счет предоставляет возможность проанализироватьрезультаты выполнения программы.
2.  Блок-схема программы:

Вводa, b, eps
n = 4, S=1, Sn = 101
S0=(f(a)+f(b))*0.5
S1=f(0.5*(a+b))


| S-Sn | > eps                                                                                                           
                                                                                                                     ДА


                                                                  НЕТ
                                                                       

Sn=S
h=(b-a)/n
Вывод S

                                                                                                                            i=1

S1=S1+f(a+(2*i+1)*h)  
                                                                                                                         
                                                                                                                            i=n/2

S=h*(S0+S1)
n=n*2

                                                                         


3.  Листинг:
 
#include
#include
#include
main()
{
doublea,b,er,eps,f(double),s,trap(double,double,double,double(*)(double));
clrscr();
printf(" Задайте пределы интегрирования иточность: ");
scanf("%lf%lf%lf",&a,&b,&eps);
s=trap(a,b,eps,f);
printf(" Интеграл от a=%3.2lf до b=%3.2lfравен %lf",a,b,s);
getch();
}
double f(double x)
{
return x*x*x+2*(x*x)-3*x-8;
}
double trap(double a,double b,doubleeps,double(*f)(double))
{
double h,s,s0,s1,sn;
int i,n;
s=1; sn=101;
n=4;
s0=(f(a)+f(b))/2;
s1=f((a+b)/2);
while(fabs(s-sn)>eps){
        sn=s;
        h=(b-a)/n;
        for(i=0; i
           s1+=f(a+(2*i+1)*h);
       s=h*(s0+s1);
        n*=2;
                                  }
return s;
}
4.  Спецификации:
Имя переменной
Тип
Назначение
n
int
число разбиений отрезка[a, b]
i
int
счетчик циклов
a
double
Нижний предел интегрирования
b
double
Верхний предел интегрирования
h
double
шаг разбиения отрезка
eps
double
допустимая относительная ошибка
f
double(*)
указатель на интегрируемую фун — цию
x
double
аргумент ф-ии f
s
double
текущий результат интегрирования
s0
double
половина суммы значений функции в точках a и b
s1
double
сумма значений функции в промежуточных точках
sn
double
предыдущий результат интегрирования
5.  Ручной счет:
Xi
Yi
-8
0,75
-8,703125
1,5
-4,625
2,25
6,765625
3
28
3,75
61,609375
4,5
110,125
5,25
176,078125
6
262


6.  Результат работы программы:
                                                                                                                                         
                       приeps=0.1                                                         приeps= 0.001
 
                Введите a, b, eps:                                 Введите a, b,eps:       
                0                                                                                 0
                6                                                                                 6
                .1                                                                                 .001
 
             Интеграл= 366.024170                                     Интеграл= 366.000094         
           т.е с помощью этой программы можно вычислить интеграл от функции сточностью до 1/10000.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.