не компилится где J2=h/3*(2*func(a+2*h,t)+4*func(a+h)+(funcGa(a)+funcGb(b))/2); прошу о помощи

215
26 ноября 2016, 18:55

#include<iostream>
#include<cmath>
using namespace std;
double psi(double x)
{
    return (2.7 + x) / (5.7 - 0.9 * x + x * x);
}
double fi(double x)
{
    return cos(x) * cos(x);
}
double func(double x, double t)
{
    return psi(x) * fi(x + t / (1 + x * x));
}
double funcGa(double t)
{
    double a;
    double x = a;
    return psi(x) * fi(x + t / (1 + x * x));
}
double funcGb(double t)
{
    double b;
    double x = b;
    return psi(x) * fi(x + t / (1 + x * x));
}
double integral(double a, double b, double e, double t)
{
    double h, J1, J2;
    int i, n;
    n = 1;
    h = (b - a) / n;
    J2 = h / 3 * (2 * func(a + 2 * h,
                           t) + 4 * func(a + h) + (funcGa(a) + funcGb(b)) / 2);
    do
    {
        J1 = J2;
        n = n * 2;
        h = (b - a) / n;
        J2 = 0;
        for (i = 1; i <= n / 2 - 1; i++)
            for (j = 1; j <= n / 2; j++)
                J2 = 2 * func(a + 2 * i * h, t) + 4 * func(a + (2 * j - 1) * h,
                        t) + (funcGa(a) + funcGb(b)) / 2;
        J2 = J2 * h / 3;
    }
    while (fabs(J2 - J1) > e);
    return J2;
}
int main()
{
    double a, b, e;
    int m, i;
    double* t;
    t = new double[m];
    cin >> a >> b >> e >> m;
    for (i = 0; i < m; i++)
    {
        cin >> t[i];
        cout << integral(a, b, e, t[i]) << endl;
    }
}
Answer 1

У вас пропущен один аргумент, не объявлена переменная j. Но это ерунда, потому что -

double funcGa(double t)
{
    double a;
    double x = a;
    return psi(x) * fi(x + t / (1 + x * x));
}

Ну и что посчитает такая функция? Есть некоторое a, с неопределенным значением - в нем может быть что угодно. И вы начинаете считать...

Больше всего это напоминает работу Переца на поломанном "Мерседесе" у Стругацких...

Answer 2

ошибка как минимум здесь

J2=h/3*(2*func(a+2*h,t)+4*func(a+h)+(funcGa(a)+funcGb(b))/2);

второй вызов func содержит один аргумент, а по сигнатуре функции должно быть два. Либо забыли один аргумент, либо вызываете не ту функцию.

Answer 3

Вот ваше решение. Откровенно говоря, отдельно интегралы не считал, но вроде должно работать...

double F(double x, double t)
{
    double z = cos(x+t/(1+x*x));
    return ((2.7*x)/((x-0.9)*x+5.7))*z*z;
}
double Simpson(double a, double b, double t, double eps, double (*f)(double,double))
{
    double N = 4.;
    double sum1 = 0., sum2 = 0.;
    double x, h;
    double index1, index2;
    unsigned int i;
    double func;
    for (;;) {
        h = (b-a)/N;
        sum1 = sum2 = -(f(a,t)+f(b,t));
        index1 = index2 = 4.;
        i = 0;
        for(x = a; x <= b+h/2.; x+=h) {
            sum1 +=  (index1 = 6.-index1)*(func=f(x,t));
            if (i++%2==0) {
                sum2 += (index2 = 6.-index2)*func;
            };
        };
        if (fabs((sum1-2.*sum2)/sum1)<=eps) return (h*sum1)/3.+h*(2.*sum2-sum1)/45.; else N*=2.;
    };
};

int main(int argc, const char * argv[])
{
    double a, b, e;
    cout << "a = ";
    cin >> a;
    cout << "b = ";
    cin >> b;
    cout << "eps = ";
    cin >> e;
    int m;
    cout << "m = ";
    cin >> m;
    double* t = new double[m];
    double* y = new double[m];
    for (int i = 0; i < m; i++)
    {
        cout << "t["<<(i+1)<<"] = ";
        cin >> t[i];
        y[i] = Simpson(a,b,t[i],e,F);
        cout << "y[" << (i+1) << "] = " << y[i] << endl;
    }
}
READ ALSO
curl русские символы в url

curl русские символы в url

каким образом можно открыть курлом сайт с русскими символами в url?

404
Нерекурсивный поиск в глубину

Нерекурсивный поиск в глубину

Как правильно организовать данный алгоритм?

519
Перестал работать getch()

Перестал работать getch()

Перестал работать getch()Компилирует без ошибок, а работать, как следует не хочет, не реагирует на нажатие клавиш

303
как вставить значения получаемые в С++ (qtcharts) в qml в определенной вкладке

как вставить значения получаемые в С++ (qtcharts) в qml в определенной вкладке

Перечитал весь гугл по мвс получаю с помощью методов класса данные, в формате [x,y;x,y;

290