Advertisement
TheMagnusRex

Integr

Apr 9th, 2020
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.30 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. double rectl(double a, double b, int n){//объявление функции, для вычисления интеграла методом прямоугольников (левых), a,b - границы интегрирования, n - число шагов
  7.     double dx = (b-a)/n; // определение длины шага интегрирования
  8.     double summ = 0; // переменная, куда будут записываться промежуточные значения интегралла
  9.     for(int i =0; i<n; i++){
  10.         summ+=pow((a+dx*i),2) * dx;// f(a+dx*i) * dx
  11.     }
  12.     return summ;
  13. }
  14.  
  15. double rectr(double a, double b, int n){ // вычисления интеграла методом прямоугольников (правых)
  16.     double dx = (b-a)/n;
  17.     double summ = 0;
  18.     for (int i =1; i<n+1;i++){
  19.         summ+=pow((a+dx*i),2) * dx;
  20.     }
  21.     return summ;
  22. }
  23.  
  24. double trap(double a, double b, int n){
  25.     double dx = (b-a)/n;
  26.     double summ = 0;
  27.     for (int i = 0; i<n;i++){
  28.         summ+= 0.5*dx*(pow(a+dx*i,2) + pow(a+dx*(i+1),2));// dx*(f(x_i-1) + f(x_i))/2
  29.     }
  30.     return summ;
  31. }
  32.  
  33. double rectm(double a, double b, int n){ // вычисления интеграла методом прямоугольников (средних)
  34.     double dx = (b-a)/n;
  35.     double summ = 0;
  36.     for (int i =0; i<n;i++){
  37.         summ+=pow(a+dx*(0.5 + i),2) * dx;// f((x_i-1 - x_i)/2)*dx
  38.     }
  39.     return summ;
  40. }
  41.  
  42. double simps(double a, double b, int n){//вычисление интеграла методом Симпсона
  43.     double dx = (b-a)/n;
  44.     double summ = 0;
  45.     for(int i =0; i<n;i++){
  46.         summ+=(dx/6)*(pow((a+dx*i),2)+4*pow(a+dx*(0.5 + i),2) + pow(a+dx*(i+1),2)) ;//(dx/6)*(f(x_i-1) + 4f(x_i-1 + x_i) + f(x_i))
  47.     }
  48. }
  49.  
  50. int main()
  51. {
  52.     cout<<"znachenie dlya metoda levych pryamougol'nikov="<<rectl(0,10,5)<<endl;
  53.     cout<<"znachenie dlya metoda pravych pryamougol'nikov="<<rectr(0,10,5)<<endl;
  54.     cout<<"znachenie dlya metoda pryamougol'nikov="<<rectm(0,10,5)<<endl;
  55.     cout<<"anchenie dlya metoda trapeciy="<<trap(0,10,5)<<endl;
  56.     cout<<"znachenie dlya metoda simpsona="<<simps(0,10,5);
  57.     cout<<"znachenie dlya analiticheskogo metoda="<<pow(10,3)/3.0;
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement