用fsolve求解非线性系统

时间:2018-08-08 08:36:12

标签: python scipy nonlinear-optimization

我有这种类型的系统:

DictReader

,其中x,a和b为未知数。 像下面的示例一样设置/解决是否正确?

a = alpha(x,k)  
b = beta(x,k,alpha)  
gamma(x,k,a,b) = 0

打印出来的

k=1.5
def gamma(x,k):
    def alpha(x,k):
        return (x-k)**3
    def beta(x, f1):
        return x + f1(x,k)
    return x**2 - alpha(x,k) - beta(x, alpha)*x
x, info, flag, msg = fsolve(gamma, 0., args=(k), full_output=True)
print x
print info
xp = np.linspace(-5, 5)
yp = [gamma(xx, k) for xx in xp]
plt.plot(xp, yp, '.-b')
plt.grid()

如果是这样,如何获得[1.49999677] {'qtf': array([-8.8817842e-16]), 'nfev': 44, 'r': array([2.57880614e-10]), 'fjac': array([[-1.]]), 'fvec': array([0.])} 以返回两个根,如图所示? graph of solutions from gamma

谢谢!

1 个答案:

答案 0 :(得分:0)

如果将起点设置为-2而不是零,它将找到左根。如果您使用[-2., 0]代替fsolve,则返回两个根(请参阅此answer):

x, info, flag, msg = fsolve(gamma, [-2., 0], args=(k), full_output=True)
print(x)
# [-1.          1.49999586]

困难的问题是如何选择起点...