簡介:
在滿足約束條件$\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條件去求取。當然,這兩個方法求得的結果只是必要條件,只有當是凸函式的情況下,才能保...