Определение знака подынтегральной функции

Необходимо выяснить знак подынтегральной функции!
В случае её положительности (знакоопределённости) решение единственно. Если же у функции знаки чередуются, то необходимо определить точки смены знака (нули подынтегральной функции) и вычислить соответствующие интегралы для определения границ изменения числа корней.
Вот и сам интеграл , он расходящийся.
введите сюда описание изображения

#include <stdio.h>
#include <math.h>
double f(double x)
{
    return 2-4/(pow(x,4)+1);
    }
    
double po(double x)
{
    return -(log(x*(x+sqrt(2.))+1.)-log(x*(x-sqrt(2.))+1.)+2.*(atan((2.*x+sqrt(2.))/sqrt(2))+atan((2.*x-sqrt(2.))/sqrt(2.)))-x*pow(2.,3./2.))/sqrt(2.);
    }
double markov(double x,double h)
{
    static double c1=0.05,c2=49./180.,c3=16./45.,k1,k2;
    k1=(1.0-sqrt(3.0/7.0))/2;
    k2=(1.0+sqrt(3.0/7.0))/2;
    return h*(c1*(f(x)+f(x+h))+c2*(f(x+k1*h)+f(x+k2*h))+c3*f(x+h/2.));
}
    
double integral(double alpha,double eps,double *sum_delta_abs,int *n)
{
    double x=0.,chi,h=x+eps,hnew,sum=0,delta,delta_abs,i1,i2;
    *n=0;
    *sum_delta_abs=0.;
   while(sum<alpha-eps)
   {
        i1=markov(x,h); 
        i2=markov(x,h/2.)+markov(x+h/2.,h/2.);
        delta=(i2-i1)/255.;
        delta_abs=fabs(delta);
        chi=pow(delta_abs/eps, 1.0/9.0); 
        if(chi>10.0)chi=10.0;
        if(chi<0.1)chi=0.1;
        hnew=0.95*h/chi; 
        if(delta_abs<eps){
        if(sum+i2>alpha+eps) hnew=h*(alpha-sum)/i2;
        else
        {
            x+=h;
            sum+=i2;
       *sum_delta_abs+=delta_abs;
       (*n)++;
}
}
h=hnew;}
        return x;
    }
    
int main(void)
{
    int n;
double x,alpha,sum_delta_abs; 
    printf("Введи альфа:\n");
    scanf("%le",&alpha);
    x=integral(alpha,1.e-7,&sum_delta_abs,&n);
    printf("Число шагов: %d\n",n);
    printf("b=%lf\n",x);
    printf("Гарантированная:%le\n",sum_delta_abs);
    printf("Точное значение: %lf\n",po(x));  
    printf("po(0)=%le\n",po(0));
    return 0;
    }


Ответы (1 шт):

Автор решения: Harry

Да что тут делать-то? Знаменатель всегда положителен, единственное, что может менять знак - числитель.

Поняnно, что при |t| < 1 числитель отрицательный, при |t| > 1 - положительный...

Что тут сложного?

Дальше, понятно, что раз на участке [0,1] подынтегральная функция отрицательна, то сам интеграл меньше нуля и является убывающей функцией от x. Затем он начинает увеличиваться, с асимптотическим ростом sqrt(x), так что при α > 0 решение единственное. При α < 0 решения может быть 2, одно или ни одного - в зависимости от значения α - при 0 > α > -1.46789 - решений 2, при α = -1.46789 - решение одно (x = 1), при α < -1.46789 решений нет.

Вот как выглядит график вашего интеграла как функции от x

введите сюда описание изображения

→ Ссылка