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

2024-05-20 01:32:19 发布

您现在位置:Python中文网/ 问答频道 /正文

试图解一个由4个方程和4个未知数组成的系统。不断获取“函数调用的结果不是正确的浮点数组”的错误。我是python的新手,所以我认为问题出在我对等式的定义上。你知道吗

我试过解决问题,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之间。我得到的是“函数调用的结果不是正确的浮点数组”


Tags: log定义数组sp浮点eq函数调用fcc
1条回答
网友
1楼 · 发布于 2024-05-20 01:32:19

我不知道为什么你会期望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 encountered in long_scalarsRuntimeWarning: divide by zero encountered in double_scalars,最后是RuntimeWarning: The iteration is not making good progress, as measured by the improvement from the last ten iterations.,但这是一个算法错误,你必须自己解决。你知道吗

(因为在第一次迭代中有一个XSnl/XSnfcc == 0/0项,所以几乎可以肯定这是一个糟糕的开始条件)

寻找方程的数值解往往是一门艺术而不是一门科学。你知道吗

相关问题 更多 >