Нахождение интеграла формулой Симпсона - 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; }
Объяснение кода листинга программы
- Создание функции
func_simpson
, которая принимает один аргументx
и возвращает результат вычисления функции на основе этого аргумента. - Создание функции
simpson
, которая принимает три аргументаa
,b
иn
. Здесьa
представляет начальное значение,b
- конечное значение иn
- количество разделов, на которые разбивается интервал. - Вычисление ширины каждого раздела
h
, разделив разницу междуb
иa
наn
. - Инициализация переменной
sum
для хранения суммы значений функции на каждом разделе. - Использование цикла
for
для вычисления суммыsum
на каждом разделе, начиная с второго раздела и пропуская каждый нечетный раздел. - Возврат значения
I
, которое вычисляется путем умножения ширины раздела на сумму значений функции на каждом разделе, плюс значение функции в начале и конце интервала. - Вывод значения интеграла в консоль в функции
main
. - Значение интеграла вычисляется с помощью функции
simpson
, передавая начальное значение 0, конечное значение 2 и количество разделов 200. - Функция
main
завершается, возвращая 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д