根據我看過的材料來說 ,求最值(極值)無非有下面幾種情況。
這裡有必要介紹下内聯函數,c++也有,應該說好多程式設計語言都有。
在matlab指令視窗、程式或函數中建立局部函數時,可用inline。優點是不必将其儲存為一個單獨檔案。
在運用中有幾點限制:不能調用另一個inline函數,隻能由一個matlab表達式組成,并且隻能傳回一個變量—顯然不允許[u,v]這種形式。
因而,任何要求邏輯運算或乘法運算以求得最終結果的場合,都不能應用inline。
除了這些限制,在許多情況下使用該函數非常友善。
Inline函數的一般形式為:
如:(求解F(x)=x^2*cos(a*x)-b ,a,b是标量;x是向量 )
在指令視窗輸入:
系統輸出為:g=-1.5483 -1.7259
*****************************************************
feval函數的最通常的應用是以下形式:
舉個簡單的例子:
比如要計算sin(2),當然可以直接用指令
利用feval,還可以這樣來做:
另外這裡的函數名字還可以是一個函數句柄,即h=@sin;
或者,直接寫成
比如說y=x^3+x^2+1,怎樣用matlab來算它的極值和最大值?
極值有兩點。
在規定範圍内的最大值是1.1481
由于函數的局限性,求出的極值可能是局部最小(大)值。
求全局最值要用遺傳算法。
注:此處@的用法
函數句柄
匿名函數
這是函數句柄的一種進階用法, 這樣産生的函數句柄變量不指向特定的函數, 而是一個函數表達式. 其文法:
變量名=@(輸入參數清單)運算表達式
例如, 前面那個計算變量平方的函數可以簡單地寫為這個匿名函數:
mysqr1=@(x)x.*x
之後, 執行mysqr1(變量名), 即可計算該變量的平方, 注意, mysqr1屬性是函數句柄變量, 而不是這個表達式; 還有要注意這個表達式不需要用單引号括起來
注:
fminunc 用法,找不到百度,就寫英文的了
fminunc finds a local minimum of a function of several variables.
X = fminunc(FUN,X0) starts at X0 and attempts to find a local minimizer
X of the function FUN. FUN accepts input X and returns a scalar
function value F evaluated at X. X0 can be a scalar, vector or matrix.
列如
f=5+1350*(1-x)^(2.9)+1350*x^3*((1-y)^(2.9)-(1-x)^(2.9))+135*y^3*(1-10*(1-y^(2.9)));
其中0.8<x<1,0.6<y<0.8
matlab程式
結果為

其實還有其他方法,這裡複制來一個連接配接,用求導法的
http://blog.sina.com.cn/s/blog_5d4cce1b0100l595.html
O(∩_∩)O~