只能做简单科普,不太能保证严谨性。。
由于笔者水平不太够,很多地方都没给出证明,望谅解!
拉格朗日乘子法
若 x 1 , x 2 , ⋯ , x n ∈ R x_1, x_2, \cdots, x_n\in \R x1,x2,⋯,xn∈R, f ( x 1 , x 2 , ⋯ , x n ) f(x_1, x_2, \cdots, x_n) f(x1,x2,⋯,xn) 是一个函数,且存在 m m m 个限制 g i ( x 1 , x 2 , ⋯ , x n ) = c i g_i(x_1,x_2,\cdots,x_n)=c_i gi(x1,x2,⋯,xn)=ci,我们希望最大化或是最小化 f ( x 1 , x 2 , ⋯ , x n ) f(x_1,x_2,\cdots,x_n) f(x1,x2,⋯,xn)。
一个想法是梯度=0(对每个变量都求偏导=0),但这并不能满足限制,因此考虑拉格朗日乘子法:
同时满足
∂
∂
x
i
(
f
(
x
1
,
x
2
,
⋯
,
x
n
)
+
∑
j
=
1
m
λ
j
g
j
(
x
1
,
x
2
,
⋯
,
x
n
)
)
=
0
(
1
≤
i
≤
n
)
\frac{\partial}{\partial x_i} \left(f(x_1,x_2,\cdots,x_n)+\sum_{j=1}^m \lambda_j g_j(x_1,x_2,\cdots,x_n) \right)=0 \qquad (1\le i\le n)
∂xi∂(f(x1,x2,⋯,xn)+j=1∑mλjgj(x1,x2,⋯,xn))=0(1≤i≤n)
和
g
i
(
x
1
,
x
2
,
⋯
,
x
n
)
=
c
i
(
1
≤
i
≤
n
)
g_i(x_1,x_2,\cdots,x_n)=c_i \qquad (1\le i\le n)
gi(x1,x2,⋯,xn)=ci(1≤i≤n)
的
(
x
1
,
x
2
,
⋯
,
x
n
)
(x_1,x_2,\cdots,x_n)
(x1,x2,⋯,xn) 将会是
f
(
x
1
,
x
2
,
⋯
,
x
n
)
f(x_1,x_2,\cdots,x_n)
f(x1,x2,⋯,xn) 的驻点,也即局部最大点、局部最小点或是鞍点。
注意到全局最大值和全局最小值都在其中,因此我们减少了枚举的量级。
数学例题 1
知 ∑ x i = k \sum x_i=k ∑xi=k,求 ∑ x i 2 \sum x_i^2 ∑xi2 的最小值。
解:考虑拉格朗日乘子法:
{
∑
x
i
=
k
∂
∂
x
i
(
∑
x
i
2
−
λ
∑
x
i
)
=
0
(
1
≤
i
≤
n
)
\left\{ \begin{aligned} & \sum x_i=k \\ & \frac{\partial}{\partial x_i} \left(\sum x_i^2-\lambda \sum x_i \right)=0 \qquad (1\le i\le n) \end{aligned} \right.
⎩⎪⎨⎪⎧∑xi=k∂xi∂(∑xi2−λ∑xi)=0(1≤i≤n)
下式化为
x
i
=
λ
2
x_i=\frac{\lambda}{2}
xi=2λ,因此
x
1
=
x
2
=
⋯
=
x
n
=
k
n
x_1=x_2=\cdots=x_n=\frac{k}{n}
x1=x2=⋯=xn=nk 是一个驻点。
注意到 x 1 = k , x 2 = x 3 = ⋯ = x n = 0 x_1=k, x_2=x_3=\cdots=x_n=0 x1=k,x2=x3=⋯=xn=0 比这种情况更优,因此 x 1 = x 2 = ⋯ = x n = k n x_1=x_2=\cdots=x_n=\frac{k}{n} x1=x2=⋯=xn=nk 求得最小值。
值得一提的是,这个和式不存在最大值。
数学例题 2
知 x 1 , x 2 , x 3 ∈ R x_1,x_2,x_3\in \R x1,x2,x3∈R, x 1 + x 2 + x 3 = 1 x_1+x_2+x_3=1 x1+x2+x3=1, x 1 2 + x 2 2 + x 3 2 = 3 x_1^2+x_2^2+x_3^2=3 x12+x22+x32=3,求 x 1 x 2 x 3 x_1x_2x_3 x1x2x3 的最大值。
解:使用拉格朗日乘子法:
{
∑
x
i
=
1
∑
x
i
2
=
3
∂
∂
x
m
(
∏
x
i
+
λ
1
∑
x
i
+
λ
2
∑
x
i
2
)
=
0
(
1
≤
m
≤
3
)
\left\{ \begin{aligned} & \sum x_i=1 \\ & \sum x_i^2=3 \\ & \frac{\partial}{\partial x_m}\left(\prod x_i+\lambda_1 \sum x_i+\lambda_2 \sum x_i^2 \right)=0 \qquad (1\le m\le 3) \end{aligned} \right.
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧∑xi=1∑xi2=3∂xm∂(∏xi+λ1∑xi+λ2∑xi2)=0(1≤m≤3)
也即:
{
x
1
+
x
2
+
x
3
=
1
(
1
)
x
1
2
+
x
2
2
+
x
3
2
=
3
(
2
)
x
1
x
2
+
λ
1
+
2
λ
2
x
3
=
0
(
3
)
x
1
x
3
+
λ
1
+
2
λ
2
x
2
=
0
(
4
)
x
2
x
3
+
λ
1
+
2
λ
2
x
1
=
0
(
5
)
\left\{ \begin{aligned} & x_1+x_2+x_3=1 & (1) \\ & x_1^2+x_2^2+x_3^2=3 & (2) \\ & x_1x_2+\lambda_1+2\lambda_2 x_3=0 & (3) \\ & x_1x_3+\lambda_1+2\lambda_2 x_2=0 & (4) \\ & x_2x_3+\lambda_1+2\lambda_2 x_1=0 & (5) \\ \end{aligned} \right.
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x1+x2+x3=1x12+x22+x32=3x1x2+λ1+2λ2x3=0x1x3+λ1+2λ2x2=0x2x3+λ1+2λ2x1=0(1)(2)(3)(4)(5)
(
3
)
−
(
4
)
(3)-(4)
(3)−(4) 得
(
x
1
−
2
λ
2
)
(
x
2
−
x
3
)
=
0
(x_1-2\lambda_2)(x_2-x_3)=0
(x1−2λ2)(x2−x3)=0。
假设 x 2 = x 3 x_2=x_3 x2=x3,得 x 1 = 1 − 2 x 2 , x 1 2 = 3 − 2 x 2 2 x_1=1-2x_2, x_1^2=3-2x_2^2 x1=1−2x2,x12=3−2x22,得 ( x 2 − 1 ) ( 3 x 2 + 1 ) = 0 (x_2-1)(3x_2+1)=0 (x2−1)(3x2+1)=0。
当 x 2 = 1 x_2=1 x2=1,得 x 1 = − 1 , x 2 = x 3 = 1 x_1=-1, x_2=x_3=1 x1=−1,x2=x3=1,得 x 1 x 2 x 3 = − 1 x_1x_2x_3=-1 x1x2x3=−1。
当 x 2 = − 1 3 x_2=-\frac{1}{3} x2=−31,得 x 1 = 5 3 , x 2 = x 3 = − 1 3 x_1=\frac{5}{3}, x_2=x_3=-\frac{1}{3} x1=35,x2=x3=−31,得 x 1 x 2 x 3 = 5 27 x_1x_2x_3=\frac{5}{27} x1x2x3=275。
假设 x 1 = 2 λ 2 x_1=2\lambda_2 x1=2λ2,代入 ( 3 ) (3) (3) 得 2 λ 2 ( x 2 + x 3 ) + λ 1 = 0 2\lambda_2(x_2+x_3)+\lambda_1=0 2λ2(x2+x3)+λ1=0,即 2 λ 2 2 − 4 λ 2 + λ 1 = 0 2\lambda_2^2-4\lambda_2+\lambda_1=0 2λ22−4λ2+λ1=0。
代入 ( 5 ) (5) (5) 得 x 2 x 3 = 2 λ 2 − 8 λ 2 2 x_2x_3=2\lambda_2 - 8\lambda_2^2 x2x3=2λ2−8λ22,代入 ( 2 ) (2) (2) 得 ( x 1 + x 2 ) 2 = − 20 λ 2 2 + 4 λ 2 + 3 (x_1+x_2)^2=-20\lambda_2^2+4\lambda_2+3 (x1+x2)2=−20λ22+4λ2+3,与 ( 1 ) (1) (1) 联立得 ( 2 λ 2 − 1 ) ( 6 λ 2 + 1 ) = 0 (2\lambda_2-1)(6\lambda_2+1)=0 (2λ2−1)(6λ2+1)=0。
当 λ 2 = 1 2 \lambda_2=\frac{1}{2} λ2=21, x 1 = 1 , x 2 = 1 , x 3 = − 1 x_1=1, x_2=1, x_3=-1 x1=1,x2=1,x3=−1 或 x 1 = 1 , x 2 = − 1 , x 3 = − 1 x_1=1,x_2=-1,x_3=-1 x1=1,x2=−1,x3=−1,得 x 1 x 2 x 3 = − 1 x_1x_2x_3=-1 x1x2x3=−1。
当 λ 2 = − 1 6 \lambda_2=-\frac{1}{6} λ2=−61, x 1 = − 1 3 , x 2 = − 1 3 , x 3 = 5 3 x_1=-\frac{1}{3}, x_2=-\frac{1}{3}, x_3=\frac{5}{3} x1=−31,x2=−31,x3=35 或 x 1 = − 1 3 , x 2 = 5 3 , x 3 = − 1 3 x_1=-\frac{1}{3}, x_2=\frac{5}{3}, x_3=-\frac{1}{3} x1=−31,x2=35,x3=−31,得 x 1 x 2 x 3 = 5 27 x_1x_2x_3=\frac{5}{27} x1x2x3=275。
综上所述, ( x 1 x 2 x 3 ) max = 5 27 (x_1x_2x_3)_{\max}=\frac{5}{27} (x1x2x3)max=275,在 x 1 = − 1 3 , x 2 = − 1 3 , x 3 = 5 3 x_1=-\frac{1}{3}, x_2=-\frac{1}{3}, x_3=\frac{5}{3} x1=−31,x2=−31,x3=35 或其它三种轮换时取到。
值得一提的是 ( x 1 x 2 x 3 ) min = − 1 (x_1x_2x_3)_{\min}=-1 (x1x2x3)min=−1。
[NOI2012] 骑行川藏
题意
给定
{
s
i
}
,
{
k
i
}
,
{
v
i
}
\{s_i\}, \{k_i\}, \{v_i\}
{si},{ki},{vi},试确定正数列
{
u
i
}
\{u_i\}
{ui},满足约束
∑
i
=
1
n
k
i
(
u
i
−
v
i
)
2
s
i
≤
E
\sum_{i=1}^n k_i(u_i-v_i)^2 s_i\le E
i=1∑nki(ui−vi)2si≤E
的条件下让
∑
i
=
1
n
s
i
u
i
\sum_{i=1}^n \frac{s_i}{u_i}
i=1∑nuisi
最小。
数据范围: n ≤ 1 0 4 , E ≤ 1 0 8 , s i ≤ ( 0 , 1 0 5 ] , k i ∈ ( 0 , 15 ] , v i ∈ ( − 100 , 100 ) n\le 10^4, E\le 10^8, s_i\le (0,10^5], k_i\in (0,15],v_i\in (-100,100) n≤104,E≤108,si≤(0,105],ki∈(0,15],vi∈(−100,100)。
保证最后的答案不超过 1 0 5 10^5 105。
题解
考虑拉格朗日乘子法:
{
∑
i
=
1
n
k
i
(
u
i
−
v
i
)
2
s
i
=
E
∂
∂
x
i
(
s
i
u
i
+
λ
k
i
(
u
i
−
v
i
)
2
s
i
)
=
−
s
i
u
i
2
+
2
λ
k
i
s
i
(
u
i
−
v
i
)
=
0
\left\{ \begin{aligned} & \sum_{i=1}^n k_i(u_i-v_i)^2 s_i= E \\ & \frac{\partial}{\partial x_i}\left(\frac{s_i}{u_i}+\lambda k_i(u_i-v_i)^2s_i \right)=-\frac{s_i}{u_i^2}+2\lambda k_is_i(u_i-v_i)=0 \end{aligned} \right.
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧i=1∑nki(ui−vi)2si=E∂xi∂(uisi+λki(ui−vi)2si)=−ui2si+2λkisi(ui−vi)=0
即
2
λ
k
i
u
i
2
(
u
i
−
v
i
)
=
1
2\lambda k_iu_i^2(u_i-v_i)=1
2λkiui2(ui−vi)=1。
然后做一些简单的判断,若 u i < v i u_i<v_i ui<vi,则可以把 u i u_i ui 对称过去,对 E E E 的贡献不变而对答案的贡献更大。因此钦定 u i ≥ v i u_i\ge v_i ui≥vi。
而 2 λ k i u i 2 ( u i − v i ) 2\lambda k_iu_i^2 (u_i-v_i) 2λkiui2(ui−vi) 在 [ v i , ∞ ) [v_i,\infty) [vi,∞) 单调,故我们知道 λ \lambda λ 后可以二分求得 u i u_i ui。
接下来只需要确定 λ \lambda λ,由于式子是 u i 2 ( u i − v i ) = 1 2 λ k i u_i^2(u_i-v_i)=\frac{1}{2\lambda k_i} ui2(ui−vi)=2λki1,因此 μ \mu μ 递增 u i u_i ui 就递减(已钦定 u i ≥ v i u_i\ge v_i ui≥vi),故整体的 ∑ k i ( u i − v i ) 2 s i \sum k_i(u_i-v_i)^2s_i ∑ki(ui−vi)2si 就会递减,所以 λ \lambda λ 也是可二分的。
接下来需要考虑 u i > 0 u_i>0 ui>0 的问题。我是这么理解的:由于我们已经钦定 u i ≥ v i u_i\ge v_i ui≥vi,因此上述拉格朗日乘子法求出的 ( u 1 , u 2 , ⋯ , u n , λ ) (u_1,u_2,\cdots,u_n,\lambda) (u1,u2,⋯,un,λ) 将会是唯一的,而由题目定义是存在解的,因此我们可以直接使用。这是我们能直接忽略 u i > 0 u_i>0 ui>0 的理由。
综上所述,我们采用的是二分套二分来解决此题。时间复杂度 O ( n log 2 eps ) O(n\log^2 \text{eps}) O(nlog2eps)。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define EPS 1e-12
const int MAXN = 10005;
int N; double E, u[MAXN], s[MAXN], k[MAXN], v[MAXN], ans;
inline double squ(double x) { return x * x; }
bool check(double lambda) {
double ret = 0;
for (int i = 1; i <= N; ++i) {
double lb = max(0.0, v[i]), rb = 1e5, mid;
while (rb - lb > EPS) {
mid = (lb + rb) / 2;
if (2 * lambda * k[i] * mid * mid * (mid - v[i]) <= 1) lb = mid;
else rb = mid;
}
u[i] = lb, ret += k[i] * squ(u[i] - v[i]) * s[i];
return ret <= E;
}
int main() {
scanf("%d%lf", &N, &E); int i;
for (i = 1; i <= N; ++i) scanf("%lf%lf%lf", &s[i], &k[i], &v[i]);
double lb = 0, rb = 1e5, mid;
while (rb - lb > EPS) {
mid = (lb + rb) / 2;
if (check(mid)) rb = mid;
else lb = mid;
}
check(lb);
for (int i = 1; i <= N; ++i) ans += s[i] / u[i];
printf("%.8f\n", ans);
return 0;
}
Gym 100886D Catenary
题意
题目需要一定的物理背景()
现在有这么个东西挂在这,每个杆的质量与长度呈正比,已知 L L L,和每段的长度 l i l_i li,试求每个点的坐标。
数据范围: 3 ≤ n ≤ 10 , 200 ≤ L ≤ 299 , 100 ≤ l i ≤ 199 3\le n\le 10, 200\le L\le 299, 100\le l_i\le 199 3≤n≤10,200≤L≤299,100≤li≤199。
lzy:稳态重力势能最小
我:???
刻画:需要求得单调不减的值域在
(
−
π
2
,
π
2
)
(-\frac{\pi}{2}, \frac{\pi}{2})
(−2π,2π) 的序列
{
θ
i
}
\{\theta_i\}
{θi} 使得
∑
i
=
1
n
(
∑
j
<
i
l
j
sin
θ
j
+
1
2
l
i
sin
θ
i
)
l
i
\sum_{i=1}^n \left(\sum_{j<i} l_j \sin \theta_j +\frac{1}{2} l_i\sin \theta_i \right) l_i
i=1∑n(j<i∑ljsinθj+21lisinθi)li
(这个式子是算重力势能和 sum(mgh),括号里的是移到了这段杆的中点算出 h,
l
i
l_i
li 是 m,g 提出去了)在
∑
i
=
1
n
l
i
cos
θ
i
=
L
,
∑
i
=
1
n
l
i
sin
θ
i
=
0
\sum_{i=1}^n l_i\cos \theta_i =L, \sum_{i=1}^n l_i\sin \theta_i =0
i=1∑nlicosθi=L,i=1∑nlisinθi=0
的情况下最小。
题解
由拉格朗日乘子法故欲求偏导数:
∂
∂
θ
i
(
∑
i
=
1
n
(
∑
j
<
i
l
j
sin
θ
j
+
1
2
l
i
sin
θ
i
)
l
i
+
μ
∑
i
=
1
n
l
i
cos
θ
i
+
φ
∑
i
=
1
n
l
i
sin
θ
i
)
=
∂
∂
θ
i
(
∑
i
<
j
l
i
sin
θ
i
l
j
+
1
2
l
i
2
sin
θ
i
+
μ
l
i
cos
θ
i
+
φ
l
i
sin
θ
i
)
=
l
i
∑
i
<
j
l
j
cos
θ
i
+
1
2
l
i
2
cos
θ
i
−
μ
l
i
sin
θ
i
+
φ
l
i
cos
θ
i
\begin{aligned} & \frac{\partial}{\partial \theta_i} \left(\sum_{i=1}^n \left(\sum_{j<i} l_j \sin \theta_j +\frac{1}{2} l_i\sin \theta_i \right) l_i+\mu \sum_{i=1}^n l_i\cos \theta_i+\varphi \sum_{i=1}^n l_i\sin \theta_i \right) \\ & = \frac{\partial}{\partial \theta_i} \left(\sum_{i<j} l_i\sin\theta_i l_j + \frac{1}{2}l_i^2\sin \theta_i + \mu l_i\cos \theta_i + \varphi l_i\sin \theta_i \right) \\ & = l_i \sum_{i<j} l_j \cos \theta_i + \frac{1}{2} l_i^2 \cos \theta_i- \mu l_i \sin \theta_i + \varphi l_i \cos \theta_i \end{aligned}
∂θi∂(i=1∑n(j<i∑ljsinθj+21lisinθi)li+μi=1∑nlicosθi+φi=1∑nlisinθi)=∂θi∂(i<j∑lisinθilj+21li2sinθi+μlicosθi+φlisinθi)=lii<j∑ljcosθi+21li2cosθi−μlisinθi+φlicosθi
令其为零,故而
tan
θ
i
=
1
μ
(
∑
i
<
j
l
j
+
1
2
l
i
+
φ
)
\tan \theta_i = \frac{1}{\mu} \left( \sum_{i<j} l_j +\frac{1}{2} l_i + \varphi \right)
tanθi=μ1(i<j∑lj+21li+φ)
接下来我们需要解一个关于
μ
,
φ
\mu, \varphi
μ,φ 的奇奇怪怪的方程组,一般我们需要寻找一些莫名其妙的单调性然后乱搞
首先 { tan θ i } \{\tan \theta_i\} {tanθi} 单调不减,而括号内单调减,故 μ < 0 \mu<0 μ<0
然后若 φ ≥ 0 \varphi\ge 0 φ≥0 则所有 tan θ i < 0 \tan \theta_i<0 tanθi<0,进而所有 sin θ i < 0 \sin \theta_i<0 sinθi<0,矛盾,故 φ < 0 \varphi<0 φ<0。
由物理意义
θ
1
≤
0
\theta_1\le 0
θ1≤0,故我们得到了一个下界
∑
1
<
j
l
j
+
1
2
l
1
+
φ
≥
0
\sum\limits_{1<j} l_j+\frac{1}{2}l_1+\varphi\ge 0
1<j∑lj+21l1+φ≥0,即
φ
≥
−
(
∑
1
<
j
l
j
+
1
2
l
1
)
≥
−
2100
\varphi\ge -\left(\sum_{1<j} l_j+\frac{1}{2}l_1 \right) \ge -2100
φ≥−(1<j∑lj+21l1)≥−2100
然后通过一些手段(?)分析出
μ
≥
−
50000
\mu \ge -50000
μ≥−50000,接下来发现
- 固定 μ \mu μ 时, φ \varphi φ 递增时 θ i \theta_i θi 递减,故 sin θ i \sin \theta_i sinθi 递减
- 固定 φ \varphi φ 时,因为 μ \mu μ 递增时 tan θ i \tan \theta_i tanθi 一直同号且向 0 0 0 靠近,故 cos θ i \cos \theta_i cosθi 递增。
于是我们使用二分交替更新的方式来解方程组(?),具体就是通过 μ \mu μ 二分求出 φ \varphi φ,再通过新的 φ \varphi φ 二分求出新的 μ \mu μ (???)
复杂度 ???
代码
咕咕咕