Нахождение интеграла формулой Симпсона - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д