好吧,樓主經過努力的調試找BUG,終於可以給大家寫這個下篇了,爲了驗證Dogleg算法對於一般的函數也管用,樓主把優化的函數換成了
y = (x1-1)*(x1-2)*(x1-3)*(x1-4) + (x2-1)*(x2-2)*(x2-3)*(x2-4);
然後,很神奇,不論我怎麼調試,結果都是很差很差,而且算法定的方向是原理最小值點的,這讓我非常的困惑。
經過不斷地調試和思考以及查看
………………
………………
………………
終於……
特麼的我發現原來是我梯度函數的+號寫成了*號!
由此告誡諸位,如果結果跟預想差太多……應該就是……代碼細節寫錯了= =!~!
Dogleg算法的收斂速度還是極好的,對於這個函數從[1000,1000]這個量級的點開始搜索只需要迭代20步左右!就可以找到極小值。