首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解欠定的线性方程组是可能的吗?(最好使用SymPy)

解欠定的线性方程组是可能的吗?(最好使用SymPy)
EN

Stack Overflow用户
提问于 2017-03-22 11:38:14
回答 1查看 563关注 0票数 1

我在试着写一个平衡化学方程式的脚本。我正在用光合作用反应测试它:

CO2 + H2O -> C6H12O6 + O2

作为Python表达式:

代码语言:javascript
复制
a0*(C+2*O) + a1*(2*H+O) = b0*(6*C+12*H+6*O) + b1*(2*O)

作为SymPy表达式:

代码语言:javascript
复制
Eq(a0*(2*H + O) + a1*(C + 2*O), 2*O*b1 + b0*(6*C + 2*H + 6*O))

代码语言:javascript
复制
a0*(2*H + O) + a1*(C + 2*O) - (2*O*b1 + b0*(6*C + 2*H + 6*O))

'H‘、'C’和'O‘是代表原子的SymPy符号。

'a0‘、'a1’、'b0‘和'b1’是代表分子系数的SymPy符号。

如何求解'a0‘、'a1’、'b0‘和'b1’,使'H‘、'C’和'O‘的系数在反应的左右两侧相等?此外,有无限数量的解决方案,所以我如何指定最低的正解?

EN

回答 1

Stack Overflow用户

发布于 2017-03-22 11:53:00

由于解空间是一维的,并且系统是齐次的,因此您可以从描述系统的矩阵的零空间中读取最小整数解。下面是如何使用渐近得到空空间(矩阵的行对应于C,O,H,列对应于a0,a1,b0,b1):

代码语言:javascript
复制
m = sympy.Matrix([[1, 0, -6, 0], [2, 1, -6, -2], [0, 2, -12, 0]])
n, = m.nullspace()
n / functools.reduce(sympy.gcd, n.T)
# Matrix([
# [6],
# [6],
# [1],
# [6]])

所以最小整数解是a0 = 6,a1 = 6,b0 = 1,b1 =6

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42942303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档