Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2011, 19:17   #1
Ruslan4iK
Новичок
Джуниор
 
Регистрация: 10.09.2011
Сообщений: 2
По умолчанию решение интеграла метод симпсона

Может кто помочь? необходимо решить интеграл
с точностью 10^-6 для а, изменяющегося от 0 до 5 с шагом 1. Используя метод Симпсона
Не получается сделать вычисление для изменяющегося параметра а... считает только для 1 изначально заданного условия. может кто подправить???


/*Вычисление интеграла (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; //Вызываем функцию
}
Ruslan4iK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить приближённое значение интеграла по формуле трапеции и Симпсона для n=80 ∫_0^n(π-x) sin⁡ xdx Lyonya-myshin C++ Builder 1 13.06.2011 23:11
Метод Симпсона С++ sabaton Помощь студентам 2 03.04.2011 01:08
Turbo Pascal[програмыки : текстовая\метод симпсона\метод половинного деления qsccsq Помощь студентам 7 24.12.2010 05:23
Разработка алгоритма вычисления параметрического интеграла методом Симпсона killbore Помощь студентам 3 09.04.2010 01:37
Помогите создать програму для вычисления определенного интеграла Методом Симпсона Сергей Человек Помощь студентам 11 06.07.2009 16:15