Сделать домашней|Добавить в избранное
 

Сайт, посвящен программированию,
исходникам разных программ и
известным алгоритмам

 
Исходники программ » Отрасли программирования » Вычислительная математика » Нахождение интеграла с заданной точностью на C. Метод Симпсона.
на правах рекламы

Нахождение интеграла с заданной точностью на C. Метод Симпсона.

Автор: admin от 20-02-2012, 19:55

Условие:
Вычислить интеграл с заданной точностью E=0.001 Отрезок интегрирования [a,b] сначала разбивается на 2n равных частей и строится сумма S2n , которая является приближенным значением интеграла, затем количество частей разбиения увеличивается, например, вдвое и строится сумма S4n. Если выполняется условие, то S4n считается значением интеграла с точностью E.
Для расчета суммы S2n используйте формулу Симпсона:

Нахождение интеграла с заданной точностью на C. Метод Симпсона.


где h – шаг разбиения отрезка интегрирования h=(b-a)/2n.

Программа должна содержать две пользовательские функции, определяющие:
1) вид подынтегрального выражения;
2) вычисление суммы S2n.

Решение:
Решение любой задачи программирования лучше начинать с примерного алгоритма решения, которое записано на языке, понятном любому человеку. Это делается для того, чтобы тому, кто будет после вас работать с программной частью, было легче разобраться в "исходниках" вашей программы.

Итак, словесный алгоритм:
- создаем первую функцию для выражения, которое интегрируем;
- создаем вторую функцию, в которой вычисляем S2. по формуле данной в условии.
- делаем до тех пор, пока j < e, j= | S(4N) - S(2N) | и выводим S(4N)-это и есть искомый интеграл.

Небольшие дополнения:
возможны неправильные обозначения или выражения, которые могут быть привязаны к конкретному языку программирования; а также нехватка стрелок, некрасивые и др. обозначений(ромбов, треугольников и т. д.), которые нужны по ISO.

Исходный код:(иногда ещё его называют листинг)

#include<stdio.h>
#include<conio.h>
#include<math.h>
float f(float x)
  {
  return (sqrt(exp(x)-1));
  }

float S(int n)
  {
  int i;
  float S1, S2, h, a=0, b=log(2);
  h =(b - a) / (2*n);
  for (i = 1; i <= 2*n-1; i++)
  {
        if (i % 2 == 0)
            S1 += 2 * f(a + i * h);
        else S1+= 4 * f(a + i * h);
  }
    S2=((f(a)+f(b)+S1))*h/3;
  return S2;
  }

main()
{
float  N = 12, q=2*N, w=4*N;
float c, d, e, k, j;
clrscr();
q=2*N;
w=4*N;
e=0.001;
c = S(q);
   do
   {
     d = c;
     q*=2;
     c=S(q);
    }
while(fabs(d-c))>e);
   k=S(q);
printf("\nIntegral:  %f", k);
getch();
return 0;
}


Результат:

Нахождение интеграла с заданной точностью на C. Метод Симпсона.
Если вам нравится то, что мы пишем, пожалуйста, нажмите на интересующую вас рекламу сбоку, сверху, или сразу после статьи. Будет стимул писать лучше и чаще. Хорошего вам дня.
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий