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

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

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

тема:

«Вычислениеопределённого интеграла

спомощью метода трапеций

накомпьютере»

Выполнил:

студентф-та

ЭОУС-1-12

ЗыковИ.

Принял:

ЗоткинС. П.

Москва 2001

1.         Введение:

Определенный интеграл от функции,имеющей неэлементарную первообразную, можно вычислить с помощью той или инойприближенной формулы. Для решения этой задачи на компьютере, можновоспользоваться формулами прямоугольников, трапеций или формулой Симпсона. В данной работе рассматривается формула трапеций.

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

/>

рис. 1

Тогда площадь первой слева полоскибудет приближенно выражаться числом

((f(x)+f(x1))/2)*(x1-x)=((y+y1)/2)*((b-a)/n),

ибо основания трапеции, за которуюмы принимаем полоску, равны f(x)=yи f(x1)=y1,а высота её

x1-x=(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)*[y+2*(y1+…+yn-1)+yn].

Пологая для краткости y+yn=Yкр (крайние), y1+y2+…+yn-1=Yпром (промежуточные), получим

/> <td/>

ò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 |,  не будет меньше или равнатребуемой. Функция реализована с экономией вычислений, т. е. учитывается, что Sпостоянная и S1=S1+f(a+(2*i+1)*h), поэтому эти значения вычисляются единожды. Метод трапеций обладает высокой скоростью вычисления, но меньшейточностью, чем метод Симпсона, поэтому его применение удобно там,где не требуется очень высокая точность.

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

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

/>


/>                                                                                                          

                                                                                                                     ДА

/> /> /> /> /> /> /> /> /> />

                                                                 НЕТ

                                                                       

/> /> /> /> /> /> /> /> /> />

                                                                                                                            i=1

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

   

                                                                                                                        

/>                                                                                                                            i=n/2

/>


                                                                         

/>


3.         Листинг:

 

 

#include<stdio.h>

#include<math.h>

#include<conio.h>

main()

{

doublea,b,er,eps,f(double),s,trap(double,double,double,double(*)(double));

clrscr();

printf("\n Задайте пределы интегрирования и точность: ");

scanf("%lf%lf%lf",&a,&b,&eps);

s=trap(a,b,eps,f);

printf("\n Интегралот a=%3.2lf до b=%3.2lf равен %lf",a,b,s);

getch();

}

double f(double x)

{

returnx*x*x+2*(x*x)-3*x-8;

}

double trap(doublea,double b,double eps,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<n/2; 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

/> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> />

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.

еще рефераты
Еще работы по информатике, программированию