Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <math.h>
- using namespace std;
- double fnc(double x){ //интегрируемая функция
- return (x*x + sin(x)*sin(x)*sin(x) + 2);
- }
- double modul(double x){ //взятие модуля
- if(x<0){
- return -1*x;
- }
- if(x>=0){
- return x;
- }
- }
- double fnc2 (double x){// неопределённый интеграл
- return ((1.0/3.0*(cos(x)*cos(x)*cos(x) + x*x*x)) - cos(x) + x*2.0);
- }
- int main()
- {
- double a,b;// границы интегрирования
- double e;// заданная точность
- int n; //начальное число шагов
- cout<<"granici intervala:";
- cin>>a>>b;
- cout<<"tochnost':";
- cin>>e;
- cout<<"nachal'noe chislo shagov:";
- cin>>n;
- double c = b-a; //вычисление длины интервала
- double h; //ширина шага
- double h2; //ширина шага для следующей итерации
- double ocenka=10;
- double summ1,summ2; // приближённое значение интеграла
- double summ3; // точное значение интеграла
- cout<<"dlina intervala="<<c<<endl;
- while(ocenka>=e){
- h=c/n;//определение длины шага
- h2=c/(2*n);
- summ1=0;
- summ2=0;
- for (int i=0; i<n;i++){
- summ1+=h*fnc(a+(i*h)); // вычисление интеграла разбиением на n шагов
- }
- for(int l=0;l<2*n;l++){
- summ2+=h2*fnc(a+(l*h2)); // ... на 2n шагов
- }
- ocenka =(1.0/3.0) * modul(summ2 - summ1);//вычисление коэффициента, нужного для проверки условия
- n*=2;
- }
- summ3 = fnc2(b) - fnc2(a);
- cout<<"priblizhennoe znachenie:"<<summ2<<endl; // значение интеграла
- cout<<"polucheno pri "<<n*2<<" shagov"<<endl;
- cout<<"dlina shaga:"<<h2<<endl;
- cout<<"tochnoe znachenie:"<<summ3;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement