Метод трапеций. Вычислить определенный интеграл [latex]I=\int_{b}^{a}f(x)dx [/latex] методом трапеций:[latex] I\approx \frac{b-a}{2n}(y_{0}+2y_{1}+\dots+2y_{n-1}+y_{n}), [/latex] где [latex] n [/latex] — количество отрезков разбиения; [latex]y_{0},y_{1},\ldots,y_{n} [/latex] — значения функции [latex]f(x) [/latex] на концах отрезков.
Вычислим определенный интеграл для функции [latex]y=-3x^2+2x+9[/latex] [latex] \int_{-1}^{2}(-3x^2+2x+9)dx=21 [/latex]
Решение:
Ссылка на ideone C++: http://ideone.com/RJpYSw
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <math.h> using namespace std; double f(double x){return (-3*x*x+2*x+9);} double I(double a,double b,int n,double y){return ((b-a)/(2*n)*y);} int main() { int n; double a,b,y,dy,In; cin>>a>>b>>n; if (n>1){ dy=(b-a)/n; y+=f(a)+f(b); for (int i=1; i<n; i++) {y+=2*(f(a+dy*i));} In=I(a,b,n,y); cout << In; } else {cout << "Wrong data";} } |
Ссылка на ideone Java: http://ideone.com/AfEDeq
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static double f(double x){return (-3*x*x+2*x+9);} public static double I(double a,double b,int n,double y){return ((b-a)/(2*n)*y);} public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); int n; double a,b,dy,In,y=0; a = in.nextDouble(); b = in.nextDouble(); n = in.nextInt(); if (n>1){ dy=(b-a)/n; y+=f(a)+f(b); for (int i=1; i<n; i++) {y+=2*(f(a+dy*i));} In=I(a,b,n,y); System.out.printf("%f", In); } else {System.out.printf("Wrong Data");} } } |
В условии самой задачи весь алгоритм решения расписан.
— Забыли dx в одной из формул
— В 10-й строке ошибочно делите на n — 1. Нужно делить на n. Исправьте, точность значительно возрастёт. При больших n ошибка уменьшается и в пределе получаем правильное значение, но с гораздо большей погрешностью для каждого конкретного n.
Исправил. Перепутал количество отрезков с количеством чисел, поэтому делали на n-1. Так действительно намного точнее при небольших n
Зачтено