使用 fsolve 在 Python 中求解三次方程 - 仅获得一个根

计算科学 Python
2021-12-25 05:57:16

我正在尝试在 Python 中求解三次方程。然而,我只得到了等式的一个根。请在下面找到代码片段。

import numpy as np

from scipy import optimize as op

def my_func(p):

    k = 0.17
    d = 3e-6 
    A = 1.6e-9 
    epsilon = 8.85e-12 
    Vspi = np.sqrt((8*k*np.power(d,3))/(27*epsilon*A)) 

    Vdc = 0.2 * Vspi

    xeq = p
    F = (k*np.power(xeq,3))-(2*k*d*np.power(xeq,2))+(2*k*np.power(d,2)*xeq)-(epsilon*A*np.power(Vdc,2))
    return F

zguess = 0.5e-6

z = op.fsolve(my_func,zguess)

print(z)

错误是什么?我应该得到三个根。

问候, 拉古

1个回答

由于您使用从初始猜测开始的数值求解器,因此该算法将为您提供找到的第一个解决方案。您应该从对根的正确猜测开始运行该算法三次,以便找到所有三个根。

或者,既然您正在寻找多项式的根,为什么不直接使用 numpy.roots?这应该给你所有的根源。有关详细信息,请参阅此链接