利用Mathematica求博弈、優(yōu)化問題,以及復(fù)雜公式化簡

    很多博弈或者優(yōu)化問題都可以歸結(jié)為求某個(gè)函數(shù)的極值(最大值或者最小值),使用Mathematica可以方便地求解該問題,無論是解析解還是數(shù)值解。求解過程基本可以分為兩步:   

1)原函數(shù)對自變量求一階導(dǎo)并令其為0,然后求解方程。如果是多變量,就要對每個(gè)自變量求導(dǎo)并令其為0,然后聯(lián)立求解;

2)原函數(shù)對自變量求二階導(dǎo)(對于多變量,就是求海森矩陣的值),將第一步得出的解代入。如果二階導(dǎo)大于0,那么就是極小值,如果二階導(dǎo)小于0,那么就是極大值。

需要注意的事項(xiàng)是:如果第一步求得多個(gè)解,那么就需要將所有解代入原函數(shù),然后比較哪個(gè)是真正的最大值或者最小值。

利用Mathematica求博弈、優(yōu)化問題

以下以函數(shù)SigmaP為例:

利用Mathematica求博弈、優(yōu)化問題,以及復(fù)雜公式化簡的圖1

其中,自變量為x和y。當(dāng)函數(shù)比較復(fù)雜的沒有解析解的,可以一樣的數(shù)值求解,無非是用NSolve[]替換Solve[]。

SigmaP對x求導(dǎo)為:

利用Mathematica求博弈、優(yōu)化問題,以及復(fù)雜公式化簡的圖2

由于該模型比較簡化,所以此式比較簡單。如果式子比較復(fù)雜可以加上Simplify[]命令化簡。同樣地,SigmaP對y求導(dǎo)為:

利用Mathematica求博弈、優(yōu)化問題,以及復(fù)雜公式化簡的圖3

令dSigmaPdx=0求得:

利用Mathematica求博弈、優(yōu)化問題,以及復(fù)雜公式化簡的圖4

令dSigmaPdy=0求得:

利用Mathematica求博弈、優(yōu)化問題,以及復(fù)雜公式化簡的圖5

將x代入y,或者將y代入x均可求得x以及y,但是直接聯(lián)立以上兩個(gè)方程求解是更快的一種方法。

聯(lián)立

dSigmaPdx=0

dSigmaPdy=0

求得:

利用Mathematica求博弈、優(yōu)化問題,以及復(fù)雜公式化簡的圖6

利用Mathematica求博弈、優(yōu)化問題,以及復(fù)雜公式化簡的圖7

可以看出有三組解,并且都非常復(fù)雜。可以用Simplify[]命令化簡,但是非常慢,所以下邊介紹一種不常用的方法。

復(fù)雜公式化簡

我們觀察到上圖中有很多重復(fù)的項(xiàng),所以可以對其做代換為(para1和para2可以替換成任意變量):

利用Mathematica求博弈、優(yōu)化問題,以及復(fù)雜公式化簡的圖8

結(jié)果為:

利用Mathematica求博弈、優(yōu)化問題,以及復(fù)雜公式化簡的圖9

我們發(fā)現(xiàn)又出現(xiàn)了一些新的重復(fù)項(xiàng),再將其代換為(para111和para112可以替換成任意變量):

利用Mathematica求博弈、優(yōu)化問題,以及復(fù)雜公式化簡的圖10

結(jié)果為:

利用Mathematica求博弈、優(yōu)化問題,以及復(fù)雜公式化簡的圖11

此時(shí)可以看出公式已經(jīng)相當(dāng)簡化了。這種簡化了的公式是可以寫進(jìn)文章的,像之前那種有幾百項(xiàng)的公式肯定是沒辦法的。

最后必須要將以上的解代入二階導(dǎo),才能確定解是原函數(shù)的最大值還是最小值。二階導(dǎo)也可以做上面的代換:

利用Mathematica求博弈、優(yōu)化問題,以及復(fù)雜公式化簡的圖12

最后,有相關(guān)需求歡迎聯(lián)系我們.

微信:CAE320

微信公眾號:320科技工作室

登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP

1