天天看點

matlab求最值(極值)

 根據我看過的材料來說 ,求最值(極值)無非有下面幾種情況。

這裡有必要介紹下内聯函數,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程式

結果為

matlab求最值(極值)

其實還有其他方法,這裡複制來一個連接配接,用求導法的

http://blog.sina.com.cn/s/blog_5d4cce1b0100l595.html

O(∩_∩)O~ 

繼續閱讀