我一直在尝试用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=Dy
和x=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粘贴公式以避免编写错误。