# 最佳化設計筆記 CH2 牛頓法 ## 牛頓法概念 牛頓最先想到優化一個方程式的方法,就是用他創建的微積分體系,雖然說微分很容易遇到區域性極值的問題(這在後續章節會提及),但先讓我們專注在一些比較簡單的案例 首先,假設現在有一個由彈簧、質量塊、阻尼組成的震盪系統,並且這樣的裝置有兩組,兩組之間的質量塊被我們用一條具有定量撓性的繩子牽在一起。當A質量塊在震盪時,B質量塊的震盪也會受其影響 現在有一個研究生想記錄下這兩組震盪裝置之間,其每組質量塊的震盪高度關係,與分析出最穩定的震盪組合是長怎麼樣子的,於是進行了以下猜測: 1. AB質量塊有彈簧、阻尼,可以使用合力公式將位置(x)、速度(dx)、加速度(dx^2)的方法將其寫成 A: 0 = (m1)s^2 + (c1)s + k1 B: 0 = (m2)s^2 + (c2)s + k2 **s = dx/dt s^2 = d(x^2) / (d^2)t** 2. 但兩組裝置並非獨立運行,所以合力公式需要作出修改,將其整合到一起,經過些許測量後得到結論,他們之間的位置相對關係應該更接近以下公式 0 = s1^2 + 10*s2^2 - 6*s1 + 4*s2 **注意,這裡的系統被整合到一起了,但左側依舊是0,因為這是合力為0的假設,畢竟這本質上還是一個具有初始值,等待其穩定運動的靜置機械系統** 3. 研究生最這個系統進行猜測,是不是將這兩個系統先拿到相同高度,並同時施放,他們就會慢慢的從原本混亂、無序的運動趨於穩定運動呢?於是進行了更進一步的假設 a. 這個系統的兩組質量塊,無論初始高度在哪,最後都會如同公式的描述和合力為0的前提下趨於穩定運動 b. 穩定運動就代表著這個公式構建出的數學空間圖上,具有一個或多個極值,會讓所有運算在做出迭代運算時向其移動。也就是空間有凹洞,會讓所有小球往洞裡滾 c. 由這個洞底部的數值,可以判斷它就是這組系統的【穩態解】,符合我們的a假設 ## MATLAB 延續先前的假設,這位研究生想知道他的公式會怎麼運作,於是寫了以下程式碼 ![image](https://hackmd.io/_uploads/BkHSdpRq1x.png) ![image](https://hackmd.io/_uploads/BkvmRp0q1x.png) ![image](https://hackmd.io/_uploads/HJ1r0pC9ye.png) ![image](https://hackmd.io/_uploads/B1QIApAqyx.png) ![image](https://hackmd.io/_uploads/SykdCT05kl.png) ## 實驗結論 由程式碼可以知道,確實有一個凹洞,也確實所有的「球」都會慢慢的在迭代的過程中滾下去,於是他判斷,這組機械系統確實會自行趨於穩態,而且我們還能知道其穩態時的數據 ## 魔法函數 海森矩陣與牛頓法公式 ![image](https://hackmd.io/_uploads/rkZcS0A51g.png) 初見殺的公式,不難發現這條簡單的公式卻執行了最重要的「迭代」工作,但實際上也不難發現,他和我們高中就見過的一條公式非常像,也就是「克拉瑪」 ![image](https://hackmd.io/_uploads/S1WE8AC9kl.png) 稍微將克拉瑪的聯立方程式寫成矩陣形式就可以得到: ![image](https://hackmd.io/_uploads/BJP5IRA91l.png) 我們會發現到一個非常有趣的特性,聯立方程式的解x y居然可以將矩陣A(abcd)的反矩陣放到右側[e f]前,達到我們求解的效果(不信你試試),這樣矩陣的逆運算就成功解決掉了複雜的二元方程式問題 而海森矩陣也是同理,我們將這條複雜的二元二次方程式進行偏微分和二次偏微分時,也會炸出相當多條的公式組合,此時如同克拉瑪的解決方法一樣,把相對來說較為麻煩的偏微分係數整理成一個【對稱矩陣】([詳見機器人學章節5.4](/mXkzhO86RmagXkYi5V9e-g))就可以將一大坨複雜的公式,整理成相對來說簡短、乾淨的加減法 ![image](https://hackmd.io/_uploads/SkLydCC9ke.png) 不過這裡不方便針對海森矩陣進行證明(很長),只對海森矩陣的具體用法進行說明。首先可以看到,海森矩陣G的g11是針對參數x1的二次偏微分,其對角線則是x2的二次偏微分,右上角是**先微x1、再微x2**,左下角是**先微x2、再微x1**。要注意,偏微分在特定情況下,微分的順序是有影響的(儘管99%我們能遇到的情況都是相同的) 再來,這裡的參數剛好是兩個(x1, x2),但也有可能會遇到多組參數的情況,此時就要針對海森矩陣進行擴增(2* 2 -> 3* 3 -> 4* 4 .....),其運算方法不變。至此這條公式最難的部分就被破解了,剩下的都是簡單的矩陣運算 ## 結語 線性代數與矩陣空間 從牛頓法不難發現,我們所做的就是利用參數1、參數2、參數3....建立出一個數學圖形。或準確的說,將每個參數輸入某種數值,並把各項參數互相加總的結果畫到3D圖形上,最後透過一點點修改數值的方法找到這個圖形的極值 這樣的分析方法在早期的自動控制領域中常常搭配拉普拉斯轉換一起進行(用來分析機械系統的運度軌跡),不過到了其他領域就得回到基本分析了,也就是線性空間 一個線性空間要能設計出這樣既需要偏微分,又需要迭代運算的功能,需要我們保證各項參數之間的「線性獨立」,也就是不能有無效參數,任何一個無效的參數都會無情的摧毀這個完美的架構。這導致我們使用牛頓法的手段非常有限,初始公式相對其他最佳化方法,需要更完整、更一眼到頭,而且還需要面對當這個線性空間是凹向上,或有多組區域極值時的情況 當然,牛頓法只是帶給我們一種線性空間的架構模式,後續還有更方便的做法,比如電磁學中針對電場分析時,會用到梯度、旋度分析,這也是一種修正方法,能讓分析者能更全面的分析數學空間的較佳解