Нахождение интеграла формулой Симпсона - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Написал программку для вычисления значения интеграла с помощью формулы Симпсона (https://ru.wikipedia.org/wiki/Формула_Симпсона), считаю с заданным количеством шагов, без определения погрешности. Потом если что переделаю этот момент. Так как новичёк в Си, то компилятор обложил меня матом... Помогите разобраться в чём я накосячил, пожалуйста Вот код:
#include <stdio.h>
#include <math.h>
 
float func_simpson(float x) {
    return 1/sqrt(9+pow(x,2));
}

float simpson(float func(x), float a, float b, short n) {
    float h = (b-a)/n;
    float sum = 0;
 
    for (short i = 2; i < n+1; i += 2) {
        sum += 2*func(a + i*h) + 4*func(a + (i-1)*h);
    }
 
    return (h/3) * (func(a) + sum + func(b));
}
 
int main() {
    printf("Znachenie integrala po formule Simpsona\n");
    printf("I=%f\n", simpson(func_simpson(x),0.0f,2.0f,200));
 
    return 0;
}

Решение задачи: «Нахождение интеграла формулой Симпсона»

textual
Листинг программы
#include <stdio.h>
#include <math.h>
 
float func_simpson(float x) {
    return 1/sqrt(9+pow(x,2));
}
 
 
float simpson(float a, float b, short n)
{
    float h = (b-a)/n;
    float sum = 0;
 
    for (short i = 2; i < n+1; i += 2) {
        sum += 2*func_simpson(a + i*h) + 4*func_simpson(a + (i-1)*h);
    }
 
    return (h/3) * (func_simpson(a) + sum + func_simpson(b));
}
 
int main() {
    float x;
 
    printf("Znachenie integrala po formule Simpsona\n");
    printf("I=%f\n", simpson(0.0f,2.0f,200));
 
    return 0;
}

Объяснение кода листинга программы

  1. Создание функции func_simpson, которая принимает один аргумент x и возвращает результат вычисления функции на основе этого аргумента.
  2. Создание функции simpson, которая принимает три аргумента a, b и n. Здесь a представляет начальное значение, b - конечное значение и n - количество разделов, на которые разбивается интервал.
  3. Вычисление ширины каждого раздела h, разделив разницу между b и a на n.
  4. Инициализация переменной sum для хранения суммы значений функции на каждом разделе.
  5. Использование цикла for для вычисления суммы sum на каждом разделе, начиная с второго раздела и пропуская каждый нечетный раздел.
  6. Возврат значения I, которое вычисляется путем умножения ширины раздела на сумму значений функции на каждом разделе, плюс значение функции в начале и конце интервала.
  7. Вывод значения интеграла в консоль в функции main.
  8. Значение интеграла вычисляется с помощью функции simpson, передавая начальное значение 0, конечное значение 2 и количество разделов 200.
  9. Функция main завершается, возвращая 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.429 из 5
Похожие ответы