【问题标题】:Why does sympy.solve not output anything?为什么 sympy.solve 不输出任何东西?
【发布时间】:2021-06-17 12:28:21
【问题描述】:

我正在尝试求解方程组。下面示例中的方程是拉格朗日函数(LDash 1 到 7)的一阶导数,我是用纸笔获得的。系统的解决方案应该给出最大值和最小值的候选者。

选择变量是X1, X2, LC, LA, s, u,而所有其他符号都是正实数的占位符。

脚本运行,但在我的控制台中没有显示任何内容。在整个SymPy documentationsolve 的示例中输出解决方案。您能帮我找出为什么它在下面的示例中不这样做吗?

我对 Python 完全陌生,所以请告诉我如何改进。谢谢!

# import stuff
from sympy.interactive import printing
printing.init_printing(use_latex=True)
from sympy import Function
from sympy.solvers import solve
import sympy as sp

X1, X2, LC, LA, s, u = sp.var('X_1, X_2, L_C, L_A, s, u', positive=True);

# import exogenous variables

a1, a2, a3, a4, S1, S2, S3, S4, p1, p2, p3, p4, fdash, vdash,f, v = sp.symbols('alpha_1, alpha_2, alpha_3, alpha_4, S_1, S_2, S_3, S_4, p_1, p_2, p_3, p_4, \hat{F}, \hat{V}, f, v', positive=True)

v0 = sp.symbols('v_0') # raw skill level
i = sp.symbols('\hat{\imath}') # children in the household - time endowment
I = sp.symbols('I') # household size and total time endowment
climate = sp.symbols('theta') # climate variable
capital = sp.symbols('K') # quasi fixed land and (non-human) capital
lam = sp.symbols('\lambda') # shadow prices (lagrange multiplier)

# pen-and-paper: derivatives of the Lagrange function w.r.t choice variables

LDash1 = a1/(X1-S1)-lam*p1 # L' w.r.t X1
LDash2 = a2/(X2-S2)-lam*p2 # L' w.r.t X2
LDash3 = -a3/(I-i-LA-S3) + 2*lam*p3 + lam*p1*fdash # L' w.r.t LA
LDash4 = -1/(i-LC) - a4/(i-LC-S4) + 2*lam*p4 + lam*p1*fdash*(-s*u + s*v +(1-s)*v0) # L' w.r.t LC
LDash5 = lam*p1*fdash *(-u*LC + v*LC - v0*LC) # L' w.r.t. s
LDash6 = lam*p1*fdash *(-s*LC + s*vdash*LC) # L' w.r.t u
LDash7 = p1*X1 + p2*X2 -2*p3*I + 2*p3*i + 2*p3*LA -2*p4*i + 2*p4*LC + p1*f # L' w.r.t lambda

solve((LDash1,LDash2, LDash3, LDash4, LDash5, LDash6, LDash7), (X1,X2,LA,LC,u,s))

【问题讨论】:

  • 为什么会显示什么?你没有print 任何东西,sympy.solvers.solve 大概也没有输出任何东西,所以你最终没有输出

标签: python sympy mathematical-optimization


【解决方案1】:

您有两个问题,首先解决调用将花费很长时间并且可能根本不会成功返回。其次,即使它会返回,假设你用solve(LDash1, X1) 替换调用,solve 的返回值也不会被打印出来。尝试用此替换最后一行,例如以便能够调试您的方程式

solve(LDash1, X1)

之所以将答案打印在文档中是因为他们使用interactive mode,这通常由Python交互提示>>> 指示

【讨论】:

  • 嗨@vidstige。我已经按照您的建议对其进行了调试,但即便如此,它也不会输出任何内容。有趣的是,调试脚本也没有标记任何错误。
  • 哦,是的!确实是交互模式。我正在尝试再次为解决方案指定一个名称并打印它。干杯。
  • 现在solve 输出一个空列表...所以我猜没有解决方案?
  • 您正在尝试为 6 个未知数求解 7 个方程,因此很有可能不存在解。从solve 返回的空列表通常意味着它认为没有解决方案,尽管在具有许多符号参数的系统的情况下,这可能意味着几乎所有可能的参数值都不存在解决方案。您的意思是要将第 7 个变量列为未知变量吗?
  • 嗨,奥斯卡。事实上,我犯了一个愚蠢的错误:我没有将拉格朗日乘数 lambda 作为变量包含在求解中。欢呼
猜你喜欢
  • 2020-09-07
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多