Как получить значение каждого интеграла независимо в c ++? - PullRequest
2 голосов
/ 07 апреля 2020

Я использую правило 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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...