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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интеграл функции Максвелла, интеграл функции без первообразной 
:(
    Опции темы
arssivka
Дата 28.11.2011, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет.
Мне нужно подсчитать интеграл функции распределения Максвелла на промежутке от v1 до v2. Поскольку у функции нет первообразной интеграл находил влоб: разбивал функцию на мелкие сектора и суммировал их площадь, после увеличивал кол-во секторов, находил их площадь, складывал и делал так пока разница между двумя суммами не была меньше одного процента от первой суммы.
Код


double round ( double a, unsigned int s = 2 )
{
    return int(a*pow(10,s) + .5)/pow(10.,s);
}

double maxwell( int m, int t, double v )
{
    return 4/sqrt(pi)*pow(m/(2*k*t) , 1.5)*pow(v,2)*pow(e, (-1) * (m*pow(v,2))/(2*k*t));
}

double s( int m, int t, int v1, int v2 )
{
    int n = abs( v2 - v1 )+1;
    double a = v2-v1;
    double step = abs(a)/n;
    const int min = v1 < v2 ? v1 : v2;
    double s=0;
    double temp=0;


    for ( unsigned int i=0; i<n; i++ )
    {
        s += maxwell( m,t,min+i*step )*step;
    }

    n++;
    step = abs(a)/n;
    for ( unsigned int i=0; i<n; i++ )
    {
        temp += maxwell( m,t,min+i*step )*step;
    }

    while ( 0.01*s < abs(s-temp) )
    {
        s = temp;
        temp = 0;
        n++;
        step = abs(a)/n;
        for ( unsigned int i=0; i<n; i++ )
        {
            temp += maxwell( m,t,min+i*step)*step;
        }
    }
    return s;
}


Программа считает интеграл (функция s()) вполне нормально, пока он не превышает единицу, больше единицы площади он не считает. Скорее всего проблемма из-за типа double. Пробовал исправить это путем округления значений функции (функция округления до n-го знака запятой в начале приведенного кода) - результата не дало. Вопрос собстенно в том: как-нибудь можно посчитать интеграл если он больше единицы?
PM MAIL ICQ Skype Jabber   Вверх
Фантом
Дата 28.11.2011, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



Цитата(arssivka @  28.11.2011,  23:52 Найти цитируемый пост)
Вопрос собстенно в том: как-нибудь можно посчитать интеграл если он больше единицы? 

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

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

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

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

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


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

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


 




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


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

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