You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过最小化方法获取含p_s、p_h的y的符号解?

求解含参数p_s、p_h的y的符号解方案

问题根源

你当前用lambdify将符号表达式转为数值函数,再通过scipy.optimize.minimize做数值优化,这种方式只能得到特定参数下的数值解,无法生成含p_s、p_h的符号解。要获取符号解,必须全程基于SymPy的符号运算能力处理。

解决方案

由于你要最小化的是平方项,其最小值为0,等价于让平方内的表达式等于0。因此直接求解该核心表达式等于0的方程即可,无需调用数值优化工具。

优化后的代码

import sympy as sp

# 已知常数赋值
α, h0, π, τ, θ = 0.7, 1, 0.05, 0.02, 0.02
# 定义符号变量
y, p_h, p_s = sp.symbols('y p_h p_s')

# 计算各中间变量
c_r = α * ((y/(1+π)) + τ)
s_r = ((1-α)/p_s) * ((y/(1+π)) + τ)
c0_o = (y/(1+π)) - ((p_h * θ * h0**2)/(1+π)) + τ

# 提取平方内的核心表达式,令其等于0
core_expr = (c_r**α) * (s_r**(1-α)) - (c0_o**α) * (h0**(1-α))

# 化简表达式,提升求解效率
simplified_expr = sp.simplify(core_expr)

# 求解y关于p_s、p_h的符号解
solution = sp.solve(simplified_expr, y)

# 打印格式化的符号解
sp.pprint(solution)

进一步化简优化

考虑到h0=1,可手动简化表达式,降低求解复杂度:

import sympy as sp

α, h0, π, τ, θ = 0.7, 1, 0.05, 0.02, 0.02
y, p_h, p_s = sp.symbols('y p_h p_s')

# 定义中间变量简化推导
A = y/(1+π) + τ
c0_o = A - (p_h * θ * h0**2)/(1+π)

# 利用h0=1化简核心等式
term = (α**α) * (((1-α)/p_s)**(1-α))
eq = sp.Eq(term * A, c0_o**α)

# 求解y的符号解
solution = sp.solve(eq, y)

sp.pprint(solution)

关键说明

  1. 符号解必须全程使用SymPy的符号变量和运算,避免转为数值函数。
  2. 最小化平方项等价于求解核心表达式为0的方程,这是更直接的思路。
  3. 复杂表达式先通过simplify或手动化简,能大幅提高SymPy求解器的成功率。

内容的提问来源于stack exchange,提问作者NaTa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:00:37