为何SymPy nonlinsolve求解单变量a时返回EmptySet?
关于SymPy nonlinsolve求解部分变量返回空集的原因
核心逻辑
nonlinsolve在求解部分变量时,要求找到的解必须满足:对于所有未指定的变量(在其定义域内的任意取值),所有方程都成立。只有符合这个条件的解才会被返回,否则返回EmptySet。
针对你的案例分析
当指定求解
[a]时:- 方程
eq1直接给出a=1,但eq2要求a = b + c。 - 由于
b和c被定义为任意正实数,b + c可以取任意大于0的值,并非固定为1。不存在一个a的值能让a = b + c对所有正实数b、c成立,因此nonlinsolve返回EmptySet。
- 方程
当指定求解
[a, b, c]时:nonlinsolve需要找到满足所有方程的三元组(a,b,c)。此时eq1固定a=1,eq2转化为b = 1 - c,只要c取(0,1)之间的正实数,b也会是正实数,符合定义域要求。因此返回解集合{(1, 1-c, c)}。
总结
nonlinsolve对部分变量的求解逻辑不是“找到存在未指定变量使方程组成立的解”,而是“找到对所有未指定变量(定义域内)都能让方程组成立的解”。这是导致两种调用结果不同的关键。
内容的提问来源于stack exchange,提问作者Erik Iverson
相关产品推荐
相关产品推荐

