为何Sage solve求解该线性方程组无返回值,手动代入或补全未知量后可正常求解
Sage 求解线性方程组返回空结果的异常问题
在电路分析场景下构建待求解方程组时,遇到Sage solve 函数返回空结果的异常,具体触发场景、复现步骤和现象如下:
- 基础方程组特征:最初梳理得到4个方程,对应4个未知量;其中
irc1和ire是两个核心待求真实未知量ib1、ib2的线性组合,其余变量均为电路、器件参数的已知固定量。
异常复现:仅指定核心未知量求解时返回空列表
输入完整4个方程,仅指定求解ib1、ib2两个目标变量时,求解结果为空。对应代码:
ib1, ib2, ire, irc1, rfb, re, vcc, veb1, veb2, rc1, b1, b2 = var('ib1 ib2 ire irc1 rfb re vcc veb1 veb2 rc1 b1 b2') solve([ veb1 == -ib1*rfb + ire*re, vcc == ire*re + veb2 + rc1*irc1, irc1 == b1*ib1 + ib2, ire == (b2+1)*ib2 - ib1 ], ib1, ib2)
代码运行后仅返回空结果:
[]
手动代入消元后的正常求解行为
手动将后两个描述线性关系的方程代入前两个方程,消去irc1和ire变量后再调用求解函数,求解器即可输出正确结果。对应代码:
ib1, ib2, rfb, re, vcc, veb1, veb2, rc1, b1, b2 = var('ib1 ib2 rfb re vcc veb1 veb2 rc1 b1 b2') solve([ veb1 == -ib1*rfb + ((b2+1)*ib2 - ib1)*re, vcc == ((b2+1)*ib2 - ib1)*re + veb2 + rc1*(b1*ib1 + ib2) ], ib1, ib2)
输出的正确结果为:
[[ib1 == ((b2*(vcc - veb2) + vcc - veb2)*re - ((b2 + 1)*re + rc1)*veb1)/((b1*b2*rc1 + (b1 + 1)*rc1)*re + ((b2 + 1)*re + rc1)*rfb), ib2 == (re*(vcc - veb2) + rfb*(vcc - veb2) + (b1*rc1 - re)*veb1)/((b1*b2*rc1 + (b1 + 1)*rc1)*re + ((b2 + 1)*re + rc1)*rfb)]]
另一种可正常求解的触发方式
实际测试发现,如果在待求解变量列表中加入irc1和ire这两个由线性关系定义的衍生未知量,完全相同的4个方程也可以输出正确结果。对应代码:
ib1, ib2, ire, irc1, rfb, re, vcc, veb1, veb2, rc1, b1, b2 = var('ib1 ib2 ire irc1 rfb re vcc veb1 veb2 rc1 b1 b2') solve([ veb1 == -ib1*rfb + ire*re, vcc == ire*re + veb2 + rc1*irc1, irc1 == b1*ib1 + ib2, ire == (b2+1)*ib2 - ib1 ], ib1, ib2, irc1, ire)
运行后返回的完整求解结果为:
[[ib1 == (((b2 + 1)*vcc - (b2 + 1)*veb2)*re - ((b2 + 1)*re + rc1)*veb1)/((b1*(b2 + 1) + 1)*rc1*re + ((b2 + 1)*re + rc1)*rfb), ib2 == (re*(vcc - veb2) + rfb*(vcc - veb2) + (b1*rc1 - re)*veb1)/((b1*(b2 + 1) + 1)*rc1*re + ((b2 + 1)*re + rc1)*rfb), irc1 == -((b1*(b2 + 1) + 1)*re*veb1 - ((b1*(b2 + 1) + 1)*vcc - (b1*(b2 + 1) + 1)*veb2)*re - rfb*(vcc - veb2))/((b1*(b2 + 1) + 1)*rc1*re + ((b2 + 1)*re + rc1)*rfb), ire == ((b1*(b2 + 1) + 1)*rc1*veb1 + ((b2 + 1)*vcc - (b2 + 1)*veb2)*rfb)/((b1*(b2 + 1) + 1)*rc1*re + ((b2 + 1)*re + rc1)*rfb)]]
核心诉求
目前可以通过“把衍生未知量加入求解列表、后续直接丢弃衍生量解”的方式完成计算,但希望明确这种异常现象的产生原因,确认自身在使用Sage求解器时是否存在疏漏或认知误区。
内容的提问来源于stack exchange,提问作者Pedro Lobo
相关产品推荐
相关产品推荐

