Пример 2.
Разработать подпрограмму вычисления определённого интеграла функции f(x) на заданном отрезке [a,b].
y
f(x)
Надо найти площадь криволинейной трапеции.
Самый простой способ решения этой задачи – метод прямоугольников. Этот метод состоит в разбиении области интегрирования [a,b] на равные отрезки длины h и нахождение суммы площадей прямоугольников.
Площадь прямоугольника равна величине h умноженной на значение функции f(x) в левом конце yотрезка.
f(x)
……
Входными данными функции подсчёта интеграла будут: границы отрезка a,b , число разбиений отрезка n и интегрируемая функция f.
Тогда шаг разбиения отрезка [a,b] можно рассчитать по формуле
h b a n
При этом интеграл считается по формуле
n 1
INT f a i * h * h
i 0
Конкретизируем задачу. Рассчитать :
|
|
|
x |
|
Int1 |
b |
x2 dx; |
Int2 |
b |
1 |
dx |
|
a |
|
|
a |
|
|
Для реализации этой задачи надо написать функцию интегрирования, в соответствие с разработанным методом, две подинтегральные функции и основную программу .
//программа integral
//Функция интегрирования
float integ(float a, float b,int n, float (*f)(float)) {int i; float h, s;
h=(b-a)/n; s=0; for (i=0;i< =n-1;i++) s+=f(a + i*h)*h; return s;
}
//Подынтегральные функции
float f1( float x) {return x*x;}
float f2(float x) { return (1/x);}
//основная программа int main(void)
{ float i1,i2,a,b; int n;
cout<< “введите исходные данные”; cout<<“a=“;
cin>>a;
cout<<“b=“;
cin>>b; cout<<“n=“; cin>>n;
//вызов функции интегрирования i1= integ(a,b,n,f1);
i2= integ(a,b,n,f2); cout<<“i1=“<<i1<<“ i2=“<<i2<<endl;
}
Вся программа
#include <iostream> using namespace std; float f1( float x)
{return x*x;} float f2(float x) { return (1/x);}
float integ(float a, float b,int n, float (*f)(float)) {int i; float h, s; h=(b-a)/n; s=0;
for (i=0;i<=n-1;i++) s+=f(a + i*h)*h; return s; }
int main(void)
{ float i1,i2,a,b;int n;
cout<< "vvod"; cout<<"a="; cin>>a; cout<<"b=";cin>>b;
cout<<"n="; cin>>n; i1= integ(a,b,n,f1); i2= integ(a,b,n,f2);
cout<<"i1="<<i1<<" i2="<<i2<<endl; return 0;
}