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