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