李 娜
(長春建筑學院基礎(chǔ)教學部,吉林 長春 130607)
在實際生產(chǎn)和生活中有很多問題都涉及到函數(shù)的最值和極值.利用高階偏導數(shù)或?qū)嵍涡屠碚撉蠼舛嘣瘮?shù)的極值,這種方法理論上對函數(shù)要求較高,并且計算過程繁難。MATLAB具有強大的計算和作圖功能,可以幫我們方便快捷的解決極值問題。
如果函數(shù)是可導的,我們可以用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)
輸出為偏導函數(shù)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
得到四個駐點的坐標,
然后輸入下面的命令,把函數(shù)的等高線的圖形畫出來(圖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)
輸出如圖,因為在兩個極值點附近,函數(shù)的等高線是封閉的,在鞍點附近,等高線不封閉,從而可判斷極值點是(-3,2),(1,0).
注:此法的缺點是無法判斷不可導點是極值的情形.
若函數(shù)高度非線性,沒有導數(shù)或者導數(shù)很難計算的情況,可以采用直接搜索法。先觀察圖形,給定一個初始點,同時設(shè)定一定的步長和搜索方向,就能對問題的參數(shù)進行更新,使得函數(shù)值變小(大),常用的直接搜索法有單純性法、最速下降法等.見例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
注:此法的缺點是初始點的選擇問題,還有可能不能求出全部的極值點.