python實(shí)現(xiàn)最速下降法
本文實(shí)例為大家分享了python實(shí)現(xiàn)最速下降法的具體代碼,供大家參考,具體內(nèi)容如下
代碼:
from sympy import *import numpy as npdef backtracking_line_search(f,df,x,x_k,p_k,alpha0): rho=0.5 c=10**-4 alpha=alpha0 replacements1=zip(x,x_k) replacements2=zip(x,x_k+alpha*p_k) f_k=f.subs(replacements1) df_p=np.dot([df_.subs(replacements1) for df_ in df],p_k) while f.subs(replacements2)>f_k+c*alpha*df_p: alpha=rho*alpha replacements2 = zip(x, x_k +alpha * p_k) return alphadef stepest_line_search(f,x,x0,alpha0): df = [diff(f, x_) for x_ in x] x_k=x0 alpha=alpha0 replacements=zip(x,x_k) len_df = sqrt(np.sum([df_.subs(replacements) ** 2 for df_ in df])) while len_df>1e-6: p_k=-1*np.array([df_.subs(replacements) for df_ in df]) alpha = backtracking_line_search(f, df, x, x_k, p_k, alpha) x_k=x_k+alpha*p_k replacements = zip(x, x_k) len_df=np.sum([df_.subs(replacements)**2 for df_ in df]) return x_kif __name__=='__main__': init_printing(use_unicode=True) x1 = symbols('x1') x2 = symbols('x2') x = np.array([x1, x2]) f = 100 * (x2 - x1 ** 2)**2 + (1 - x1) ** 2 ans=stepest_line_search(f, x, np.array([1.2, 1]), 1) print 'the minimal value in point:',ans
分析:
這個(gè)采用的是backtracking line search來(lái)尋找alpha。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. python用pyecharts實(shí)現(xiàn)地圖數(shù)據(jù)可視化2. python+requests+pytest接口自動(dòng)化的實(shí)現(xiàn)示例3. 使用Spry輕松將XML數(shù)據(jù)顯示到HTML頁(yè)的方法4. 詳解Python 3.10 中的新功能和變化5. npm下載慢或下載失敗問(wèn)題解決的三種方法6. ASP編碼必備的8條原則7. Python中re模塊的常用方法總結(jié)8. python基于opencv批量生成驗(yàn)證碼的示例9. ASP錯(cuò)誤捕獲的幾種常規(guī)處理方式10. 如何用python開(kāi)發(fā)Zeroc Ice應(yīng)用
