Advertisement
TheMagnusRex

Для Кирюши

Aug 29th, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.59 KB | None | 0 0
  1. #include <iostream>
  2. #include "math.h"
  3.  
  4. using namespace std;
  5.  
  6. double fnc (double x){
  7.     return x*x*x + cos(x)*cos(x) + 2*x;
  8. }
  9.  
  10. double modul(double x){ //взятие модуля
  11.     if(x<0){
  12.         return -1*x;
  13.     }
  14.     else{
  15.         return x;
  16.     }
  17. }
  18.  
  19. double fnc2(double x){
  20.     return (0.25*(x*x*x*x + sin(2*x))) + (0.5*x) + (x*x);
  21. }
  22.  
  23. int main()
  24. {
  25.     double a,b;// границы интегрирования
  26.     double e;// заданная точность
  27.     int n; //начальное число шагов
  28.     cout<<"granici intervala:";
  29.     cin>>a>>b;
  30.     cout<<"tochnost':";
  31.     cin>>e;
  32.     cout<<"nachal'noe chislo shagov:";
  33.     cin>>n;
  34.     double c = b-a; //вычисление длины интервала
  35.     double h; //ширина шага
  36.     double h2; //ширина шага для следующей итерации
  37.     double ocenka=10;
  38.     double summ1,summ2; // приближённое значение интеграла
  39.     double summ3; // точное значение интеграла
  40.     while (ocenka>=e){
  41.         h = c/n;
  42.         h2= c/(2*n);
  43.         summ1=0;
  44.         summ2=0;
  45.         for (int i=0;i<n;i++){
  46.             summ1+= 0.5*h*(fnc(i*h)+fnc(h*(i+1)));
  47.         }
  48.         for(int l=0;l<2*n;l++){
  49.             summ2+=0.5*h2*(fnc(l*h2)+fnc(h2*(l+1)));
  50.         }
  51.         ocenka= (1.0/3.0)*modul(summ2 - summ1);
  52.         n*=2;
  53.     }
  54.     summ3=fnc2(b) - fnc2(a);
  55.     cout<<"priblizhennoe znachenie:"<<summ2<<endl;
  56.     cout<<"polucheno pri "<<n<<" shagov"<<endl;
  57.     cout<<"tochnoe znachenie:"<<summ3<<endl;
  58.     return 0;
  59.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement