P4526 题解
jlz_love_cyz
·
·
题解
Part 1 思路整理
看到了题目,很多人可能会有疑问,什么是辛普森积分法呢?
所谓辛普森积分法呢,就是用抛物线来近似函数的图像(类似于我们熟知的泰勒级数),从而达成近似定积分数值的目的,是牛顿-科特斯公式的子结论(牛顿-科特斯公式 \int_a^bf(x)\,\text{d}x\approx\sum\limits_{i=0}^nw_if(x_i)) 。由于辛普森公式只能作上下边界为有限数的定积分的近似,那我们就必须舍去图像中面积过小而无意义的部分。
Part 2 边界取舍
看了看楼上楼下,都没有把这个函数的图像真正的整出来的。我们现在就使用desmos这个工具来直观的感受一下这个函数的图像。
这个是当 a=2.33 时,函数的图像
我们可以看到,当 x\in[15,+\infty) 时,函数的图像无限趋近于x轴,故这一段的面积可以近似为0。这一下我们就很高兴啦,可以很愉快地使用辛普森积分了呢。
就这样,我们求积分的式子就变为 \int_0^{15}x^{\frac a x-x}\,\text{d}x 了。
Part 3 发散与收敛
注意到题目让我们特判出积分发散时的情况并输出orz,所以,我们必须找出当积分发散时 a 的取值。现在,我们告诉大家, a\ge0 时,积分收敛; a<0 时,积分发散,下面就来简单证明一下。
-
我们令 f(x)=x^{\frac a x-x}
那么我们就可以得到: f(x)=x^{\frac {a^2-x} a}
$\because x\to0$ 时, $x^2\to0,\dfrac 1 x\to+\infty
\therefore x^2-a\to-a,-\dfrac a x\to+\infty
又 \because 当 x\in(0,1) 时 \lim\limits_{n\to+\infty}x^n\to0
故 \lim\limits_{x\to0}f(x)\to+\infty
则原命题得证.
-
我们首先讨论 a\in\mathbb{R} 时的情况。
\because \lim\limits_{x\to+\infty}\dfrac {a-x^2} a \to +\infty
\therefore \lim\limits_{x\to+\infty}x^{\frac {a-x^2} a}\to+\infty
又 \because \lim\limits_{m\to+\infty}\dfrac 1 m\to 0
然后呢,我们再讨论 $a>0$ 时的情况。
$\because \left.\frac {a-x^2} x\right|_{x<\min(\sqrt{a},1)}>0
\therefore \left.x^{\frac {a-x^2} x}\right|_{x<\min(\sqrt{a},1)}<1
故命题2得证
综上所述,我们就得到了原函数收敛和发散的条件啦
## Part 4 code
那么,综合以上的分析,我相信各位一定理解了这题的思路与解法。下面就是AC代码:
```cpp
//@copyright 2020~2022 Iam贾粮宅 All rights reserved
#include <bits/stdc++.h>
#define cd const double
typedef long long ll;
using namespace std;
cd Eps=1e-8;
double a,lf,rt;
inline double f(double x)//function original
{
return pow(x,(a/x)-x);
}
inline double s(double p,double q)//simpson
{
double k=p+(q-p)/2;
return (f(p)+4*f(k)+f(q))*(q-p)/6.0;
}
double as(double p,double q,double S)//adaptive-simpson
{
double k=p+(q-p)/2;
double l1=s(p,k),l2=s(k,q);
if(fabs(l1+l2-S)<=Eps) return l1+l2;
else return as(p,k,l1)+as(k,q,l2);
}
int main()
{
cin>>a;
if(a<0) puts("orz");
else printf("%.5lf",as(Eps,15,s(lf,rt)));
return 0;
}
```
注意,这里Eps不要调太高,建议是1e-8.(要不然你可能会WA几个点)