Я использую правило 1/3 Симпсона в c ++, чтобы найти интеграл от k * (x * x), где k = 2 * m, а 'm' идет от 1 до 10, поэтому у меня есть 10 интегралов. Когда я написал код ниже, я получил ответы, но он добавил значения интеграла от предыдущих! например, для m = 1 => k = 2 интеграл равен 0,66667, теперь для m = 2 => k = 4 вместо получения 0,33333 интеграл равен 2,00 (0,66667 + 0,33333). Как этому помешать?
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int k;
double f(double x) {
return k * pow(x, 2);
}
int main() {
int n = 100000, m;
double h, a = 0, b = 1, sum = 0, x, y;
cout << "The number of sub-intervals is n = " << n << endl;
cout << fixed << showpoint << setprecision(5);
for (m = 1; m <= 10; m++) {
cout << "m = " << m << endl;
k = 2 * m;
cout << "k = " << k << endl;
h = (b - a) / n;
for (int i = 1; i <= n; i++) {
x = a + i * h;
if (i % 2 == 0) {
sum = sum + 2 * f(x);
} else {
sum = sum + 4 * f(x);
}
}
y = h / 3.0 * (f(a) + sum + f(b));
cout << "The integration is: " << y << endl;
}
}