Top.Mail.Ru
Ответы

Посчитать интеграл методом трапеции

Здравстуйте помагите пожалуйста.
Необходимо написать программу для вычисления интеграла по формуле трапеции с тремя десятичными знаками.

По дате
По рейтингу
Аватар пользователя
Новичок
8мес
123456789101112131415161718192021
 using System;
class Test {
  static double f(double x) {
    return 1.0 / Math.Sqrt(0.5 + x * x);
  }

  static void Main() {
    double sum = (f(1.2) + f(2.4)) / 2.0;
    double res = sum * (2.4 - 1.2), prev;
    int n = 1;
    do {
        n *= 2;
        prev = res;
        for (int i = 1; i < n; i += 2) {
            sum += f((2.4 * i + 1.2 * (n - i)) / n);
        }
        res = sum * (2.4 - 1.2) / n;
    } while (Math.Abs(prev - res) >= 0.0003);
    Console.WriteLine($"{res:f3}");
  }
} 
Аватар пользователя
Искусственный Интеллект
8мес

Если по уму и красивенько, то так:

123456789101112131415161718192021222324252627282930313233
 public delegate double Function(double x); 
 
public static double Integrate(Function f, double a, double b, double dx) 
{ 
    double Result = 0d; 
    if (a > b) 
        (a, b) = (b, a); 
    int n = 0; 
    double x; 
    do 
    { 
        x = a + dx * n++; 
        Result += (f(x) + f(x + dx)) * dx / 2d; 
    } 
    while (x < b); 
    return Result; 
} 
 
static void Main(string[] args) 
{ 
    double Result, OldResult = 0d; 
    double dx = 0.1; 
    do 
    { 
        Result = Integrate(x => 1d / Math.Sqrt(0.5 + x * x), 1.2, 2.4, dx); 
        if (Math.Abs(OldResult - Result) < 0.001) 
            break; 
        OldResult = Result; 
        dx /= 2d; 
    } 
    while (true); 
    Console.WriteLine($"{Result:f3}"); 
}