本章涉及知識(shí)點(diǎn)
1、scipy庫(kù)求解全局最優(yōu)和局最優(yōu)
2涉波、多元函數(shù)的極值求解算法
3、牛頓迭代法算法
4啤覆、牛頓迭代法求解多元函數(shù)的駐點(diǎn)
在金融學(xué)和經(jīng)濟(jì)學(xué)中苍日,凸優(yōu)化起著非常重要的作用窗声,而研究凸優(yōu)化求解其極值是一個(gè)非常有趣的數(shù)學(xué)問(wèn)題
我們用一個(gè)案例來(lái)研究無(wú)約束凸優(yōu)化算法,假設(shè)有如下二元目標(biāo)函數(shù)
一笨觅、scipy庫(kù)求解全局最優(yōu)和局最優(yōu)
我們先用numpy生成50個(gè)二維網(wǎng)格點(diǎn)即對(duì)應(yīng)的f(x,y)
畫出f(x杀糯,y)的圖像觀察
顯然從圖像上可以直觀看出,函數(shù)存在多個(gè)局部極小值炮温。我們通過(guò)scipy庫(kù)封裝好的brute和fmin兩個(gè)工具函數(shù)來(lái)求解目標(biāo)函數(shù)的極值
scipy的brute函數(shù)以參數(shù)范圍和參數(shù)移動(dòng)的步距作為輸入火脉,我們分別以[-10,10]為參數(shù)范圍柒啤,5和0.1為不同的參數(shù)移動(dòng)步距來(lái)求解極值
可以看到在[-10担巩,10]區(qū)間里方援,brute函數(shù)求解多元函數(shù)的駐點(diǎn)大概在x=y=-1.4,此時(shí)的極值為-1.7749
我們?cè)倮胒min函數(shù)求解在初始值為x=y=-1.4時(shí)函數(shù)的局部最優(yōu)解涛癌,fmin函數(shù)以需要最小化的函數(shù)和起始參數(shù)值作為輸入犯戏,將brute函數(shù)求解出的駐點(diǎn)帶入fmin
可以看到fmin在brute的基礎(chǔ)上求解出更低的函數(shù)值,可以看到拳话,在求解凸優(yōu)化問(wèn)題中先匪,建議在使用局部?jī)?yōu)化之前先進(jìn)行全局優(yōu)化,防止求解過(guò)程陷入某個(gè)局部最優(yōu)解(盆地跳躍)
二弃衍、多元函數(shù)的極值求解算法
上述我們使用了python的scipy庫(kù)封裝好的方法呀非,來(lái)求解出多元函數(shù)的極值,下面我們來(lái)分析求解多元函數(shù)極值的純數(shù)學(xué)算法
一般地,我們把具有二階偏導(dǎo)數(shù)的函數(shù)z=f(x岸裙,y)猖败,其求解極值的算法描述如下:
第1步:求出目標(biāo)函數(shù)關(guān)于x和y的一階偏導(dǎo)數(shù),得到一切駐點(diǎn)
第2步:求出目標(biāo)函數(shù) 關(guān)于x和y的二階偏導(dǎo)數(shù)降允,并分別帶入駐點(diǎn)求出其 二階偏導(dǎo)數(shù)的值A(chǔ)恩闻、B和C
第3步:根據(jù)A*C-B*B的符號(hào),判斷是否存在極值剧董,是極大值還是極小值
????????????(1):A*C-B*B>0時(shí)幢尚,具有極值,且當(dāng)A>0時(shí)存在極大值翅楼,當(dāng)A<0時(shí)存在極小值
????????????(2): A*C-B*B<0時(shí)侠草,沒(méi)有極值
????????????(3):?A*C-B*B=0時(shí),可能有極值犁嗅,也可能沒(méi)有極值
三、牛頓迭代法
有了上述數(shù)學(xué)算法晤碘,我們對(duì)目標(biāo)函數(shù)來(lái)求一階偏導(dǎo)數(shù)
上式存在一個(gè)問(wèn)題褂微,要直接計(jì)算出一階偏導(dǎo)數(shù)為0對(duì)應(yīng)的x,則求解難度非常大园爷,因?yàn)槭阶又邪薱os函數(shù),而cos的泰勒展開式為
這是由n個(gè)多項(xiàng)式組成求厕,所以我們只能利用逼近法的思路扰楼,來(lái)近似求解,比如牛頓迭代法
設(shè)曲線L=f(x)项栏,則L上任意一點(diǎn)x0對(duì)應(yīng)的切線方程為
令y=0蹬竖,解出切線與x軸的交點(diǎn)的橫坐標(biāo)x1為
從圖上可以看出x1越發(fā)靠近曲線L的真實(shí)解,如此迭代下去列另,在點(diǎn)(xn-1旦装,f(xn-1))作切線,可以得到L根的近似值為
四拷姿、牛頓迭代法求解多元函數(shù)的駐點(diǎn)
有了牛頓迭代法的公式,下面我們來(lái)解目標(biāo)函數(shù)關(guān)于x的一階偏導(dǎo)數(shù)cosx+0.1x=0的根(求解y同理)响巢,其一階導(dǎo)數(shù)為-sinx+0.1,迭代出駐點(diǎn)后帶入目標(biāo)函數(shù)即可求出其極值
從結(jié)果上看和scipy庫(kù)計(jì)算出來(lái)的極值非常接近含长,其本質(zhì)就是求解多元函數(shù)極值的算法