知識點 拉格朗日乘數法

2022-05-19 02:28:32 字數 1264 閱讀 7700

簡介:

在滿足約束條件$\varphi(x_1 ,x_2 ,\cdots ,x_n )=0$時求$f(x_1 ,x_2 ,\cdots ,x_n )$的極值。

結論:令$l(x_1 ,x_2 ,\cdots ,x_n )=f(x_1 ,x_2 ,\cdots ,x_n )+\lambda \varphi(x_1 ,x_2 ,\cdots ,x_n )$。

再令$\frac}$為l關於$x_i$的偏導數。(即視其他$x_j$為常量,僅對$x_i$求導)

則方程組

$\begin\frac}=0\\\frac}=0\\ \cdots \\ \frac}=0 \\ \varphi(x_1 ,x_2 ,\cdots ,x_n )=0\end$

的某個解$(\lambda_,x_ ,x_ ,\cdots ,x_ )$一定對應著f的極值點。

實現:先通過列舉/二分/三分確定$\lambda$,然後根據題意算出一組合法解更新答案即可。

**(noi2012騎行川藏):

#include#define maxn 200005

#define maxm 500005

#define inf 0x7fffffff

#define eps 1e-14

#define ll long long

#define rint register int

#define debug(x) cerr<

namespace

std;

struct roada[maxn];

int n; double

e;inline

intread()

inline

int dcmp(double x)

inline

double phi(double

lam)

res+=a[i].k*(l-a[i].v)*(l-a[i].v)*a[i].s;

}//printf("%lf\n",res-e);

return res-e;

}inline

double calc(double

lam)

res+=a[i].s/l;

}return

res;

}int

main()

//printf("%lf %lf\n",l,r);

printf("

%.6lf\n

",calc(l));

return0;

}

騎行川藏

拉格朗日乘數法

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

拉格朗日乘數法

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

拉格朗日乘數法

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