Форум программистов, компьютерный форум CyberForum.ru

метод Симпсона - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.63
Ruslan4ik89
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 4
02.10.2011, 20:57     метод Симпсона #1
Может кто помочь? необходимо решить интеграл
с точностью 10^-6 для а, изменяющегося от 0 до 5 с шагом 1. Используя метод Симпсона
Не получается сделать вычисление для изменяющегося параметра а... считает только для 1 изначально заданного условия. может кто подправить???


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 /*Вычисление интеграла (2/pi^1/2)*(x^1/2)/1+e^(1-a)) Методом Симпсона */
 
 #include <iostream>
 #include <math.h> //Подключаем библиотеки
 #include <iomanip>
 using namespace std;
 double e=2.718281828459045; //Объявляем константы
 double pi=3.1415926535897;
 double f ( double x)
 {
 for(int a=0;a<=5;a++)
 {
 
 double fn=fn=(2/pow(pi,0.5))*(pow(x,0.5)/(1+pow(e,x-0))); //Функция f(x)
 return fn;
 }
 }
 double Simpson ( double a, double b, double e) //Реализация метода Симпсона. В качестве параметров функция принимает
 //Пределы интегрирования и точность вычисления
 {
 int n=7; //Первоначально разбиваем промежуток a,b на n частец
 double h=(b-a)/n; //Вычисляем шаг
 double x2, S, I2, I1, w; //Переменные необходимые для расчетов
 int k=1; //Задаём начальные
 I1=0; //Параметры 
 double s0=f(a)+f(b); //Находим чему равна сумм значений функций на концах отрезка
 do 
 {
 double x1=a+h; //Делаем шаг
 S=0; 
 for (int i=1; i<n; i++)
 {
 double s=(k+3)*f(x1);
 k=-k;
 x2=x1+h; //Этим циклом найдем сумму значений функции в узлах интегрирования
 x1=x2; 
 S+=s;
 
 }
 
 x1=0;
 
 n=2*n; //Удваиваем количество разбиений
 cout<<"kol razbien: "<<n<<endl; 
 double h1=(b-a)/n; //Вычисляем новый шаг
 I2=h/3.*(s0+S); //Находим значение интеграла на малом участке
 w=fabs(I2-I1); //Вычисляем модуль разности нового значения интеграла и того что было
 I1=I2;
 h=h1;
 
 } while (w>e); //цикл do работает пока не будет достигнута нужная точность
 return I2;
 }
 
 void main()
 {
 double a, b, e; //Пределы интегрирования и точность
 a=0.0000001; b=20; e=0.0000001;
 cout<<" integr: "<<setprecision(8)<<Simpson(a,b,e)< <endl; //Вызываем функцию
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2011, 20:57     метод Симпсона
Посмотрите здесь:

Вычислить методом Симпсона C++
Метод Симпсона C++
C++ Метод симпсона
C++ метод симпсона
C++ Метод медиан из трех элементов VS улучшенный быстрый метод сортировки(метод Бентли-Макилроя)
интеграл методом Симпсона C++
Метод Симпсона C++
C++ Формула Симпсона

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 02:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru