Вычислить интеграл по формуле Симпсона - 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;
- }
Объяснение кода листинга программы
- Входные параметры функции: a, b, dx, eps.
- Переменная x инициализируется значением a.
- Переменная I1 инициализируется значением 0.
- Переменная I2 инициализируется значением 0.
- Переменная s инициализируется значением (f(a) - f(b))/2.
- Первый элемент списка (a, b, dx, eps) используется для вычисления значения переменной s.
- Используя цикл do-while, происходит последовательное улучшение приближения до тех пор, пока изменение интеграла не станет меньше заданной точности eps.
- Цикл do-while состоит из двух циклов: внешний цикл do-while и внутренний цикл while.
- Внутренний цикл while используется для вычисления среднего значения функции на каждом элементе списка (x, dx).
- Значение переменной s обновляется на каждом шаге внутреннего цикла while путем добавления суммы двух значений функции и значения функции на следующем шаге.
- Переменная I2 обновляется на каждом шаге внешнего цикла do-while путем умножения значения переменной s на 2 * dx / 3.
- Значение переменной dx уменьшается в два раза на каждом шаге внешнего цикла do-while.
- Переменная x обновляется на каждом шаге внутреннего цикла while путем добавления значения dx к текущему значению x.
- Значение переменной dx обновляется на каждом шаге внешнего цикла do-while путем деления на 2.0.
- Значение переменной I1 обновляется на каждом шаге внешнего цикла do-while путем присвоения значения переменной I2.
- Выходные параметры функции: возвращаемое значение I2.
- Функция Simpson завершается, когда разница между последними двумя приближениями I1 и I2 становится меньше заданной точности eps.
- Значение переменной I2 возвращается как результат функции.
- Значение переменной I2 является приближенным значением интеграла по формуле Симпсона.
- Значение переменной eps используется для контроля точности приближения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д