Нахождение интеграла формулой Симпсона - 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.