我试图解决一个系统的4个指数方程与两个变量。然而,如果我使用fsolve python将只允许我两个使用尽可能多的方程,我有变量。但由于我有无限多的解决方案对(如果只有两个方程被使用),我需要找到一对变量,不仅适合两个,但所有四个方程,fsolve似乎不工作。
我的代码看起来像这样:
from scipy.optimize import fsolve
c_1 = w+(y/(x*R))
c_2 = offset - (c_1/(x*R)) #offset(1.05), w(10) and R(0.35) are constants
def equations(p):
x,y = p
eq1 = (c_1*sp.exp(-y*R*1.017))/(y*R)+c_2-(x*1.017)/(y*R)-(5.1138*2*np.pi)
eq2 = (c_1*sp.exp(-y*R*2.35))/(y*R)+c_2-(x*2.35)/(y*R)-(2.02457*4*np.pi)
eq3 = (c_1*sp.exp(-y*R*2.683))/(y*R)+c_2-(x*2.683)/(y*R)-(6.0842178*4*np.pi)
return (eq1,eq2,eq3)
x, y = fsolve(equations, (1,1))
print (equations((x, y)))
然而,根据我最初的猜测,这会给予我带来非常不同的结果。我现在想编辑这段代码,这样我就可以添加额外的方程,以保证我得到正确的x,y对作为解。简单地添加第三个方程到函数中,当然会返回TypeError,所以我想知道如何才能做到这一点。
1条答案
按热度按时间neekobn81#
要添加任意数量的方程,我不认为你可以使用
fsolve
。只需运行最小二乘最小化,并确保你的向量化正确,而不是死记硬背的重复。下面的运行并生成一个结果,虽然我还没有评估它的准确性。