Project Euler 190

Project Euler 190

题目

Maximising a weighted product

Let Sm=(x1,x2,,xm) be the m-tuple of positive real numbers with x1+x2++xm=m for which Pm=x1x22xmm is maximised.

For example, it can be verified that [P10]=4112 ([ ] is the integer part function).

Find [Pm] for 2m15.

拉格朗日乘数法

拉格朗日乘数法(等式约束,与不等式约束相对)用于求多元函数在一定约束下的极值。拉格朗日乘数法可以将一个 n 元函数和 k 个约束条件的最优化问题转化成一个解 n+k 元方程组的解的问题。引入的一组新参数 λ,称为拉格朗日乘数。

f(x1,x2,,xn) 为需要求极值的多元函数,g1(x1,x2,,xn)=0, k 个等式的约束,那么构造以下 n+k 元拉格朗日函数:

L(x1,x2,,xn,λ1,λ2,,λk)=f(x1,x2,,xn)i=1kλigi(x1,x2,,xn)

问题转化成对函数 L 求极值。

解决方案

f(x1,x2,,xm)=i=1mxii,g(x1,x2,,xm)=i=1mxim

那么利用拉格朗日乘数法,构造拉格朗日函数:

L(x1,x2,,xn,λ)=f(x1,x2,,xn)λg(x1,x2,,xn)=i=1mxiiλ(i=1mxim)

为求最大值,对每个 xi 求偏导数,有

Lxi=if(x1,x2,,xn)xiλ

Lxi=0,得到 xi=if(x1,x2,,xn)λ

由这个式子不难发现,xi 的值,都是按比例分配的,即 i,j[1,m],xixj=ij

因此根据 g 这个约束,可以得到最大值点为 xi=2im+1

代码

1
2
3
4
5
6
7
8
9
N = 15
ans = 0
for m in range(2, N + 1):
w = 1
for i in range(1, m + 1):
w *= (2 * i / (m + 1)) ** i
ans += int(w)
print(ans)

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
Ujimatsu Chiya 微信 微信
Ujimatsu Chiya 支付宝 支付宝