Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите с прогой, вычисление интеграла 
:(
    Опции темы
girlsbest
Дата 26.10.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 19.10.2008

Репутация: нет
Всего: нет



Разработать функции, реализующие методы вычислений интеграла, параметрами которых должны быть функция для вычисления значения подынтегрального выражения, пределы интегрирования и точность вычислений. Программа должна вывести результат вычислений для записанных в задании интегралов по заданным формулам и значение n, при котором достигнута заданная точность.методы трапеции и правых треугольников....
вот программка для вычисления методом трапеции, но у меня немного ответы не сходятся
Код



# include <iostream>
#include <cmath>
using namespace std;

double fun(double);

double integ1(double x)//первый интеграл
{
    return x*x*x*exp(2*x);
}

double integ2(double x)//второй
{
    return 1/(1+sqrt(x));
}

double integ3(double x)
{
    return 1/(x+1)* sqrt(x*x+1);//третий
}

double metod (double fun(double), double a, double b, double e)
{
    double s1,d,xi,help;
    bool check=false;
    int n=1;
    double s2=(b-a)*(fun(b)+fun(a))*0.5;
    if(a==b)return 0.0;
    if (a>=b)
    {
        help=a;
        a=b;
        b=help;
        check=true;
    }

    do 
    {
        s1=s2;
    
        for (int i=0; i<n; i++)
        {
           xi=a;
           
           d=(b-a)/n;
           s2=d*(fun(b)+fun(a))*0.5; 
           xi +=d;
           s2 += fun(xi)*d;
           
        }
    }
    
    while (abs(s2-s1)<e);
    if(check)s2=-s2;
    return s2;
}

int main ()
{
    double s,d,p;
    s=metod(integ1, 0.0, 0.8, 0.000000001);
    d=metod(integ2, 0.0, 1.8, 0.000000001);
    p=metod(integ3, 0.0, 0.3, 0.000000001);
    cout<<"rezultat1: "<<s<<endl;
    cout<<"rezultat2: "<<d<<endl;
    cout<<"rezultat3: "<<p<<endl;
}
        
        
а ответы должны быть
integ1=0.37995303, integ2=0.98157782, integ2=02588201
PM MAIL   Вверх
baldina
Дата 27.10.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Код

while (abs(s2-s1)<e);

неправильно, должно быть
Код

while (abs(s2-s1)>e);

для вывода n значащих цифр надо использовать cout.precision(n)
и вообще логика программы туманна. идея то простая: уменьшать шаг пока не будет достигнута точность, так что
Код

#include <iostream>
#include <cmath>

using namespace std;

double fun(double);

double integ1(double x)//первый интеграл
{
    return x*x*x*exp(2.0*x);
}
double integ2(double x)//второй
{
    return 1.0/(1.0+sqrt(x));
}
double integ3(double x)
{
    return 1/(x+1)* sqrt(x*x+1);//третий
}
double metod (double fun(double), double a, double b, double e)
{
  double s1;
  double s2;

  double y0_ = fun(a);
  double step = b-a;
  int n = 1;

  do {
    s1 = s2 = 0;
    double y0 = y0_;
    for (int i=0; i < n; ++i)
    {
      double y1 = fun(a + (i+0.5)*step);
      double y2 = fun(a + (i+1)*step);
      double s = 0.5 * (y0+y2) * step;
      s1 += s;
      s2 += 0.5 * (s + y1*step);
      y0 = y2;
    } 
    n *= 2;
    step *= 0.5;
  }  while (abs(s2-s1)>e);

  return s2;
}

int main ()
{
  double epsilon = 1e-9;
  cout.precision(8);
  cout << "rezult1: " << metod (integ1, 0.0, 0.8, epsilon) << endl;
  cout.precision(8);
  cout << "rezult2: " << metod (integ2, 0.0, 1.8, epsilon) << endl;
  cout.precision(8);
  cout << "rezult3: " << metod (integ3, 0.0, 0.3, epsilon) << endl;
}



PM MAIL   Вверх
girlsbest
Дата 27.10.2008, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 19.10.2008

Репутация: нет
Всего: нет



спсибо. но я сама решила вчера..и сдала благополучно, только тут не успеча написать..но все равно спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.