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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вычислить параметрический несобственный интеграл 
:(
    Опции темы
illuminates
Дата 4.11.2013, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день. Я на форуме dxdy в теме http://dxdy.ru/topic77175.html спрашивал как со стороны математики вычислить интеграл: 
[math]$$\int_{x_0}^{\infty} (e^{-4x}(32/x+32/x^2+16/x^3+4/x^4)/\sqrt{1-l^2/a^2x^2+2(1+1/x)e^{-2x}}) dx $$[/math]
Разобрался, преобразовал интеграл, разбил на два, но к сожалению, созданная программа не верно выдаёт ответ. А именно, то что выдаётся в ответе:
user posted image

то что должно быть:
user posted image

Если требуется, то могу подробно описать условие физической задачи и метод преобразования интеграла.

Вот код программы:
Код

double f (double x, double l);//подкоренное выражение
double f2 (double t, double c, double l);//преобразованное подкоренное выражение, разложенное в ряд
double Fun1 (double c, double A, double l);//Метод Симпсона, когда нижний предел  особая точка
double Fun2 (double A, double B, double l);//Метод Симпсона, когда верхний предел бесконечность
double F1 (double x, double c, double l);//преобразованная функция
double F2 (double x, double l);//обычная функция
double lowLim (double a, double b, double l);//Нахождение нижнего предела интеграла

int main(void)
{    
    const short n = 10;
    double x[n], Ed[n], c, A, B, e0;
    double a, h = 0.5, x0 = 0.5; 
    double C = 3 * pow(10.0,8), H = 1.0546 * pow(10.0,-34), e = 1.6 * pow(10.0,-19), m = 9.11 * pow(10.0, -31);
    //a = pow(H, 2)/ (m * pow(e, 2));
    
    a=0.529*pow(10.0,-11);
    //e0 = pow(e,8)/(3 * a * pow(H,3) * pow(C,3));
    e0 = pow(e,5)/(3 * a * pow(H,3) * pow(C,3));
    short i;

    // для первой точки
    x[0]=x0;
    c = lowLim (0.133758, 0.133760, pow((x[0]), 2)); 

    A = c + 0.05;  
    B = A + 1; //первое приближение верхнего предела
    Ed[0] = Fun1 (c, A, pow(x[0], 2)) + Fun2 (A, B, pow(x[0], 2));

    //для последующих точек
    for (i = 1; i<n; i++)
    {
        x[i] = x[i-1] + h; 
        c = lowLim (0.64, 5.01, pow((x[i]), 2));

        A = c + 0.1;
        B = A + 1;
        Ed[i] = Fun1 (c, A, pow(x[0], 2)) + Fun2 (A, B, pow(x[i], 2));
    }
    
    ofstream out;
    out.open ("D:\\Задача 151.txt");
    for (i = 0; i<n; i++)
        //out << x[i] <<"\t" << Ed[i] <<"\n";
        out << x[i] <<"\t" << log(Ed[i]/e0) <<"\n";
    out.close();
    return 0;
}

double lowLim (double a, double b, double l)
{
    double с, E = 0.00001;
    do
    {
        с = (b + a)/ 2;
        if (f(a, l) * f(с, l) > 0) a = с;
        else b = с;
    }
    while (fabs(b-a) > E);
    return (a+b)/2;
}

double f(double x,double l)
{
    return 1-l/pow(x,2)+2*(1+1/x)*exp(-2*x);
}

double Fun1 (double c, double A, double l)
{
    short i, n = 20;
    double x, I, h;
    h = (A - c)/ n; //шаг

    I = h * (F1(c, c, l) + F1(c + n * h, c, l))/ 3; 
    for (i = 1; i<n-1; i++)//n-1!
    {
        x = c + i * h; 
        if (i%2 == 0) I += h * 2 * F1 (x, c, l)/ 3; 
        if (i%2 == 1) I += h * 4 * F1 (x, c, l)/ 3;
    }
    return I;

}

double F1 (double t, double c, double l)
{
    return (2*exp((-4)*(pow(t,2)+c))*(16+32*pow((pow(t,2)+c),-1)+32*pow((pow(t,2)+c),-2)+16*pow((pow(t,2)+c),-3)+4*pow((pow(t,2)+c),-4)))/pow(f2(t, c, l), 0.5);
        
    
}

double f2 (double t, double c, double l)
{
    return (2*(l-c*(2*pow(c,2)+2*c+1)*exp(-2*c)))/(pow(c,3))+((2*c*(2*pow(c,3)+2*pow(c,2)+2*c+1)*exp(-2*c)-3*l)*pow(t,2))/(pow(c,4))+(2*(6*l-c*(4*pow(c,4)+4*pow(c,3)+6*pow(c,2)+6*c+3)*exp(-2*c)*pow(t,4)))/(3*pow(c,5))+((exp(-2*c)*(4*pow(c,6)+4*pow(c,5)+8*pow(c,4)+12*pow(c,3)+12*(c,2)-15*exp(2*c)*l+6*c)*pow(t,6))/(3*pow(c,6)));
    
}

double Fun2 (double A, double B, double l)
{
    
    double Ed1, Ed2, /*интегралы-приближения к интегралу правого предела*/ epsilon = 0.0001;
    short i, n = 20;
    double x, h;

    Ed1 = 0;
    do
    {
        Ed2 = Ed1;
        h = (B - A)/ n;

        Ed1 = h * (F2(A, l) + F2(A + n * h, l))/ 3;
        for (i = 1; i<n; i++)
        {
            x = A + i * h; 
            if (i%2 == 0) Ed1 += h * 2 * F2 (x, l)/ 3;
            if (i%2 == 1) Ed1 += h * 4 * F2 (x, l)/ 3;
        }

        n += 10;
        B += 10*h;

    } while (fabs(Ed2 - Ed1) > epsilon);

    return Ed1;
}

double F2(double x, double l)
{
    return (exp(-4*x)*(32/x+32/(pow(x,2))+16/(pow(x,3))+4/(pow(x,4))))/(pow((1-l*(1/(pow(x,2)))+2*(1+1/x)*exp(-2*x)),0.5));
}


Уже около двух недель решаю данное задание, и был-бы очень благодарен если-бы кто то нашел ошибку!
PM MAIL   Вверх
bsa
Дата 4.11.2013, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Подобный интеграл можно вычислить, если функция сходится. Из этого следует, что при каких-то больших значениях х произведение f(x) * dx будет пренебрежимо мало - меньше какого-то епсилон). Таким образом считаешь сумму произведений для всех х, пока они больше эпсилон. dx - очень малый промежуток (в идеале f(x) == f(x+dx), на практике будет разница).
PM   Вверх
illuminates
Дата 4.11.2013, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bsa, Но позвольте, я так и делаю.
PM MAIL   Вверх
bsa
Дата 5.11.2013, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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

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

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

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

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


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

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


 




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


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

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