求極值點我現在知道有兩種方法:
建立一個fun.m文件:
function fx=fun(x)
fx=sin(x)
然后在命令窗口中調用:
z=fmax('fun',[0,pi/2])%同樣的函數還有z=fmin('fun',...[0,pi/2]),z=fzero('fun',0.5).z=fsolve('fun',x0,option)...
方程組求解,x0是求根過程的初值。
第二種方法:
a=0:pi/10:2*pi;
b=sin(a);
h=plot(a,b);
x=get(h,'xdata');%獲得句柄為h的x數據
y=get(h,'ydata');
imax=find(max(y)==y);%找出y最大值的下標
text(x(imax),y(imax),['\rightarrow最大值=',num2str(...
y(imax))],'fontsize',15,'color','r');
后一種方法是幫同學看程序感覺不錯,然后默記下來,不過,錯了?其它都記得,就是把x=get(h,'xdata');記成x=get(h,'xdate');總是報get函數錯誤,沒去想是單詞錯了,郁悶。這個方法的好處在于可以自動找尋y值最大值的下標并標注在曲線上。以后如果函數發生變化最大值坐標點同樣可以自動找出。如果在同一個圖形窗口中畫兩個及以上的曲線,則需要用hold on 然后定義第二個曲線的句柄h2=plot(...),重復操作x=get(...及以后即可。如果需要知道最大值點坐標,可以在獲得x、y數據后用I1=[x(imax),y(imax)]獲得最大值點坐標。當然,如果要知道每條曲線的最大值點坐標,則每個句柄后獲得x、y后都要加個上面語句。這種方法對只有一個最大值點效果較好。如果有兩個及以上最大值點的時候會出現下述情況:
圖像上的文字標注會變成 最大值=9? 9? 9 (以三個最大值都是9的函數為例)。另外,I=[x(imax),y(imax)]所列舉的數字不是一個x坐標值隨之一個y坐標值的情況,而是把所有最大值點x的坐標值全列出,然后再列出與前面x坐標值依次對應的y坐標值,例如x=0:pi/10:5*pi;y=sin(x);得到的最大值點坐標是
>>
i =
1.5708??? 7.8540?? 14.1372??? 1.0000??? 1.0000??? 1.0000
另外,當x軸變量的步進的值不能正好落在理論上最大值點的x值時,此時最大值y也會和理論最大值不一樣。例如x=0:pi/10:2*pi;y=sin(x);當用上述求最大值法求得的最大值是0.99835,當把步進值改成pi/100時候,最大值為0.99999,當把步進值該為pi/1000的時候,最大值為1。
下面的是從網上收集的一些關于get和set的資料,備用。
通用函數get和set
所有對象都有屬性來定義它們的特征,正是通過設定這些屬性來修正圖形顯示的方式。盡管許多屬性所有的對象都有,但與每一種對象類型(比如坐標軸,線,曲面)相關的屬性列表都是獨一無二的。對象屬性可包括諸如對象的位置、顏色、類型、父對象、子對象及其它內容。每一個不同對象都有和它相關的屬性,可以改變這些屬性而不影響同類型的其他對象。和每一種對象類型(圖形,坐標軸,線,文本,曲面,補片和圖象)相關的完整的屬性列表在本章的后面給出。
對象屬性包括屬性名和與它們相聯關的值。屬性名是字符串,它們通常按混合格式顯示,每個詞的開頭字母大寫,比如:’ LineStyle ‘ 。但是,MATLAB識別一個屬性時是不分大小寫的。另外,只要用足夠多的字符來唯一地辨識一個屬性名即可。例如,坐標軸對象中的位置屬性可以用 ‘ Position ‘, ‘ position ‘ ,甚至是 ‘ pos ‘來調用。
當建立一個對象時,它用一組缺省屬性值,該值可以用兩種方法來改變。可以用{屬性名,屬性值}對來建立對象生成函數;或者在對象建立后改變屬性。前一種方法的例子是:
? Hf_1=figure( ‘color’, ‘white’ )
它用缺省的屬性值建立一個新的圖形窗口,只是背景顏色被設為白色而不是缺省的黑色。
為了獲得和改變句柄圖形對象的屬性只需要兩個函數。函數get返回某些對象屬性的當前值。使用函數get的最簡單語法是get(handle, ‘ PropertyName’ )。例如:
? p=get(Hf_1, ‘position’ )
返回具有句柄Hf_1圖形窗口的位置向量。
? c=get(Hl_a, ‘color’ )
返回具有句柄Hl_a對象的顏色。
函數set改變句柄圖形對象屬性,使用語法set(handle, ‘PropertyName’ ,value)。例如:
? set(Hf_1, ‘Position’ ,p_vect)
將具有句柄Hf_1的圖形位置設為向量p_vect所指定的值。同樣
? set(Hl_a, ‘color’ , ‘r’ )
將具有句柄Hl_a的對象的顏色設置成紅色。
一般情況下,函數set可以有任意數目的( ‘PropertyName’ ,PropertyValue)對。比如:
? set(Hl_a, ‘Color’ , ‘r’ , ‘Linewidth’ ,2, ‘LinStyle’ , ‘--’ )
將具有句柄Hl_a的線條變成紅色,線寬為2點,線型為破折號。
除了這些主要功能,函數set和函數get還能提供幫助。例如? set(handle, ‘PropertyName’ )返回一個可賦給由handle所描述對象的屬性值列表。例如:
? set(Hf_1, ‘Units’ )
[inches|centimeters|normalized|points|{pixels}]
表明由Hf_1所引用的圖形的 ‘Unites’屬性是五個可允許的字符串,而其中 ‘pixels’ 是缺省值。
如果指定一個沒有固定值的屬性,那么,MATLAB就會通知如下:
? set(Hf_1, ‘Position’ )
A??figure’s??‘Position’??property??does??not??have??a??fixed??set??of??property??values。
除了set命令,句柄圖形對象創建函數(例如figure,axis,line等等)接受多個屬性名和屬性值對。例如:
? figure( ‘Color’ , ‘blue’ , ‘NumberTitle’ , ‘off’ , ‘Name’ , ‘My??Figure’ )
創建一個圖形窗口,背景為蘭色,標有 ‘My??Figure’ 而不是缺省標題 ‘Figure??No.??1’。
為了形象說明上述概念,考慮下面的例子:
? Hf_fig =figure??%??create a figure having an interger handle
Hf_fig=
1
? Hl_line=line??%??create a line having a floating-pointer handle
Hl_line =
59.0002
? set(Hl_line);??%??list settable properties and potential values
Color
EraseMode: [ {normal} | background | xor | none ]
LineStyle: [??{-}??|??--??|??:??|??-.??|??+??|??o??|??*??|??.??|??x??]
LineWidth
MarkerSize
Xdata
Ydata
Zdata
ButtonDownFcn
Clipping: [ {on} | off ]
Interruptible: [ {no} | yes ]
Parent
UserData
Visible: [ {on} | off ]
? get(Hl_line);??%??list properties and current property values
Color = [1 1 1]
EraseMode = normal
LineStyle = -
LineWidth = [0.5]
MarkerSize = [6]
Xdata = [0 1]
Ydata = [0 1]
Zdata = [ ]
ButtonDownFcn =
Children = [ ]
Clipping = on
Interruptible = no
Parent = [58.0002]
Type = line
UserData = [ ]
Visible = on
在上例中,所創建的線條中的 ‘Parent’屬性就是包含線條的坐標軸的句柄。而且所顯示的圖形列表被分為兩組。在空行上的第一組,列出了該對象的獨有屬性,而空行下的第二組列出所有的對象共有的屬性。注意到函數set和函數get返回不同的屬性列表。函數set只列出可以用set命令改變的屬性,而get命令列出所有對象的屬性。在上面的例子中,函數get列出了 ‘Children’和 ‘Type’ 屬性,而set命令卻沒有。這一類屬性只可讀,但不能被改變,它們叫做只讀屬性。
與每一個對象有關的屬性數目是固定的,但不同的對象類型有不同數目的屬性。象上面所顯示的,一個線條對象列出了16個屬性,而一個坐標軸對象列出了64個屬性。顯然,透徹地說明和描述所有對象類型的全部屬性超出本書的范圍。但是,其中的很多屬性本書以后要詳細討論,并且列出全部屬性。
除了函數set和get,MATLAB還提供了另外兩個函數來操作對象和它們的屬性。任意對象和它們的子對象可以用 ? delete(handle) 來刪除。同樣 ? reset(handle) 將與句柄有關的全部對象屬性(除了 ‘Position’ 屬性)重新設置為該對象類型的缺省值。