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

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

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

Здравствуйте. Написал программку для вычисления значения интеграла с помощью формулы Симпсона (https://ru.wikipedia.org/wiki/Формула_Симпсона), считаю с заданным количеством шагов, без определения погрешности. Потом если что переделаю этот момент. Так как новичёк в Си, то компилятор обложил меня матом... Помогите разобраться в чём я накосячил, пожалуйста Вот код:
Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3. float func_simpson(float x) {
  4. return 1/sqrt(9+pow(x,2));
  5. }
  6.  
  7. float simpson(float func(x), float a, float b, short n) {
  8. float h = (b-a)/n;
  9. float sum = 0;
  10. for (short i = 2; i < n+1; i += 2) {
  11. sum += 2*func(a + i*h) + 4*func(a + (i-1)*h);
  12. }
  13. return (h/3) * (func(a) + sum + func(b));
  14. }
  15. int main() {
  16. printf("Znachenie integrala po formule Simpsona\n");
  17. printf("I=%f\n", simpson(func_simpson(x),0.0f,2.0f,200));
  18. return 0;
  19. }

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. float func_simpson(float x) {
  5.     return 1/sqrt(9+pow(x,2));
  6. }
  7.  
  8.  
  9. float simpson(float a, float b, short n)
  10. {
  11.     float h = (b-a)/n;
  12.     float sum = 0;
  13.  
  14.     for (short i = 2; i < n+1; i += 2) {
  15.         sum += 2*func_simpson(a + i*h) + 4*func_simpson(a + (i-1)*h);
  16.     }
  17.  
  18.     return (h/3) * (func_simpson(a) + sum + func_simpson(b));
  19. }
  20.  
  21. int main() {
  22.     float x;
  23.  
  24.     printf("Znachenie integrala po formule Simpsona\n");
  25.     printf("I=%f\n", simpson(0.0f,2.0f,200));
  26.  
  27.     return 0;
  28. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы