浅谈拉格朗日乘子法

只能做简单科普,不太能保证严谨性。。

由于笔者水平不太够,很多地方都没给出证明,望谅解!

拉格朗日乘子法

论文

x 1 , x 2 , ⋯   , x n ∈ R x_1, x_2, \cdots, x_n\in \R x1,x2,,xnR 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=1mλjgj(x1,x2,,xn))=0(1in)

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(1in)
( 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=kxi(xi2λxi)=0(1in)
下式化为 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,x3R 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=1xi2=3xm(xi+λ1xi+λ2xi2)=0(1m3)
也即:
{ 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 (x12λ2)(x2x3)=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=12x2,x12=32x22,得 ( x 2 − 1 ) ( 3 x 2 + 1 ) = 0 (x_2-1)(3x_2+1)=0 (x21)(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λ224λ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λ28λ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λ21)(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=1nki(uivi)2siE
的条件下让
∑ i = 1 n s i u i \sum_{i=1}^n \frac{s_i}{u_i} i=1nuisi
最小。

数据范围: 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) n104,E108,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=1nki(uivi)2si=Exi(uisi+λki(uivi)2si)=ui2si+2λkisi(uivi)=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(uivi)=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 uivi

2 λ k i u i 2 ( u i − v i ) 2\lambda k_iu_i^2 (u_i-v_i) 2λkiui2(uivi) [ 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(uivi)=2λki1,因此 μ \mu μ 递增 u i u_i ui 就递减(已钦定 u i ≥ v i u_i\ge v_i uivi),故整体的 ∑ k i ( u i − v i ) 2 s i \sum k_i(u_i-v_i)^2s_i ki(uivi)2si 就会递减,所以 λ \lambda λ 也是可二分的。

接下来需要考虑 u i > 0 u_i>0 ui>0 的问题。我是这么理解的:由于我们已经钦定 u i ≥ v i u_i\ge v_i uivi,因此上述拉格朗日乘子法求出的 ( 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 3n10,200L299,100li199

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=1n(j<iljsinθ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=1nlicosθi=L,i=1nlisinθi=0
的情况下最小。

题解

lzy 的题解

悬链线经典问题求解

由拉格朗日乘子法故欲求偏导数:
∂ ∂ θ 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=1n(j<iljsinθj+21lisinθi)li+μi=1nlicosθi+φi=1nlisinθi)=θi(i<jlisinθilj+21li2sinθi+μlicosθi+φlisinθi)=lii<jljcosθ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<jlj+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 θ10,故我们得到了一个下界 ∑ 1 < j l j + 1 2 l 1 + φ ≥ 0 \sum\limits_{1<j} l_j+\frac{1}{2}l_1+\varphi\ge 0 1<jlj+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<jlj+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 μ (???)

复杂度 ???

代码

咕咕咕

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值