拉格朗日乘數法 NOI2012 騎行川藏

2021-07-14 16:30:58 字數 2011 閱讀 7622

首先,我們來考慮一下部分分。

直接算即可,v1

=ek1

×s1−

−−−−

√+v′

1t=s

1v1

v1=e

1k1×

s1−−

−−−√

+v′1

v2=e

−e1k

2×s2

−−−−

−√+v

′2t=

s1v1

+s2v

2 我們猜測

t 關於e1

的函式是乙個單谷函式,對e1

三分一下就可以了

我不會qaq

首先,我們將題目要求轉化為數學式子 e≥

∑i=1

nkis

i(vi

−v′i

)2t=

∑i=1

nsiv

i 求t

min

基於貪心的思想,顯然e=

∑ni=

1kis

i(vi

−v′i

)2時,答案最優。

具體證明我不會。。。。

例題

在g(

x1,x

2,x3

,…,x

n)=c

的約束條件下,求f(

x1,x

2,x3

,…,x

n)的最值。

我們先來講一下結論。

結論

當f(

x1,x

2,x3

,…,x

n)取到最值時,f(

x1,x

2,x3

,…,x

n)和g(

x1,x

2,x3

,…,x

n)=c

的法向量(也就是梯度向量)平行。

我們將例題具體化,比如f(

x,y)

=x2+

y2g(

x,y)

=xy=

3 ,求f(

x,y)

min

先來肉眼觀察,很容易發現f(

x,y)

min=

6 然後我們用拉格朗日乘數法試試。 設∇

f(x,

y)=λ

∇g(x

,y)

我們就可以列出方程⎧⎩

⎨2x2

yxy=

λy=λ

x=3

解得λ=±

2 所以inline

double cal(int i,double vi,double lambda)

double divide_conqure(int i,double l,double r,double lambda)

return l;

}double check(double lambda)

return en;

}double divide_conqure(double l,double r)

return l;

}// f(v1, v2, v3, ..., vn) = ∑ si / vi

//  g(v1, v2, v3, ..., vn) = ∑ kisi(vi-vi')^2

// (si'vi-sivi')/vi^2=-si/vi^2=2*lambda*kisi(vi-vi')

//vi^2*2*lambda*ki(vi-vi')和vi成反比&&=-1

//vi^3*2*lambda*ki-vi^2*lambda*vi'*2*ki=-1/lambda vi和lambda成正比

int main()

拉格朗日乘數法

在求取有約束條件的優化問題時,拉格朗日乘子法 lagrange multiplier 和kkt條件是非常重要的兩個求取方法,對於等式約束的優化問題,可以應用拉格朗日乘子法去求取最優值 如果含有不等式約束,可以應用kkt條件去求取。當然,這兩個方法求得的結果只是必要條件,只有當是凸函式的情況下,才能保...

拉格朗日乘數法

在求取有約束條件的優化問題時,拉格朗日乘子法 lagrange multiplier 和kkt條件是非常重要的兩個求取方法,對於等式約束的優化問題,可以應用拉格朗日乘子法去求取最優值 如果含有不等式約束,可以應用kkt條件去求取。當然,這兩個方法求得的結果只是必要條件,只有當是凸函式的情況下,才能保...

拉格朗日乘數法

在求取有約束條件的優化問題時,拉格朗日乘子法 lagrange multiplier 和kkt條件是非常重要的兩個求取方法,對於等式約束的優化問題,可以應用拉格朗日乘子法去求取最優值 如果含有不等式約束,可以應用kkt條件去求取。當然,這兩個方法求得的結果只是必要條件,只有當是凸函式的情況下,才能保...