Задача: Вычисление определенного интеграла

Тема в разделе "C/C++/C#", создана пользователем Tural, 14 дек 2010.

  1. Tural

    Tural Гость

    Кто нибудь может подробно обяснит мне ету прогу?К сведению, ето не моя прога. Дла получения за4ета я должен сдать ету прогу. Программа наxодит x по заданному альфа. Вот исxодниый код
    Код (C++):
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>

    double I(double x,double y,double (*f)(double));
    double f(double t);
    double func(double (*f)(double),double eps,double alfa);
    double F(double g,double (*f)(double),double alfa);

    int main(void)
    {
    double eps, alfa, m;
    printf("vvedite epsilon: ");
    scanf("%lg", &eps);
    printf("vvedite alfa: ");
    scanf("%lg", &alfa);
    m=func(f, eps, alfa);
    printf("otvet %.20lf \n", m*m);
    return 0;
    }
    double func(double (*f)(double),double eps,double alfa)
    {
    double dgar=0.,j,k,h=0.5,hnew,z=0,x,d,kappa,dx,dy,s=0.,func=0;
    double i1,i12,i22,i2;
    int found=0;
    //h-wag
    // dgar - delta garantiruyuwee . . . . . .
    // j - leviy konec otrezka ....
    // k - praviy konec otrezka ....
    x=0;
    while( 1==1 )
    {
    i1=I(x,x+h,f);
    i12=I(x,x+h/2.,f);
    i22=I(x+h/2.,x+h,f);
    i2=i12+i22;
    d=(i2-i1)/63.;
    //d-pogrewnost
    if(fabs(d)<eps)
    {
    if( fabs(s+i2-(alfa)) <= 1.e-12) { found=1; z=x+h; break; }
    //s-integr. summa
    if(s+i2>(alfa)) { j=x; k=x+h; break; }
    dgar+=fabs(d);
    s+=i2;
    x+=h;
    } else {
    kappa=fabs(d)/eps;
    if(kappa>1.e5)kappa=1.e5;
    if(kappa<1.e-5)kappa=1.e-5;
    hnew=h*0.95/pow(kappa,0.2);
    h=hnew;
    }
    }

    if(found==0)
    {
    while(1==1)
    {
    z=j+fabs(F(j,f,alfa))*(k-j)/fabs(F(k,f,alfa)-F(j,f,alfa));
    if((F(z,f,alfa)<0 && F(k,f,alfa)<0) || (F(z,f,alfa)>0 && F(k,f,alfa)>0))
    { k=z; }
    else { j=z; }
    if((func=fabs(F(z,f,alfa)))<eps) break;
    }
    }
    dy=dgar+func;
    dx=dy/fabs(f(z)-0.5*pow(z,0.5));
    printf("dx = %lg \n",dx);
    return z;
    }

    double f(double t)
    {
    double d,u;
    u=sqrt(fabs(t));
    d=2*(u*u*u*u-1)/(u*u*u*u+1);
    return d;
    }

    double F(double g,double (*f)(double),double alfa)
    {
    double o,i;
    i=(5.*f((g)/2. - sqrt(3./5.)*(g)/2.)/9. + 8.*f((g)/2.)/9. + 5.*f((g)/2. + sqrt(3./5.)*(g)/2.)/9.)*g/2.;
    o=i-alfa;
    return o;
    }

    double I(double x,double y,double (*f)(double))
    {
    double i,h;h=y-x;
    i=(5.*f((x+y)/2. - sqrt(3./5.)*(y-x)/2.)/9. + 8.*f((x+y)/2.)/9. + 5.*f((x+y)/2. + sqrt(3./5.)*(y-x)/2.)/9.)*h/2.;
    return i;
    }
    функцию тоже выложил. Та функция которая написано на проге упрошенная версия етой функции
     

    Вложения:

  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Транслит не приемлем! Подумай еще раз и напиши правильно.
     
  3. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Это не ваша программа????
    Тогда полное задание пожалуйста выложите, то "находит x по заданному альфа" не говорит не о чем.
    Упрощенная версия функции???? ;-)
     
Загрузка...
Похожие Темы - Задача Вычисление определенного
  1. dimon131
    Ответов:
    1
    Просмотров:
    6.049
  2. Янчик
    Ответов:
    0
    Просмотров:
    490
  3. TrishaRay
    Ответов:
    1
    Просмотров:
    783
  4. elzim
    Ответов:
    0
    Просмотров:
    932
  5. ShaoKahn
    Ответов:
    0
    Просмотров:
    1.128

Поделиться этой страницей