Вычислить интеграл по формуле Симпсона - C (СИ)

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

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

Требуется вычислить интеграл по формуле Симпсона. (с экономией вычисления) Наработки:
#include <stdio.h>
#include <math.h>
double Simpson (double a, double b, double eps, double (*w)(double));
double f(double);
main ()
{
    double s,a,b,eps;
    printf ("\n Zadaite interval i tochnost':");
    scanf("%lf%lf%lf",&a,&b,&eps);
    s=Simpson(a,b,eps,f);
    printf("\n Integral ot a=%3.2if do b=%3.2if raven %lf",a,b,s);
}
double f(double x)
{
    return sqrt(1+pow(sin(x),3));
}
double Simpson (double a, double b, double eps, double(*w)(double))
{
    double h,sn,s1,s2,s4,s;
    int n,i;
    n=2;
    s1=w(a)+w(b);
    s2=0;
    s4=w(.5*(a+b));
    s=1e25;
    do {
        sn=2; n*=2; s2+=s4;
        h=(b-a)/n;
        s4=0;
        for (i=0;i<n/2;i++)
            s4+=w(a+(2*i+1)*h);
        s=h/3*(s1+2*s2+4*s4);
    } while (fabs(s-sn)>eps);
    return sn;
    }

Решение задачи: «Вычислить интеграл по формуле Симпсона»

textual
Листинг программы
double Simpson(double a, double b, double dx, double eps)
{
    double x = a, I1, I2 = 0, s;
 
    do{
        I1 = I2;
        s = (f(a) - f(b))/2;
        x = a + dx;
 
        while(x < b){
            s += 2 * f(x) + f(x + dx);
            x += 2 * dx;}
        I2 = 2 * dx * s / 3;
        dx /= 2.0;
    }while(fabs(I1 - I2) > eps);
 
    return I2;
}

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

  1. Входные параметры функции: a, b, dx, eps.
  2. Переменная x инициализируется значением a.
  3. Переменная I1 инициализируется значением 0.
  4. Переменная I2 инициализируется значением 0.
  5. Переменная s инициализируется значением (f(a) - f(b))/2.
  6. Первый элемент списка (a, b, dx, eps) используется для вычисления значения переменной s.
  7. Используя цикл do-while, происходит последовательное улучшение приближения до тех пор, пока изменение интеграла не станет меньше заданной точности eps.
  8. Цикл do-while состоит из двух циклов: внешний цикл do-while и внутренний цикл while.
  9. Внутренний цикл while используется для вычисления среднего значения функции на каждом элементе списка (x, dx).
  10. Значение переменной s обновляется на каждом шаге внутреннего цикла while путем добавления суммы двух значений функции и значения функции на следующем шаге.
  11. Переменная I2 обновляется на каждом шаге внешнего цикла do-while путем умножения значения переменной s на 2 * dx / 3.
  12. Значение переменной dx уменьшается в два раза на каждом шаге внешнего цикла do-while.
  13. Переменная x обновляется на каждом шаге внутреннего цикла while путем добавления значения dx к текущему значению x.
  14. Значение переменной dx обновляется на каждом шаге внешнего цикла do-while путем деления на 2.0.
  15. Значение переменной I1 обновляется на каждом шаге внешнего цикла do-while путем присвоения значения переменной I2.
  16. Выходные параметры функции: возвращаемое значение I2.
  17. Функция Simpson завершается, когда разница между последними двумя приближениями I1 и I2 становится меньше заданной точности eps.
  18. Значение переменной I2 возвращается как результат функции.
  19. Значение переменной I2 является приближенным значением интеграла по формуле Симпсона.
  20. Значение переменной eps используется для контроля точности приближения.

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


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

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

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