Python 求和中的一个变量
嗨,我试着用sympy来解一个变量(x),在下面的等式中: 其中s_calc为: 因此,mkt为3.60 SP,如下所示 以下是Excel中通过猜测手动计算的结果,其中x近似为3.84(这是我试图确定的): s_计算值为8.5=>3.84/((8.5-1)+3.84)=0.34 结果是:Python 求和中的一个变量,python,math,scipy,sympy,Python,Math,Scipy,Sympy,嗨,我试着用sympy来解一个变量(x),在下面的等式中: 其中s_calc为: 因此,mkt为3.60 SP,如下所示 以下是Excel中通过猜测手动计算的结果,其中x近似为3.84(这是我试图确定的): s_计算值为8.5=>3.84/((8.5-1)+3.84)=0.34 结果是: [-56.0760097663833, -28.2321104629407, -19.2596055912120, -16.2599057021677, -11.1953370291770, -
[-56.0760097663833,
-28.2321104629407,
-19.2596055912120,
-16.2599057021677,
-11.1953370291770,
-8.53265746170317,
-7.27171869196792,
-6.44292213715154,
-5.20607622713613,
-4.24324047973505,
-3.74708311709209,
0.0]
它不仅给了我一个值列表,这些值与我计算出的x的值3.84不同。此外,solve的计算相当繁重,需要15秒才能得到这些结果
我希望有人能给我指引正确的方向。Symphy中的函数solve()目前被重写为solveset(),将来solve可能会被弃用
无论如何,使用solveset():
值3.83749333787992是解决方案之一(看起来有点像您的3.84)
否则,由于您的方程只有一个符号变量,其余为数值变量,您可以尝试对表达式进行lambdify,并使用scipy
中的工具:
In [25]: eqfunc = lambdify(x, eqn.lhs - eqn.rhs)
In [26]: import scipy.optimize
In [28]: scipy.optimize.broyden1(eqfunc, [3.84])
Out[28]: array([ 3.83749334])
In [13]: solveset(eqn, x)
Out[13]:
{-54.9173331680142, -27.8044066980778, -19.1811507147424, -15.7703025652324,
-11.0087893729661, -8.45970674653321, -7.25698321320126, -6.38855281836353,
-5.07892647766187, -4.21937087225829, -3.73292307178124, 3.83749333787992}
In [25]: eqfunc = lambdify(x, eqn.lhs - eqn.rhs)
In [26]: import scipy.optimize
In [28]: scipy.optimize.broyden1(eqfunc, [3.84])
Out[28]: array([ 3.83749334])