求解方程组时的结果不同

时间:2018-02-09 13:11:05

标签: python excel solver equation-solving

我一直在尝试用Python解决方程组并在Excel中检查解决方案。

python代码如下:

from sympy import Symbol, solvers
a = Symbol('a', real=True)
b = Symbol('b', real=True)
c = Symbol('c', real=True)
d = Symbol('d', real=True)
Dy = Symbol('Dy', real=True)
Du = Symbol('Du', real=True)
Ay = Symbol('Ay', real=True)
Au = Symbol('Au', real=True)

f1 = -a*(Dy)**3+b*(Dy)**2+c*Dy+d-Ay
f2 = -a*(Du)**3+b*(Du)**2+c*Du+d-Au
f3 = -3*a*(Dy)**2+2*b*Dy+c-Ay/Dy
f4 = -3*a*(Du)**2+2*b*Du+c

print(solvers.solve((f1, f2, f3, f4), (a, b, c, d)))

然后我在Excel中使用了(a,b,c,d)的等式并绘制了曲线。 我可以看到曲线不符合我的预期(x=Dyx=Du)。 因此,我要求Python为(a,b,c,d)的已知值输出(Dy,Ay,Du,Au)的值。

我从Python获得的值与Excel中的值非常不同:

a= (2*Au*Dy - Ay*Du - Ay*Dy)/(Dy*(Du**3 - 3*Du**2*Dy + 3*Du*Dy**2 - Dy**3))
c= Du*(-6*Au*Dy**2 + Ay*Du**2 + Ay*Du*Dy + 4*Ay*Dy**2)/(Dy*(Du**3 - 3*Du**2*Dy + 3*Du*Dy**2 - Dy**3))
b= (3*Au*Du*Dy + 3*Au*Dy**2 - 2*Ay*Du**2 - 2*Ay*Du*Dy - 2*Ay*Dy**2)/(Dy*(Du**3 - 3*Du**2*Dy + 3*Du*Dy**2 - Dy**3))
d= Dy*(3*Au*Du*Dy - Au*Dy**2 - 2*Ay*Du**2)/(Du**3 - 3*Du**2*Dy + 3*Du*Dy**2 - Dy**3)

Dy = 0.05
Du = 0.5
Ay = 0.2
Au = 1.5

print((a, b, c, d))

的Python :     (8.779149519890263,2.798353909465018,3.786008230452675,0.004801097393689983)

Excel中:     (148.1481481,22.22222222,8.888888889,0.018518519)

肯定一定是一个简单的错误,但我找不到它。在Excel中,我使用"命名范围"并从Python粘贴公式以避免编写错误。

0 个答案:

没有答案