从平均数说起
我们都知道 n 个数的平均数表示为:
na1+a2+a3+⋯an
这种最常见的平均数被称为“算术平均数”(Arithmetic Mean)。还有一种常用的平均数为“几何平均数”(Geometric Mean),计算公式如下:
na1a2a3⋯an
其几何意义为:考虑一个 n 维“长方体”,各边长度用 a 数组表示,则几何平均数为“与其体积相等的 n 维正方体的边长”。
几何平均数在金融领域也十分常用,比如:初始股票有 100 元,第一个月增长了 100% 至 200 元,第二个月跌了 50% 回到 100 元。现在计算平均增长率,如果使用算术平均数,则计算得 2100%+(−50%)=25%。
但通过常识我们知道答案应该为 0。朴素的计算方法为:假设平均增长率为 r,则需要满足 (1+r)(1+r)=(1+100%)(1−50%)。此时的 r 才是需要求的平均增长率。可以发现,这个式子事实上就是在求 (1+100%) 和 (1−50%) 的几何平均数。
回到数学领域。事实上,这两种平均数是有严格的大小关系的,即均值不等式。
均值不等式
均值不等式(AM-GM Inequality)是数学中非常常用的一个公式,表示为:
na1+a2+a3+⋯an≥na1a2a3⋯an
即,n 个数的算数平均值大于等于几何平均值。该不等式成立的条件为这 n 个数是非负数。不等式取等的充分必要条件为这 n 个数全部相等。
证明
证明有很多种,这里就拿最常见的一种证明讲解。
首先考虑只有两个数的情况。此时的证明比较容易:
(x−y)2≥0x2+y2−2xy≥0x2+y2≥2xy
令 x=a1,y=a2,则有:
a1+a2≥2a1a22a1+a2≥a1a2
于是两个数的均值不等式得证。
接下来,推广到 n=2k 时的证明。使用数学归纳法:
假设均值不等式在 n=k 时成立,我们证明其在 n=2k 时成立:
2ka1+a2+a3+⋯+a2k≥2ka1a2a3⋯a2k
⇔21(ka1+a2+⋯+ak+kak+1+ak+2+⋯+a2k)≥ka1a2⋯akkak+1ak+2⋯a2k
设 x1=ka1+a2+⋯+ak,x2=kak+1+ak+2+⋯+a2k,y1=ka1a2⋯ak,y2=kak+1ak+2⋯a2k,则由于假设 n=k 时成立,所以 x1≥y1,x2≥y2。又因为均值不等式在 n=2 时成立,所以:
21(x1+x2)≥21(y1+y2)≥y1y2
由于 n=2 时成立,所以可以推出 n=4,8,16⋯ 时也成立。故 n=2k 时成立。
然后我们考虑倒序证明。我们证明:若均值不等式在 n=k 时成立,则在 n=k−1 时也成立。这个证明就比较容易了:
设这 k−1 个数的算术平均值为 A,则加入元素 A 后形成的 k 个数的数组算术平均值不变。由于在 n=k 时成立,所以:
A≥ka1a2⋯ak−1A
两边同时取 k 次方,得:
Ak≥a1a2⋯ak−1AAk−1≥a1a2⋯ak−1
再同时取 k−1 次根,得:A≥k−1a1a2⋯ak−1
于是得证。由于对于每个 n 都存在某个 k 使得 n≤2k,所以可以从 2k 一步步倒推,所以均值不等式对于任意 n 成立。
对于两个数的均值不等式,还有一个巧妙的无字证明如下图:
由相似或勾股定理可以得出,黄线的长度即为 a,b 的几何平均数。
应用
在应用上,有两个非常常用的转化,这里先写出来以省略后面的推导篇幅。
a1+a2+⋯an≥nna1a2⋯ana1a2⋯an≤(na1+a2+⋯an)n
即:n 个数的和大于等于 n 倍几何平均;n 个数的积小于等于算术平均的 n 次方。证明显然,只是将均值不等式移了一下项。
问题一:证明对于周长固定的矩形,正方形的面积最大。
设周长为 C,长宽为 a,b,则有 a+b=C/2。面积为 ab。由转化二可知,ab≤(2a+b)2=(4C)2,因此面积 ab 最大不超过 (4C)2。由取等条件可知,ab=(4C)2 当且仅当 a=b,即为正方形。
问题二:某工厂要制造一个无盖的圆柱形桶,要求容积为 23π 立方米。底面的金属每平方米 3 元,侧面的每平方米 2 元。求最小造价以及方案。
设底面半径为 r,高为 h,则要求 πr2h=23π,即 r2h=23。此时的花费为 πr2⋅3+2πrh⋅2。由均值不等式的转化一:
πr2⋅3+2πrh⋅2=πr2⋅3+2πrh+2πrh≥33πr2⋅3⋅2πrh⋅2πrh=3π312r4h2=3π312(r2h)2=9π
由取等条件可知,当 πr2⋅3=2πrh 时花费最小,即 h=23r。
这个不等式的推导涉及到“拆项”的技巧,即第一行中把 2πrh⋅2 拆成 2πrh+2πrh。仔细观察上面的过程可以发现,均值不等式实际上将加法转换为了乘法。虽然是否拆项在加法上没有区别,但转化到乘法就会导致次数的不同。此处是为了凑 r4h2(因为给定 rh 为常数)。
例题
题目传送门
题意:一个小球下落时间为 gA,初始时 g=1,每次可以花费 B 的时间将 g 增加 1,问最小总时间。
考虑答案关于 g 的函数 f(g)=gA+B(g−1),由于最小值与常数无关,所以可以看成 f(g)=gA+Bg,则由均值不等式:
f(g)=gA+Bg=2gA+2gA+Bg≥334A2B
由此可知函数最小值不会小于 334A2B,取等条件为 2gA=Bg,即 g=(2BA)32。
By EternalAlexander
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <bits/stdc++.h> const long double eps = 1e-10; using ldb = long double; using ll = long long; ldb a,b; long double calc(long double x) { return x * b + (long double) a / std::sqrt(1 + x); }
int main() { std::cin >> a >> b; long double x = pow( a / (2 * b) , 2.0 / 3 ) - 1; ll x1 = x; long double ans = a; for (ll p = x1 - 10; p <= x1 + 10; ++ p) ans = std::min(ans,calc(p)); printf("%.10Lf",ans); return 0; }
|