微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用Python解决6个非线性方程组的问题

如何解决用Python解决6个非线性方程组的问题

我正在尝试使用Python解决由6个非线性方程组成的系统。到目前为止,我已经:

from scipy.optimize import fsolve 
import math 
from numpy import log

ka1 = 1.045
ka2 = 0.1759
ka3 = 0.3159

def equations(p):
    yh2o,yco2,yh2,ych4,yco = p

    return (yh2o + yco2 + yh2 + ych4 + yco - 1,ka1 - (yh2o ** 2)/(yco * (yh2 ** 2),ka2 - (yco ** 2) / yco2,ka3 - ych4 / (yh2 ** 2),0.5 - (2.0 * yco2 + yco + yh2o) / (2 * yh2o + 2 * yh2 + 4 * ych4)))

yh2o,yco = fsolve(equations,[0.2,0.2,0.2])

print(f"yh2o = {yh2o},yco2 = {yco2},yh2 = {yh2},ych4 = {ych4},yco = {yco}")

当我尝试运行此命令时,我会得到

TypeError: fsolve: there is a mismatch between the input and output shape of the 'func' argument 'equations'.Shape should be (5,) but it is (2,).

我尝试更改初始猜测,但错误仍然相同。

我还尝试过将等式更改为多项式:

    return (yh2o + yco2 + yh2 + ych4 + yco - 1.0,ka1 * (yco * (yh2 ** 2.0)) - (yh2o * yh2o),ka2 * (yco2) - (yco ** 2.0),ka3 * (yh2 ** 2.0) - ych4,0.5 * (2.0 * yh2o + 2.0 * yh2 + 4 * ych4) - (2.0 * yco2 + yco + yh2o)) 

但是我说错了

TypeError: can't multiply sequence by non-int of type 'float'

解决方法

我认为您在方程式(返回的元组)中括号(即放置())有问题。

下面是完整的经过纠正的工作代码:

Try it online!

from scipy.optimize import fsolve 
import math 
from numpy import log

ka1 = 1.045
ka2 = 0.1759
ka3 = 0.3159

def equations(p):
    yh2o,yco2,yh2,ych4,yco = p

    return (
        (yh2o + yco2 + yh2 + ych4 + yco - 1),ka1 - (yh2o ** 2) / (yco * (yh2 ** 2)),ka2 - (yco ** 2) / yco2,ka3 - ych4 / (yh2 ** 2),0.5 - (2.0 * yco2 + yco + yh2o) / (2 * yh2o + 2 * yh2 + 4 * ych4)
    )

yh2o,yco = fsolve(equations,[0.2,0.2,0.2])

print(f"yh2o = {yh2o},yco2 = {yco2},yh2 = {yh2},ych4 = {ych4},yco = {yco}")

输出:

yh2o = 0.17829101808889491,yco2 = 0.17513942402710805,yh2 = 0.4163023675952086,ych4 = 0.05474789024926531,yco = 0.1755193000395232

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。