簡體   English   中英

用fsolve求解非線性系統

[英]solving nonlinear system with fsolve

我有這種類型的系統:

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

其中x,a和b為未知數。 像下面的示例一樣設置/解決是否正確?

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.])}

如果是這樣,如何獲得fsolve以返回兩個根,如圖所示? γ解決方案圖

提前致謝!

如果將起點設置為-2而不是零,它將找到左根。 如果使用[-2., 0]代替,則返回兩個根(請參見此答案 ):

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

困難的問題是如何選擇起點...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM