python - 联立方程求解器,4 个方程 4 个未知数

标签 python

尝试求解由 4 个方程和 4 个未知数组成的系统。不断收到“函数调用的结果不是正确的 float 组”的错误。我是 python 新手,所以我认为问题出在我对方程的定义中。

我尝试过 fsolve、sympy.solve,以及带定义和不带定义的方法。

L0_fcc = 5200
L0_bct = 12000
L0_l = 4700
R = 8.3144

def equations(p):
        t, XSnl, XSnfcc, XSnbct = p

        GPb_fcc_bct = 489 + 3.52 * t
        GPb_fcc_l = 4810 - 8.017 * t

        GSn_bct_fcc = 5510 - 8.46 * t
        GSn_bct_l = 7179 - 14.216 * t
        GSn_fcc_l = 1661 - 5.756 * t

        E1 = sp.Eq(GPb_fcc_l + R * t * sp.log((1-XSnl)/(1-XSnfcc)) + L0_l * (XSnl**2) - L0_fcc * (XSnfcc**2))
        E2 = sp.Eq(GPb_fcc_bct + R * t * sp.log((1-XSnbct)/(1-XSnfcc)) + L0_bct * (XSnbct**2) - L0_fcc * (XSnfcc**2))
        E3 = sp.Eq(GSn_fcc_l + R * t * sp.log(XSnl/XSnfcc) + L0_l * ((1-XSnl)**2) - L0_fcc * ((1-XSnfcc)**2))
        E4 = sp.Eq(GSn_bct_l + R * t * sp.log(XSnl/XSnbct) + L0_l * ((1-XSnl)**2) - L0_bct * ((1-XSnbct)**2))
        return (E1, E2, E3, E4)


x0 = [300, 0, 0, 0]
t, XSnl, XSnfcc, XSnbct = fsolve(equations, x0)
print(t, XSnl, XSnfcc, XSnbct)`

它应该输出 4 个值,其中 3 个值应该在 0 到 1 之间。我收到“函数调用的结果不是正确的 float 组”

最佳答案

我不确定为什么您会期望 sympy 对象与 scipy 求解器交互,它们是完全不同的库。前者是符号对象,后者是数值分析。

解决方案只需将以下几行更改为:

E1 = (GPb_fcc_l + R * t * np.log((1-XSnl)/(1-XSnfcc)) + L0_l * (XSnl**2) - L0_fcc * (XSnfcc**2))
E2 = (GPb_fcc_bct + R * t * np.log((1-XSnbct)/(1-XSnfcc)) + L0_bct * (XSnbct**2) - L0_fcc * (XSnfcc**2))
E3 = (GSn_fcc_l + R * t * np.log(XSnl/XSnfcc) + L0_l * ((1-XSnl)**2) - L0_fcc * ((1-XSnfcc)**2))
E4 = (GSn_bct_l + R * t * np.log(XSnl/XSnbct) + L0_l * ((1-XSnl)**2) - L0_bct * ((1-XSnbct)**2))
return (E1, E2, E3, E4)

现在,这会产生一个 RuntimeWarning: invalid value returned in long_scalars 和一个 RuntimeWarning:divide by Zero met in double_scalars 以及最后一个 RuntimeWarning: The iteration is根据最近十次迭代的改进来衡量,没有取得良好的进展。但这是一个算法错误,您必须自己解决。

(几乎可以肯定,起始条件很糟糕,因为第一次迭代时存在 XSnl/XSnfcc == 0/0 项)

寻找方程的数值解通常更像是一门艺术而不是一门科学。

关于python - 联立方程求解器,4 个方程 4 个未知数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56781761/

相关文章:

python - 创建一个可调用函数来生成 django 模型中的属性值

python - 从 GitHub Actions 中的 conda 环境运行时找不到 pytest

python - matplotlib 的日期时间问题

python - 要将 Turbolinks 5 与 Django 一起使用,如何在使用 redirect() 时自动包含 Turbolinks-Location header ?

python - 在 python 中使用 C 扩展,而不将其安装为模块

python - 在 GraphViz 中创建边和节点之间的连接线

python - 为多个分类编辑 tensorflow inceptionV3 retraining-example.py

python - 如何判断文件是否是给定目录的后代?

python - 如何根据色标给 voronoi 上色?以及每个单元格的面积

python - 返回上个月的日期时间对象