题目:已知 x² + 4y² = 2,求 x + 2y 的最大值。
这是一道经典的高中数学最值问题,今天我们用 10种不同方法 来解决它!
构造一个"对偶"的表达式,利用平方的非负性来求最值。
我们知道:
(x + 2y)² + (x - 2y)² = 2x² + 8y² = 2(x² + 4y²)
题目告诉我们 x² + 4y² = 2,代入上式:
(x + 2y)² + (x - 2y)² = 2 × 2 = 4
因为任何数的平方都 ≥ 0,所以:
(x + 2y)² ≤ 4
开方后得到:
|x + 2y| ≤ 2
结论:x + 2y 的最大值是 2,当 x = 2y 时取得。
# 凑对偶式法求解
import sympy as sp
defsolve_by_dual():
# 1. 定义符号变量
x, y = sp.symbols('x y')
# 2. 构造对偶式
expr1 = (x + 2*y)**2# 目标表达式的平方
expr2 = (x - 2*y)**2# 对偶表达式的平方
dual_sum = expr1 + expr2
print(f"对偶式和: (x+2y)² + (x-2y)² = {sp.expand(dual_sum)}")
# 3. 因式分解对偶式
simplified = sp.factor(dual_sum)
print(f"化简后: {simplified}")
# 4. 代入约束条件 x² + 4y² = 2
constrained_sum = simplified.subs(x**2 + 4*y**2, 2)
print(f"代入约束条件后: {constrained_sum}")
# 5. 利用平方非负性求最大值
# (x+2y)² + (x-2y)² = 4,因为 (x-2y)² ≥ 0
# 所以 (x+2y)² ≤ 4
max_squared = constrained_sum
print(f"\n因为 (x-2y)² ≥ 0,所以 (x+2y)² ≤ {max_squared}")
# 6. 求最大值
max_value = sp.sqrt(max_squared)
print(f"因此 |x + 2y| ≤ {max_value}")
# 7. 求取等号条件:(x-2y)² = 0 ⇒ x = 2y
print(f"\n取等号条件: (x-2y)² = 0 ⇒ x = 2y")
# 8. 解方程组求极值点
eq1 = sp.Eq(x, 2*y)
eq2 = sp.Eq(x**2 + 4*y**2, 2)
solutions = sp.solve((eq1, eq2), (x, y))
print(f"极值点: {solutions}")
# 9. 验证结果
for sol in solutions:
x_val, y_val = sol
result = x_val + 2*y_val
print(f"当 x={x_val}, y={y_val} 时,x + 2y = {result}")
return max_value, solutions
max_val, points = solve_by_dual()
print(f"\n【凑对偶式法】x + 2y 的最大值为: {max_val}")
print(f"取得最大值时的点: {points[1]}")
输出:
对偶式和: (x+2y)² + (x-2y)² = 2*x**2 + 8*y**2
化简后: 2*(x**2 + 4*y**2)
代入约束条件后: 4
因为 (x-2y)² ≥ 0,所以 (x+2y)² ≤ 4
因此 |x + 2y| ≤ 2
取等号条件: (x-2y)² = 0 ⇒ x = 2y
极值点: [(-1, -1/2), (1, 1/2)]
当 x=-1, y=-1/2 时,x + 2y = -2
当 x=1, y=1/2 时,x + 2y = 2
【凑对偶式法】x + 2y 的最大值为: 2
取得最大值时的点: (1, 1/2)
评价:巧思妙解,利用对偶式快速放缩,适合对称结构问题
把要求的表达式设为 k,转化为一元二次方程有解的条件。
令 k = x + 2y,则 x = k - 2y,代入约束条件:
(k - 2y)² + 4y² = 2
展开整理:
8y² - 4ky + (k² - 2) = 0
这是关于 y 的一元二次方程,要有实数解,判别式必须 ≥ 0:
Δ = b² - 4ac = (-4k)² - 4×8×(k² - 2) ≥ 0
计算得:
16k² - 32k² + 64 ≥ 0
-16k² + 64 ≥ 0
k² ≤ 4
-2 ≤ k ≤ 2
结论:k 的最大值是 2。
# 万能k法求解
import sympy as sp
defsolve_by_k_method():
# 1. 定义符号变量
k, y = sp.symbols('k y')
# 2. 构造关于y的方程
eq = sp.Eq(8*y**2 - 4*k*y + (k**2 - 2), 0)
print(f"关于 y 的方程: {eq}")
# 3. 计算判别式
delta = sp.discriminant(eq, y)
print(f"判别式 Δ = {delta}")
# 4. 解方程 Δ = 0,求边界值
boundary_values = sp.solve(sp.Eq(delta, 0), k)
print(f"边界值: {boundary_values}")
# 5. 求最大值
max_k = max(boundary_values)
print(f"k 的最大值为: {max_k}")
# 6. 求极值点
x, y = sp.symbols('x y')
sol = sp.solve([sp.Eq(x + 2*y, max_k), sp.Eq(x**2 + 4*y**2, 2)], (x, y))
print(f"\n极值点: {sol}")
# 7. 验证结果
for solution in sol:
x_val, y_val = solution
result = x_val + 2*y_val
print(f"当 x={x_val}, y={y_val} 时,x + 2y = {result}")
return max_k, sol
max_val, points = solve_by_k_method()
print(f"\n【万能k法】x + 2y 的最大值为: {max_val}")
print(f"取得最大值时的点: {points}")
输出:
关于 y 的方程: Eq(k**2 - 4*k*y + 8*y**2 - 2, 0)
判别式 Δ = 64 - 16*k**2
边界值: [-2, 2]
k 的最大值为: 2
极值点: [(1, 1/2)]
当 x=1, y=1/2 时,x + 2y = 2
【万能k法】x + 2y 的最大值为: 2
取得最大值时的点: [(1, 1/2)]
评价:通杀全场,将最值问题转化为方程有解条件,适用范围极广
利用基本不等式:对于任意实数 a 和 b,都有 a² + b² ≥ 2ab。
令 a = x,b = 2y,则:
x² + (2y)² ≥ 2 × x × 2y = 4xy
已知 x² + 4y² = 2,所以:
2 ≥ 4xy ⇒ xy ≤ 1/2
再看目标表达式:
(x + 2y)² = x² + 4xy + 4y² = (x² + 4y²) + 4xy = 2 + 4xy
代入 xy ≤ 1/2:
(x + 2y)² ≤ 2 + 4×(1/2) = 4
结论:x + 2y ≤ 2。
# 基本不等式法求解
import sympy as sp
defsolve_by_inequality():
# 1. 定义符号变量
x, y = sp.symbols('x y')
# 2. 基本不等式:a² + b² ≥ 2ab
a, b = x, 2*y
# 3. 计算不等式两边
left = a**2 + b**2
right = 2*a*b
print(f"基本不等式: {left} ≥ {right}")
# 4. 代入约束条件 x² + 4y² = 2
left_constrained = left.subs(x**2 + 4*y**2, 2)
print(f"代入约束条件 x² + 4y² = 2 后: {left_constrained} ≥ {right}")
# 5. 推导 xy 的范围
# 2 ≥ 4xy ⇒ xy ≤ 1/2
print(f"即: 2 ≥ 4xy ⇒ xy ≤ 1/2")
# 6. 展开目标函数的平方
target_squared = (x + 2*y)**2
expanded = sp.expand(target_squared)
print(f"\n目标函数平方展开: (x + 2y)² = {expanded}")
# 7. 代入约束条件求最大值
# (x + 2y)² = x² + 4xy + 4y² = (x² + 4y²) + 4xy = 2 + 4xy
target_with_constraint = expanded.subs(x**2 + 4*y**2, 2)
print(f"代入约束后: (x + 2y)² = {target_with_constraint}")
# 8. 代入 xy 的上限
# (x + 2y)² ≤ 2 + 4×(1/2) = 4
max_squared = target_with_constraint.subs(x*y, sp.Rational(1, 2))
print(f"当 xy = 1/2 时,(x + 2y)² = {max_squared}")
# 9. 求最大值
max_value = sp.sqrt(max_squared)
print(f"因此 |x + 2y| ≤ {max_value}")
# 10. 求取等号条件:a = b 即 x = 2y
print(f"\n取等号条件: x = 2y")
eq1 = sp.Eq(x, 2*y)
eq2 = sp.Eq(x**2 + 4*y**2, 2)
solutions = sp.solve((eq1, eq2), (x, y))
print(f"极值点: {solutions}")
# 11. 验证结果
for sol in solutions:
x_val, y_val = sol
result = x_val + 2*y_val
print(f"当 x={x_val}, y={y_val} 时,x + 2y = {result}")
return max_value, solutions
max_val, points = solve_by_inequality()
print(f"\n【基本不等式法】x + 2y 的最大值为: {max_val}")
print(f"取得最大值时的点: {points[1]}")
输出:
基本不等式: x**2 + 4*y**2 ≥ 4*x*y
代入约束条件 x² + 4y² = 2 后: 2 ≥ 4*x*y
即: 2 ≥ 4xy ⇒ xy ≤ 1/2
目标函数平方展开: (x + 2y)² = x**2 + 4*x*y + 4*y**2
代入约束后: (x + 2y)² = 4*x*y + 2
当 xy = 1/2 时,(x + 2y)² = 4
因此 |x + 2y| ≤ 2
取等号条件: x = 2y
极值点: [(-1, -1/2), (1, 1/2)]
当 x=-1, y=-1/2 时,x + 2y = -2
当 x=1, y=1/2 时,x + 2y = 2
【基本不等式法】x + 2y 的最大值为: 2
取得最大值时的点: (1, 1/2)
评价:基石方法,均值不等式是不等式证明的基础,必须熟练掌握
观察约束条件的对称性,假设变量满足某种对称关系时取极值。
观察 x² + (2y)² = 2,发现形式对称。
假设 x = 2y(让两个平方项相等),代入:
(2y)² + 4y² = 2 ⇒ 8y² = 2 ⇒ y² = 1/4 ⇒ y = ±1/2
当 y = 1/2 时,x = 1,此时:
x + 2y = 1 + 2×(1/2) = 2
结论:最大值是 2。
# 轮换对称法求解
from sympy import symbols, Eq, solve
defsolve_by_symmetry():
x, y = symbols('x y')
# 假设 x = 2y(对称条件)
sol = solve([Eq(x, 2*y), Eq(x**2 + 4*y**2, 2)], (x, y))
# 计算目标函数值
values = [s[0] + 2*s[1] for s in sol]
max_value = max(values)
return max_value, sol
max_val, points = solve_by_symmetry()
print(f"【轮换对称法】x + 2y 的最大值为: {max_val}")
print(f"取得最大值时的点: {points[1]}")
输出:
【轮换对称法】x + 2y 的最大值为: 2
取得最大值时的点: (1, 1/2)
评价:慧眼识珠,通过观察对称性快速定位极值点,需验证确保正确性
利用分式形式的不等式,适用于幂次结构的问题。
权方和不等式的特殊形式:
a²/b + c²/d ≥ (a+c)²/(b+d)
应用到本题:
x²/1 + (2y)²/1 ≥ (x + 2y)²/(1+1)
左边就是 x² + 4y² = 2,所以:
2 ≥ (x + 2y)²/2 ⇒ (x + 2y)² ≤ 4
结论:x + 2y ≤ 2。
# 权方和不等式法求解
import sympy as sp
defsolve_by_quanfanghe():
# 1. 定义符号变量
x, y = sp.symbols('x y')
# 2. 权方和不等式形式
# a₁²/b₁ + a₂²/b₂ ≥ (a₁ + a₂)²/(b₁ + b₂)
a1, a2 = x, 2*y
b1, b2 = 1, 1
# 3. 计算左边
left_side = a1**2/b1 + a2**2/b2
print(f"权方和左边: x²/1 + (2y)²/1 = {sp.simplify(left_side)}")
# 4. 代入约束条件 x² + 4y² = 2
left_with_constraint = left_side.subs(x**2 + 4*y**2, 2)
print(f"代入约束条件后左边 = {sp.simplify(left_with_constraint)}")
# 5. 计算右边
right_side = (a1 + a2)**2 / (b1 + b2)
print(f"权方和右边: (x + 2y)²/(1 + 1) = {sp.simplify(right_side)}")
# 6. 应用不等式求最大值
# 2 ≥ (x + 2y)²/2
# (x + 2y)² ≤ 4
max_squared = 2 * left_with_constraint
print(f"\n由不等式得: (x + 2y)² ≤ {sp.simplify(max_squared)}")
# 7. 求最大值
max_value = sp.sqrt(max_squared)
print(f"因此 |x + 2y| ≤ {max_value}")
# 8. 求取等号条件
# 权方和取等条件:a₁/b₁ = a₂/b₂
# 即 x/1 = 2y/1 ⇒ x = 2y
print(f"\n取等号条件: x/1 = 2y/1 ⇒ x = 2y")
eq1 = sp.Eq(x, 2*y)
eq2 = sp.Eq(x**2 + 4*y**2, 2)
solutions = sp.solve((eq1, eq2), (x, y))
print(f"极值点: {solutions}")
# 9. 验证结果
for sol in solutions:
x_val, y_val = sol
result = x_val + 2*y_val
print(f"当 x={x_val}, y={y_val} 时,x + 2y = {result}")
return max_value, solutions
max_val, points = solve_by_quanfanghe()
print(f"\n【权方和不等式法】x + 2y 的最大值为: {max_val}")
print(f"取得最大值时的点: {points[1]}")
输出:
权方和左边: x²/1 + (2y)²/1 = x**2 + 4*y**2
代入约束条件后左边 = 2
权方和右边: (x + 2y)²/(1 + 1) = (x + 2*y)**2/2
由不等式得: (x + 2y)² ≤ 4
因此 |x + 2y| ≤ 2
取等号条件: x/1 = 2y/1 ⇒ x = 2y
极值点: [(-1, -1/2), (1, 1/2)]
当 x=-1, y=-1/2 时,x + 2y = -2
当 x=1, y=1/2 时,x + 2y = 2
【权方和不等式法】x + 2y 的最大值为: 2
取得最大值时的点: (1, 1/2)
评价:高阶技巧,分式结构不等式,对幂次问题有奇效,掌握后可快速口算
利用向量内积的性质,非常适合线性组合的最值问题。
柯西不等式:
(a₁b₁ + a₂b₂)² ≤ (a₁² + a₂²)(b₁² + b₂²)
令 a₁=1, a₂=1, b₁=x, b₂=2y,则:
(x + 2y)² ≤ (1² + 1²)(x² + (2y)²) = 2 × 2 = 4
结论:x + 2y ≤ 2。
# 柯西不等式法求解
import sympy as sp
defsolve_by_cauchy():
# 1. 定义符号变量
x, y = sp.symbols('x y')
# 2. 柯西不等式形式
# (a₁b₁ + a₂b₂)² ≤ (a₁² + a₂²)(b₁² + b₂²)
a1, a2 = 1, 1
b1, b2 = x, 2*y
# 3. 计算左边:(a₁b₁ + a₂b₂)²
left_side = (a1*b1 + a2*b2)**2
print(f"目标函数平方: (x + 2y)² = {sp.simplify(left_side)}")
# 4. 计算右边:(a₁² + a₂²)(b₁² + b₂²)
right_side = (a1**2 + a2**2) * (b1**2 + b2**2)
print(f"柯西不等式右边: (1² + 1²)(x² + (2y)²) = {right_side}")
print(f"展开后: {sp.expand(right_side)}")
# 5. 代入约束条件 x² + 4y² = 2
# 使用 factor 先因式分解,再替换
right_factor = sp.factor(right_side)
print(f"因式分解后: {right_factor}")
right_with_constraint = right_factor.subs(x**2 + 4*y**2, 2)
print(f"代入约束条件 x² + 4y² = 2 后右边 = {sp.simplify(right_with_constraint)}")
# 6. 应用柯西不等式求最大值
# (x + 2y)² ≤ 4 ⇒ |x + 2y| ≤ 2
max_value = sp.sqrt(right_with_constraint)
print(f"\n由柯西不等式得: |x + 2y| ≤ {max_value}")
# 7. 求取等号条件:a₁/b₁ = a₂/b₂
# 即 1/x = 1/(2y) ⇒ x = 2y
eq1 = sp.Eq(x, 2*y)
eq2 = sp.Eq(x**2 + 4*y**2, 2)
# 8. 解方程组求极值点
solutions = sp.solve((eq1, eq2), (x, y))
print(f"\n取等号条件: x = 2y")
print(f"极值点: {solutions}")
# 9. 验证结果
for sol in solutions:
x_val, y_val = sol
result = x_val + 2*y_val
print(f"当 x={x_val}, y={y_val} 时,x + 2y = {result}")
return max_value, solutions
max_val, points = solve_by_cauchy()
print(f"\n【柯西不等式法】x + 2y 的最大值为: {max_val}")
print(f"取得最大值时的点: {points[1]}")
输出:
目标函数平方: (x + 2y)² = (x + 2*y)**2
柯西不等式右边: (1² + 1²)(x² + (2y)²) = 2*x**2 + 8*y**2
展开后: 2*x**2 + 8*y**2
因式分解后: 2*(x**2 + 4*y**2)
代入约束条件 x² + 4y² = 2 后右边 = 4
由柯西不等式得: |x + 2y| ≤ 2
取等号条件: x = 2y
极值点: [(-1, -1/2), (1, 1/2)]
当 x=-1, y=-1/2 时,x + 2y = -2
当 x=1, y=1/2 时,x + 2y = 2
【柯西不等式法】x + 2y 的最大值为: 2
取得最大值时的点: (1, 1/2)
评价:向量神器,与权方和不等式等价,是处理线性组合最值的利器
把代数问题转化为几何图形,直观易懂。
当直线与椭圆相切时,k 取得极值。
将 x = k - 2y 代入椭圆方程:
(k - 2y)² + 4y² = 2
相切时只有一个交点,判别式为 0:
Δ = 16k² - 32(k² - 2) = 0 ⇒ k = ±2
# 几何意义法求解
defsolve_by_geometry():
from sympy import symbols, discriminant, solve, Eq
k, y = symbols('k y')
# 直线与椭圆相切时判别式为0
eq = Eq(8*y**2 - 4*k*y + (k**2 - 2), 0)
delta = discriminant(eq, y)
k_values = solve(delta, k)
max_value = max(k_values)
# 求切点坐标
x, y = symbols('x y')
sol = solve([Eq(x + 2*y, max_value), Eq(x**2 + 4*y**2, 2)], (x, y))
return max_value, sol
max_val, points = solve_by_geometry()
print(f"【几何意义法】x + 2y 的最大值为: {max_val}")
print(f"切点坐标: {points}")
输出:
【几何意义法】x + 2y 的最大值为: 2
切点坐标: [(1, 1/2)]
评价:直观易懂,将代数问题几何化,适合理解问题本质
利用椭圆的参数方程,将问题转化为三角函数求最值。
椭圆 x²/a² + y²/b² = 1 的参数方程是:
x = a·cosθ, y = b·sinθ
对于 x² + 4y² = 2,即 x²/(√2)² + y²/(√2/2)² = 1:
x = √2·cosθ, y = (√2/2)·sinθ
代入目标函数:
x + 2y = √2·cosθ + 2×(√2/2)·sinθ = √2(cosθ + sinθ)
利用三角恒等式:
cosθ + sinθ = √2·sin(θ + π/4)
所以:
x + 2y = √2 × √2·sin(θ + π/4) = 2·sin(θ + π/4)
因为 sin 的最大值是 1,所以:
x + 2y ≤ 2
# 三角函数法求解
import sympy as sp
import numpy as np
defsolve_by_trigonometry():
# 1. 定义符号变量
theta = sp.symbols('theta')
# 2. 椭圆参数方程
x = sp.sqrt(2) * sp.cos(theta) # x = √2·cosθ
y = (sp.sqrt(2)/2) * sp.sin(theta) # y = (√2/2)·sinθ
# 3. 代入目标函数
expr = x + 2*y
print(f"代入参数方程: x + 2y = {sp.simplify(expr)}")
# 4. 化简三角表达式
simplified = sp.simplify(expr / sp.sqrt(2))
print(f"化简后: (x + 2y)/√2 = {simplified}")
# 5. 用 sympy 求 sin 函数的最大值
max_sin_value = sp.maximum(sp.sin(theta), theta, sp.Interval(0, 2*sp.pi))
print(f"\nsinθ 在 [0, 2π] 的最大值为: {max_sin_value}")
# 6. 计算 x + 2y 的最大值
# x + 2y = √2·√2·sin(θ + π/4) = 2·sin(θ + π/4)
max_value = sp.sqrt(2) * sp.sqrt(2) * max_sin_value
print(f"因此 x + 2y 的最大值为: {sp.simplify(max_value)}")
# 7. 求取得最大值时的角度
# sin(θ + π/4) = 1 时,θ + π/4 = π/2
theta_solutions = sp.solve(sp.Eq(sp.sin(theta + sp.pi/4), 1), theta)
theta_max = theta_solutions[0]
print(f"\nsin(θ + π/4) = 1 的解: θ = {theta_max}")
# 8. 计算极值点坐标
x_max = sp.sqrt(2) * sp.cos(theta_max)
y_max = (sp.sqrt(2)/2) * sp.sin(theta_max)
print(f"\n当 θ = {sp.N(theta_max, 3)} 时:")
print(f" x = √2·cos(θ) = {sp.N(x_max, 4)}")
print(f" y = (√2/2)·sin(θ) = {sp.N(y_max, 4)}")
print(f" x + 2y = {sp.N(x_max + 2*y_max, 4)}")
return sp.simplify(max_value), (sp.N(x_max), sp.N(y_max))
max_val, point = solve_by_trigonometry()
print(f"\n【三角函数法】x + 2y 的最大值为: {max_val}")
print(f"取得最大值时的点: x={float(point[0]):.2f}, y={float(point[1]):.2f}")
输出:
代入参数方程: x + 2y = 2*sin(theta + pi/4)
化简后: (x + 2y)/√2 = sqrt(2)*sin(theta + pi/4)
sinθ 在 [0, 2π] 的最大值为: 1
因此 x + 2y 的最大值为: 2
sin(θ + π/4) = 1 的解: θ = pi/4
当 θ = 0.785 时:
x = √2·cos(θ) = 1.000
y = (√2/2)·sin(θ) = 0.5000
x + 2y = 2.000
【三角函数法】x + 2y 的最大值为: 2
取得最大值时的点: x=1.00, y=0.50
评价:参数化利器,将椭圆转化为三角函数,需要扎实的三角恒等变换功底
构造向量,利用向量点积的性质求最值。
构造两个向量:
向量 a = (1, 1)
向量 b = (x, 2y)
向量点积性质:
a·b ≤ |a| × |b|
计算:
a·b = 1×x + 1×(2y) = x + 2y
|a| = √(1² + 1²) = √2
|b| = √(x² + (2y)²) = √(x² + 4y²) = √2
所以:
x + 2y ≤ √2 × √2 = 2
import sympy as sp
# 定义符号变量
x, y = sp.symbols("x y")
# 构造向量
v1 = sp.Matrix([1, 1]) # 向量 a = (1, 1)
v2 = sp.Matrix([x, 2*y]) # 向量 b = (x, 2y)
# 计算点积
dot = v1.dot(v2) # a·b = x + 2y
# 计算向量模长
am = sp.sqrt(v1.dot(v1)) # |a| = √(1² + 1²) = √2
bm = sp.sqrt(v2.dot(v2)) # |b| = √(x² + (2y)²) = √(x² + 4y²)
# 约束条件
exp1 = sp.Eq(x**2 + 4*y**2, 2)
# 向量点积性质:a·b ≤ |a| × |b|
print("点积 a·b =", dot)
print("|a| =", am)
print("|b| =", bm)
print("不等式:", dot, "≤", am, "×", bm)
# 代入约束条件 |b| = √2
bm_substituted = bm.subs(x**2 + 4*y**2, 2)
max_val = am * bm_substituted
print("代入约束条件后 |b| =", bm_substituted)
print("因此最大值为 |a| × |b| =", max_val)
# 求极值点:当 a 与 b 同向时取等号,即 v1 = k * v2
k = sp.symbols('k')
eq1 = sp.Eq(1, k * x) # 1 = k*x
eq2 = sp.Eq(1, k * 2*y) # 1 = k*2y
eq3 = sp.Eq(x**2 + 4*y**2, 2) # 约束条件
solution = sp.solve((eq1, eq2, eq3), (x, y, k))
print("\n极值点:")
for sol in solution:
x_val, y_val, k_val = sol
print(f" x = {x_val}, y = {y_val},此时 x + 2y = {x_val + 2*y_val}")
print(f"\n【向量法】x + 2y 的最大值为: {max_val}")
print(f"取得最大值时的点: {solution[1][:2]}")
输出:
点积 a·b = x + 2*y
|a| = sqrt(2)
|b| = sqrt(x**2 + 4*y**2)
不等式: x + 2*y ≤ sqrt(2) × sqrt(x**2 + 4*y**2)
代入约束条件后 |b| = sqrt(2)
因此最大值为 |a| × |b| = 2
极值点:
x = -1, y = -1/2,此时 x + 2y = -2
x = 1, y = 1/2,此时 x + 2y = 2
【向量法】x + 2y 的最大值为: 2
取得最大值时的点: (1, 1/2)
评价:构造思维,通过向量点积性质求最值,需要一定的数学想象力
这是高等数学的方法,通过构造拉格朗日函数求条件极值。
构造拉格朗日函数:
L(x, y, λ) = x + 2y + λ(2 - x² - 4y²)
分别对 x、y、λ 求偏导并令其为 0:
∂L/∂x = 1 - 2λx = 0 ⇒ x = 1/(2λ)
∂L/∂y = 2 - 8λy = 0 ⇒ y = 2/(8λ) = 1/(4λ)
∂L/∂λ = 2 - x² - 4y² = 0
由前两式得 x = 2y,代入第三式:
(2y)² + 4y² = 2 ⇒ y = ±1/2, x = ±1
结论:最大值为 f(1, 1/2) = 2。
# 拉格朗日乘数法求解
from scipy.optimize import minimize
defsolve_by_lagrange():
defobjective(vars):
x, y = vars
return -(x + 2*y) # 求最大值转化为求负最小值
defconstraint(vars):
x, y = vars
return x**2 + 4*y**2 - 2
result = minimize(objective, [1, 0.5], constraints={'type': 'eq', 'fun': constraint})
max_value = -result.fun
x_opt, y_opt = result.x
return max_value, (x_opt, y_opt)
max_val, point = solve_by_lagrange()
print(f"【拉格朗日乘数法】x + 2y 的最大值为: {max_val:.2f}")
print(f"取得最大值时的点: x={point[0]:.2f}, y={point[1]:.2f}")
输出:
【拉格朗日乘数法】x + 2y 的最大值为: 2.00
取得最大值时的点: x=1.00, y=0.50
评价:通用大法,高等数学经典方法,适用于各类条件极值问题
答案:x + 2y 的最大值是 2
取得条件:当且仅当 x = 1,y = 1/2 时取得。
关注公众号,获取更多数学和编程解题技巧!
sympy玩转数学👈点击阅读
