李 娜
(長春建筑學院基礎教學部,吉林 長春 130607)
在實際生產和生活中有很多問題都涉及到函數的最值和極值.利用高階偏導數或實二次型理論求解多元函數的極值,這種方法理論上對函數要求較高,并且計算過程繁難。MATLAB具有強大的計算和作圖功能,可以幫我們方便快捷的解決極值問題。
如果函數是可導的,我們可以用MATLAB命令先找到駐點,然后再利用等高線找出極值點,求出極值。具體的過程見例1
例1 求 f(x,y)=x3-y3+3x2+3y2-9x 的極值
輸入:Syms x y f=’x^3-y^3+3*x^2+3*y^2-9*x’;fx=diff(f,x)fy=diff(f,y)
輸出為偏導函數fx=3*x^2+6*x-9 fy=-3*y^2+6*y
再用解方程組的命令求出駐點
[x y]=solve(’3*x^2+6*x-9=0’,’-3*y^2+6*y=0’)
x=1-3 1-3 y=0 0 2 2

得到四個駐點的坐標,
然后輸入下面的命令,把函數的等高線的圖形畫出來(圖1)
〉 〉 [x,y]=meshgrid(-5∶0.1∶3,-3∶0.1∶5);
z=x.^3-y.^3+3*x.^2+3*y.^2-9*x;
〉 〉 contour(x,y,z,20)
輸出如圖,因為在兩個極值點附近,函數的等高線是封閉的,在鞍點附近,等高線不封閉,從而可判斷極值點是(-3,2),(1,0).
注:此法的缺點是無法判斷不可導點是極值的情形.
若函數高度非線性,沒有導數或者導數很難計算的情況,可以采用直接搜索法。先觀察圖形,給定一個初始點,同時設定一定的步長和搜索方向,就能對問題的參數進行更新,使得函數值變?。ù螅?,常用的直接搜索法有單純性法、最速下降法等.見例2
例 2 求 f(x1,x2)=(x1-x22)2+(1-x2)2的極值
輸入 ezmesh(’(x-y)^2+(1-y)^2’),畫出圖形(圖 2),觀察可能的極值點在(0,1)附近,

所以以(0,1)為初始點,進行搜索求極值點
x=fminunc(@(x) (x(1)-x(2))^2+(1-x(2))^2,[0;1])
x=1.0000 1.0000
注:此法的缺點是初始點的選擇問題,還有可能不能求出全部的極值點.