MATLAB圖形用戶界面設計仿真等.ppt
第7章 MATLAB圖形用戶界面設計,7.1 菜單設計 7.2 對話框設計 7.3 用戶界面設計工具,目錄,7.1 菜單設計,7.1.1 用戶菜單的建立 建立一級菜單項的函數(shù)調用形式為: 一級菜單項句柄=uimenu(圖形窗口句柄,屬性名1,屬性值1,屬性名2,屬性值2,) 建立子菜單項的函數(shù)調用形式為: 子菜單項句柄=uimenu(一級菜單項句柄,屬性名1,屬性值1,屬性名2,屬性值2,),目錄,7.1.2 菜單對象常用屬性 菜單對象具有Children、Parent、Tag、Type、UserData、Visible等公共屬性。除公共屬性外,還有一些常用的特殊屬性。,目錄,例7.1建立“圖形演示系統(tǒng)”菜單。菜單條中含有3個菜單項:Plot、Option和Quit。Plot中有Sine Wave和Cosine Wave兩個子菜單項,分別控制在本圖形窗口畫出正弦和余弦曲線。Option菜單項的內容如圖7.1所示。其中Grid on和Grid off控制給坐標軸加網(wǎng)格線,Box on和Box off控制給坐標軸加邊框,而且這4項只有在畫有曲線時才是可選的。Figure Color控制圖形窗口背景顏色。Quit控制是否退出系統(tǒng)。,程序如下: screen=get(0,ScreenSize); W=screen(3);H=screen(4); figure(Color,1,1,1,Position,0.2*H,0.2*H,0.6*W,0.4*H,. Name,圖形演示系統(tǒng),NumberTitle,off,MenuBar,none); %定義Plot菜單項 hplot=uimenu(gcf,Label,目錄,7.1.3 快捷菜單 在MATLAB中,可以使用uicontextmenu函數(shù)和圖形對象的UIContextMenu屬性來建立快捷菜單,具體步驟為: (1)利用uicontextmenu函數(shù)建立快捷菜單。 (2)利用uimenu函數(shù)為快捷菜單建立菜單項。 (3)利用set函數(shù)將該快捷菜單和某圖形對象聯(lián)系起來。,目錄,hfigcor=uimenu(hoption,Label,例7.2 繪制曲線y=2e-0.5xsin(2x),并建立一個與之相聯(lián)系的快捷菜單,用以控制曲線的線型和曲線寬度。 程序如下: x=0:pi/100:2*pi; y=2*exp(-0.5*x).*sin(2*pi*x); hl=plot(x,y); hc=uicontextmenu; %建立快捷菜單 hls=uimenu(hc,Label,線型); %建立菜單項 hlw=uimenu(hc,Label,線寬); uimenu(hls,Label,虛線,Call,set(hl,LineStyle,:);); uimenu(hls,Label,實線,Call,set(hl,LineStyle,-);); uimenu(hlw,Label,加寬,Call,set(hl,LineWidth,2);); uimenu(hlw,Label,變細,Call,set(hl,LineWidth,0.5);); set(hl,UIContextMenu,hc); %將該快捷菜單和曲線對象聯(lián)系起來,目錄,7.2 對話框設計,7.2.1 對話框的控件 (1)按鈕(Push Button)。 (2)雙位按鈕(Toggle Button)。 (3)單選按鈕(Radio Button)。 (4)復選框(Check Box)。 (5)列表框(List Box)。 (6)彈出框(Popup Menu)。 (7)編輯框(Edit Box)。 (8)滑動條(Slider)。 (9)靜態(tài)文本(Static Text)。 (10)邊框(Frame)。,目錄,7.2.2 對話框的設計 1. 建立控件對象 MATLAB提供了用于建立控件對象的函數(shù)uicontrol,其調用格式為: 對象句柄=uicontrol(圖形窗口句柄,屬性名1,屬性值1,屬性名2,屬性值2,) 其中各個屬性名及可取的值和前面介紹的uimenu函數(shù)相似,但也不盡相同,下面將介紹一些常用的屬性。 2. 控件對象的屬性 MATLAB的10種控件對象使用相同的屬性類型,但是這些屬性對于不同類型的控件對象,其含義不盡相同。除Children、Parent、Tag、Type、UserData、Visible等公共屬性外,還有一些常用的特殊屬性。,目錄,例7.3 建立數(shù)制轉換對話框。在左邊輸入一個十進制整數(shù)和216之間的數(shù),單擊“轉換”按鈕能在右邊得到十進制數(shù)所對應的216進制字符串,單擊“退出”按鈕退出對話框。 程序如下: hf=figure(Color,0,1,1,Position,100,200,400,200,. Name,數(shù)制轉換,NumberTitle,off,MenuBar,none); uicontrol(hf,Style,Text, Units,normalized,. Position,0.05,0.8,0.45,0.1,Horizontal,center,. String,輸 入 框,Back,0,1,1); uicontrol(hf,Style,Text,Position,0.5,0.8,0.45,0.1,. Units,normalized,Horizontal,center,. String,輸 出 框,Back,0,1,1); uicontrol(hf,Style,Frame,Position,0.04,0.33,0.45,0.45,. Units,normalized,Back,1,1,0); uicontrol(hf,Style,Text,Position,0.05,0.6,0.25,0.1,. Units,normalized,Horizontal,center,. String,十進制數(shù),Back,1,1,0); uicontrol(hf,Style,Text,Position,0.05,0.4,0.25,0.1,. Units,normalized,Horizontal,center,. String,216進制,Back,1,1,0); he1=uicontrol(hf,Style,Edit,Position,0.25,0.6,0.2,0.1,. Units,normalized,Back,0,1,0); he2=uicontrol(hf,Style,Edit,Position,0.25,0.4,0.2,0.1,. Units,normalized,Back,0,1,0); uicontrol(hf,Style,Frame,Position,0.52,0.33,0.45,0.45,. Units,normalized,Back,1,1,0); ht=uicontrol(hf,Style,Text,Position,0.6,0.5,0.3,0.1,. Units,normalized,Horizontal,center,Back,0,1,0); COMM=n=str2num(get(he1,String);,b=str2num(get(he2,String);,. dec=trdec(n,b);,set(ht,string,dec); uicontrol(hf,Style,Push,Position,0.18,0.1,0.2,0.12,. String,轉 換,Units,normalized,Call,COMM); uicontrol(hf,Style,Push,Position,0.65,0.1,0.2,0.12,. String,退 出,Units,normalized,Call,close(hf);,目錄,程序調用了trdec.m函數(shù)文件,該函數(shù)的作用是將任意十進制整數(shù)轉換為216進制字符串。trdec.m函數(shù)文件如下: function dec=trdec(n,b) ch1=0123456789ABCDEF; %十六進制的16個符號 k=1; while n=0 %不斷除某進制基數(shù)取余直到商為0 p(k)=rem(n,b); n=fix(n/b); k=k+1; end k=k-1; strdec=; while k=1 %形成某進制數(shù)的字符串 kb=p(k); strdec=strcat(strdec,ch1(kb+1:kb+1); k=k-1; end dec=strdec;,目錄,例7.4 建立圖形演示對話框。在編輯框輸入繪圖命令,單擊“繪圖”按鈕能在左邊坐標軸得到所對應的圖形,彈出框提供色圖控制,列表框提供坐標網(wǎng)格線和坐標邊框控制。 程序如下: clf; set(gcf,Unit,normalized,Position,0.2,0.3,0.65,0.35); set(gcf,Menubar,none,Name,圖形演示,NumberTitle,off); axes(Position,0.05,0.15,0.55,0.7); uicontrol(gcf,Style,text, Unit,normalized,. Posi,0.63,0.85,0.2,0.1,String,輸入繪圖命令,Horizontal,center); hedit=uicontrol(gcf,Style,edit,Unit,normalized,Posi,0.63,0.15,0.2,0.68,. Max,2); %Max取2,使Max-Min1,從而允許多行輸入 hpopup=uicontrol(gcf,Style,popup,Unit,normalized,. Posi,0.85,0.8,0.15,0.15,String,Spring|Summer|Autumn|Winter); hlist=uicontrol(gcf,Style,list,Unit,normalized,. Posi,0.85,0.55,0.15,0.25,String,Grid on|Grid off|Box on|Box off); hpush1=uicontrol(gcf,Style,push,Unit,normalized,. Posi,0.85,0.35,0.15,0.15,String,繪 圖); uicontrol(gcf,Style,push,Unit,normalized,. Posi,0.85,0.15,0.15,0.15,String,關 閉,Call,close all); set(hpush1,Call,COMM(hedit,hpopup,hlist); set(hlist,Call,COMM(hedit,hpopup,hlist); set(hpopup,Call,COMM(hedit,hpopup,hlist); COMM.m函數(shù)文件: function COMM(hedit,hpopup,hlist) com=get(hedit,String); n1=get(hpopup,Value); n2=get(hlist,Value); if isempty(com) %編輯框輸入非空時 eval(com); %執(zhí)行從編輯框輸入的命令 chpop=spring,summer,autumn,winter; chlist=grid on,grid off,box on,box off; colormap(eval(chpopn1); eval(chlistn2); end,目錄,7.3 用戶界面設計工具,7.3.1 圖形界面控制面板 7.3.2 屬性編輯器 7.3.3 事件過程編輯器 7.3.4 菜單編輯器 7.4.5 位置調整工具,目錄,例7.5 利用界面設計工具設計用戶界面。具體要求是: (1)在編輯框輸入形成數(shù)據(jù)z的命令,然后選擇三個按鈕中的一個,即可繪制出z的圖形。 (2)選擇彈出框中的某個色圖,能及時地更改繪圖的顏色。 (3)在圖形窗口缺省的菜單條上添加一個菜單項Options,Options下又有兩個子菜單項White和Red,選中White項時,圖形窗口將變成白色,選中Red項時,圖形窗口將變成紅色。 操作步驟如下: (1)打開圖形界面控制面板,添加有關圖形對象。 (2)利用屬性編輯器,設置圖形對象的屬性。 (3)添加Options菜單項。,目錄,第8章 MATLAB筆記本,8.1 筆記本的安裝及啟動 8.2 輸入單元的定義與執(zhí)行 8.3 計算區(qū)的定義與執(zhí)行 8.4 輸出格式控制 8.5 Notebook菜單的其他命令 8.6 M-book模板樣式的修改,目錄,8.1 筆記本的安裝及啟動,8.1.1 筆記本的安裝 在MATLAB命令窗口輸入:notebook -setup 8.1.2筆記本的啟動 1.從Word中啟動筆記本 2.從MATLAB中啟動筆記本,目錄,8.1.3 MATLAB筆記本的界面 MATLAB筆記本的界面和通常的Word界面主要有兩點區(qū)別: (1)在菜單欄中多了一個Notebook菜單項,筆記本的許多操作都可以通過該菜單項的命令來完成。 (2)在“文件”菜單項下多了一個New M-book命令項。如果在M-book模板下要建立新的M-book文檔,可以選擇該命令。,目錄,8.2 輸入單元的定義與執(zhí)行,8.2.1基本操作 1.輸入單元的定義 首先選中所需命令,然后在Notebook菜單項中選擇Define Input Cell命令,于是被選中的MATLAB命令成為輸入單元。也可以在選中所需命令后,直接按組合鍵Alt+D。 2.輸入單元的執(zhí)行 選擇Notebook菜單項中的Evaluate Cell命令或直接按組合鍵Ctrl+Enter。 3.輸出單元 輸入單元執(zhí)行后產(chǎn)生輸出單元。,目錄,例8.1定義并執(zhí)行輸入單元。 操作步驟如下: (1)在文檔中輸入MATLAB命令。 (2)選中命令行,在Notebook菜單項中選Define Input Cell命令或直接按組合鍵Alt+D,于是命令行就變成了“綠色”的輸入單元。 (3)若要把輸入單元送去執(zhí)行,則可用Notebook菜單項中的Evaluate Cell命令或直接按組合鍵Ctrl+Enter,執(zhí)行后產(chǎn)生“藍色”的輸出單元:,目錄,4.輸入單元定義與執(zhí)行同時進行 先選中MATLAB命令,然后從Notebook菜單項中選擇Evaluate Cell命令或直接按組合鍵Ctrl+Enter,不但使被選中的命令成為輸入單元,而且送去執(zhí)行,產(chǎn)生輸出單元。 例8.2輸入單元定義與執(zhí)行同時進行。 在英文狀態(tài)下,以文本方式鍵入命令,然后選中命令并按Ctrl+Enter鍵,則得到輸入、輸出單元。,目錄,8.2.2 自初始化單元及其應用 1.自初始化單元 選擇Notebook菜單中的Define AutoInit Cell命令即可。 2.自初始化單元的應用,目錄,8.2.3單元群及其應用 1.單元群 單元群(Cell Group)是多行輸入單元或自初始化單元組成的一個整體。 2.單元群的應用 單元群的用途主要有兩個: (1)為保證MATLAB命令結構(如循環(huán)結構、條件結構)的完整。 (2)為保證輸出結果(如圖形)的完整。,目錄,8.2.4單元的循環(huán)執(zhí)行 利用Notebook菜單中的Evaluate Loop命令可實現(xiàn)單元的循環(huán)執(zhí)行。,目錄,8.3 計算區(qū)的定義與執(zhí)行,定義計算區(qū)的方法是:先選定包含普通Word文本、輸入單元和輸出單元的一個連續(xù)區(qū),然后選擇Notebook菜單中的Define Calc Zone命令。 一旦計算區(qū)被定義后,不管光標在計算區(qū)的什么位置,只要選擇Notebook菜單中的Evaluate Calc Zone命令即可執(zhí)行計算區(qū)中的全部輸入單元,且在每個輸入單元后面以輸出單元形式給出相應的計算結果。,目錄,8.4 輸出格式控制,可以通過Notebook菜單中的Notebook Options命令來實現(xiàn)。選擇該命令后,會彈出輸出格式控制對話框,以后的操作都是針對該對話框進行。,目錄,8.4.1 輸出數(shù)據(jù)格式控制 1.輸出數(shù)據(jù)的表示方式 2.輸出數(shù)據(jù)間的空行控制 8.4.2 輸出圖形格式控制 利用輸出格式控制對話框,也可以實現(xiàn)對輸出圖形的控制。 1.圖形鑲嵌的控制 2.曲面圖色彩控制 3.圖形背景色的控制 4.圖形大小的控制,目錄,8.5 Notebook菜單的其他命令,8.5.1整個M-book文檔輸入單元的執(zhí)行 Notebook菜單項中的Evaluate M-book命令可以把整個M-book文檔中的所有輸入單元送到MATLAB中去執(zhí)行。不管光標處于文檔的什么位置,執(zhí)行總是從文檔首部開始。 8.5.2刪去M-book文檔中所有輸出單元 Notebook菜單項中的Purge Output Cells命令可以刪去M-book文檔中所有輸出單元。,目錄,8.5.3單元轉化為文本 選定單元,再選擇Notebook菜單中的Undefine Cells命令?;驅⒐鈽酥糜趩卧?,按組合鍵AltU。 當某輸入單元或單元群被轉化為文本時,與之相應的輸出單元也被自動轉化為文本。,目錄,8.6 M-book模板樣式的修改,同其他Word模板一樣,用戶既可以修改M-book模板原有樣式,也可以加入新樣式。例如,現(xiàn)有的M-book模板中,輸入單元是綠色的,輸出單元和自初始化單元是藍色的,錯誤單元是紅色的?,F(xiàn)在可以把輸出單元的顏色變?yōu)楹谏?目錄,第9章 MATLAB環(huán)境下的仿真軟件Simulink,9.1 Simulink的基本操作 9.2 Simulink的幾類基本模塊 9.3 仿真模型參數(shù)的設置 9.4 子系統(tǒng)的建立與封裝 9.5 在命令窗口中創(chuàng)建模型 9.6 S-函數(shù)的設計和應用 9.7 仿真系統(tǒng)的線性化分析,目錄,9.1 Simulink的基本操作,9.1.1 Simulink的啟動與退出 1. Simulink的啟動 啟動Simulink的方法有3種: (1)在MATLAB的命令窗口直接鍵入simulink。 (2)單擊MATLAB命令窗口工具欄上的Simulink模塊庫瀏覽器命令按鈕。 (3)在MATLAB命令窗口File菜單中選擇New菜單項下的Model命令。 2. Simulink的退出 為了退出Simulink,只要關閉所有模型窗口和Simulink模塊庫窗口即可。,目錄,9.1.2 Simulink模塊的操作 1. 選取模塊 2. 復制與刪除模塊 3. 模塊的參數(shù)和屬性設置 4. 模塊外形的調整 5. 模塊名的處理 6. 模塊的連接 7. 在連線上反映信息。,目錄,9.2 Simulink的幾類基本模塊,9.3 仿真模型參數(shù)的設置 9.3.1 通過菜單命令設置仿真模型參數(shù) 選擇模型窗口Simulation菜單中的Parameter命令,將出現(xiàn)仿真參數(shù)對話框。對話框分四個選項卡:Solver(算法)、Workspace I/O(工作空間輸入輸出)、Diagnostics(診斷)和Real-Time Workshop(實時工作間)。,目錄,9.3.2 在命令窗口調用函數(shù)設置仿真模型參數(shù) 1. sim 函數(shù) 其調用格式為: t, x, y =sim(modname,timespan,options,data); 2. simset函數(shù) 它有如下4種用法: (1)options=simset(property,value,) (2)options=simset(old_opstruct,property,value,) (3)options=simset(old_opstruct,new_opstruct) (4)simset,目錄,例9.1以圖9.15所示的仿真模型為例,說明simset函數(shù)的用法。 (1)在命令窗口輸入命令: option=simset(OutputVariables,x,OutputPoints,all,FinalstateName,date); t,x,y=sim(mode1,1,10,option) (2)在命令窗口中輸命令: optionl=simset(OutputVariables,xy,OutputPoints,all); t,x,y=sim(Simul,2,4,6,8,option1);,目錄,3. simget函數(shù) 該函數(shù)有如下3種用法: (1)struct=simget(model) (2)value=simget(model,property) (3)value=simget(Option,Structure,property) 4.set_param函數(shù) (1)設置仿真參數(shù) 調用格式為:set_param(mode,property,value,) (2)控制仿真進程 調用格式為: set_param(mode,SimulationCommand,cmd),目錄,例9.2 假設從實際應用領域(力學、電學、生態(tài)或社會)中,抽象出有初始狀態(tài)為0的二階微分方程x“+0.2x+0.4x=0.2u (t), u(t)是單位階躍函數(shù)。用積分器直接構造求解微分方程的模型exm1.mdl。 步驟如下: (1)改寫微分方程。把原方程改寫為:x“=0.2u(t)-0.2x-0.4x (2)利用Simulink模塊庫中的標準模塊構作模型。 (3)仿真操作。 (4)保存在MATLAB工作空間中的數(shù)據(jù)。,目錄,例9.3利用傳遞函數(shù)模塊建模。 步驟如下: (1)根據(jù)系統(tǒng)傳遞函數(shù)構造系統(tǒng)模型 (2)仿真操作。 例9.4利用狀態(tài)方程模塊建模。 (1)利用構造仿真模型 (2)仿真,目錄,9.4 子系統(tǒng)的建立與封裝,9.4.1 子系統(tǒng)的建立 1. 通過Subsystem模塊建立子系統(tǒng) 操作步驟為: (1)先打開Simulink模塊庫瀏覽器,新建一個仿真模型。 (2)打開Simulink模塊庫中的Signals & Systems模塊庫,復制Subsystem模塊到新的模型窗口中。 (3)用鼠標左鍵雙擊Subsystem模塊打開一個空白的Subsystem窗口,將要組合的模塊添加到該窗口中,另外還要根據(jù)需要復制一個或多個Input和Output模塊,表示子系統(tǒng)的輸入和輸出端口。這樣,一個子系統(tǒng)就建好了。,目錄,2. 通過已有的模塊建立子系統(tǒng) 操作步驟為: (1)先選擇要建立子系統(tǒng)的模塊,不包括輸入端口和輸出端口。 (2)選擇模型窗口Edit菜單中的Create Subsystem 命令,這樣,子系統(tǒng)就建好了。在這種情況下,系統(tǒng)會自動把Input模塊和Output模塊添加到子系統(tǒng)中,并把原來的模塊變?yōu)樽酉到y(tǒng)的圖標。,目錄,9.4.2 子系統(tǒng)的條件執(zhí)行 1. 使能子系統(tǒng) 建立使能子系統(tǒng)的方法是:打開Simulink模塊庫中的Signals & Systems模塊庫,將Enable模塊復制到子系統(tǒng)模型中,則系統(tǒng)的圖標發(fā)生了變化。,目錄,例9.5利用使能原理構成一個正弦半波整流器。 操作步驟如下: (1)打開Simulink模塊庫瀏覽器以及新建一個模型窗口。 (2)雙擊空子系統(tǒng)模塊Subsystem,打開其結構模型窗。 (3)將Simulink瀏覽庫中的In輸入口模塊、Out輸出口模塊、Enable使能模塊拖至子系統(tǒng)的結構模型窗;把In模塊的輸出直接送到Out模塊的輸入端;Enable模塊無須進行任何連接,且采用它的缺省設置實現(xiàn)題目所需使能子系統(tǒng)。 (4)完成新建模型窗口中各模塊間的連接并存盤。 (5)雙擊示波器模塊,打開顯示窗。然后選擇Simulink菜單中的Start命令,就可看到半波整流波形。,目錄,2. 觸發(fā)子系統(tǒng) 觸發(fā)子系統(tǒng)是指當觸發(fā)事件發(fā)生時開始執(zhí)行子系統(tǒng)。與使能子系統(tǒng)相類似,觸發(fā)子系統(tǒng)的建立要把Signals & Systems模塊庫中的Trigger模塊拷貝到子系統(tǒng)中。,目錄,例9.6 利用觸發(fā)子系統(tǒng)原理將一鋸齒波轉換成方波。 操作步驟如下: (1)用Signal Generator、Subsystem和Scope模塊構成一子系統(tǒng),雙擊Signal Generator模塊圖標在Wave from的下拉列表框中選擇sawtooth,即鋸齒波。 (2)將上例中的Enable模塊換成Trigger觸發(fā)模塊。雙擊該模塊并選Trigger type觸發(fā)事件形式為either,即上跳沿或下跳沒觸發(fā)。 (3)完成新建模型窗口中各模塊間的連接,并存盤。 (4)雙擊示波器模塊,然后選擇Simulink菜單中的start命令,就可看到方波。,目錄,3. 使能加觸發(fā)子系統(tǒng) 所謂使能加觸發(fā)子系統(tǒng)就是把Enable和Tirgger模塊都加到子系統(tǒng)中,使能控制信號和觸發(fā)控制信號共同作用子系統(tǒng)的執(zhí)行,也就是前兩種子系統(tǒng)的綜合。該系統(tǒng)的行為方式與觸發(fā)子系統(tǒng)相似,但只有當使能信號為正時,觸發(fā)事件才起作用。,目錄,9.4.3 子系統(tǒng)的封裝 子系統(tǒng)的封裝過程很簡單:先選中所要封裝的子系統(tǒng),再選擇模型窗口Edit菜單中的Mask Subsystem命令,這時將出現(xiàn)Mask Editor對話框。 Mask Editor對話框中共包括3個選項卡:Icon、Initialization和Documentation。子系統(tǒng)的封裝主要就是對這3頁參數(shù)進行設置。,目錄,9.5 在命令窗口中創(chuàng)建模型,9.5.1 構造模型的命令 9.5.2 設置參數(shù),目錄,9.6 S-函數(shù)的設計和應用,9.6.1 S-函數(shù)概述 9.6.2 用M文件編寫S-函數(shù) (1)MATLAB5.3為用戶提供了一個模板,只要在必要的子程序里編寫代碼并輸入?yún)?shù)就可以了。 (2)從Function & Tables子庫里把S-Function系統(tǒng)的功能模塊復制過來,輸入程序的文件名,以供調用。,目錄,例9.7利用M文件來寫一個限幅積分器的S-函數(shù),并借助S-函數(shù)模塊來調用此文件。限幅積分器的數(shù)學模型如下: 操作步驟如下: (1)根據(jù)數(shù)學模型,編寫S-函數(shù)sfun97.m。 function sys, x0, str, ts = sfun97(t, x, u, flag, lb, ub, xi) switch flag, case 0, sys, x0, srt, ts = mdlInitializeSizes(xi); case 1, sys = mdlDerivatives(t, x, u, lb, ub); case 2 , sys = mdlUpdate(t, x, u); case 3, sys = mdlOutputs(t, x, u); case 4, sys = mdlGetTimeOfNextVarHit(t, x, u); case 9, sys = mdlTerminate (t , x , u); otherwise error ( Unhandled flag = ,num2str ( flag) ); end function sys,x0,str,ts=mdlInitializeSizes(xi) sizes =simsizes; sizes.NumContStates=1; sizes.NumDiscStates=0; sizes.NumOutputs=1; sizes.NumInputs=1; sizes.DirFeedthrough=0; sizes.NumSampleTimes=1; sys=simsizes(sizes); xo=xi; str= ; ts=0, 0; function sys=mdlDerivatives(t,x,u,lb,ub) if(x=ub,目錄,(2)完成S-函數(shù)的編寫后,接著建立 Simulink模型,將功能模塊S-function復制到設計區(qū)域,打開其參數(shù)頁,輸入S-函數(shù)的文件名sfun97.m和S-函數(shù)的參數(shù)lb、ub、xi。 (3)編寫主程序。 clear; lb=-0.5; ub=0.5; xi=0; sim(sfun97); (4)在命令窗口運行主程序,并雙擊示波器,即可查看到輸入波形及限幅積分的結果。,目錄,9.7 仿真系統(tǒng)的線性化分析,9.7.1 連續(xù)系統(tǒng)的線性化 線性化分析函數(shù)linmod用來提取非線性系統(tǒng)的近似線性模型,也可以用來獲取線性系統(tǒng)的數(shù)學模型。linmod函數(shù)的調用格式為: A,B,C,D=linmod (sys) A,B,C,D=linmod (sys, x ,u) A,B,C,D=linmod (sys, x, u, pert) A,B,C,D=linmod (sys, x, u, pert, xpert, upert),目錄,9.7.2離散系統(tǒng)的線性化 dlinmod能夠以任意給定的采樣時間對離散系統(tǒng)、多速率系統(tǒng)以及連續(xù)和離散混合系統(tǒng)進行線性化。除了第2個選項需要插入采樣時間來對系統(tǒng)線性化外,dlinmod的調用格式和linmod是相同的: A,B,C,D=dlinmod (sys, Ts, x ,u),目錄,9.7.4 平衡分析 在給定輸入、輸出及狀態(tài)條件下,Simulink提供的函數(shù)trim可以用來確定系統(tǒng)的穩(wěn)態(tài)平衡點。其調用格式為: x,u,y,dx=trim(sys) x,u,y,dx=trim(sys,x0,u0,y0,ix,iu,iy) 其中x,u,y,dx分別代表狀態(tài)向量、輸入向量、輸出向量和狀態(tài)向量的導數(shù)。sys是模型名。x0,u0,y0分別為狀態(tài)向量x、輸入向量u和輸出向量y的初始猜測值,它們的輸入格式必須是列向量形式。ix是向量,它的元素是那些在尋找過程中,要求保持其值固定不變(等于初始猜測值)的那些狀態(tài)變量的序號。iu、iy與ix類似,分別適用于u和y。,目錄,MATLAB使用注意項,101 腳本文件和函數(shù)文件 102 函數(shù)調用和參數(shù)傳遞 103 M文件的調試 4 環(huán)境設置 10. 5 MATLAB使用中的常用命令,目錄,101 腳本文件和函數(shù)文件,1011 M腳本文件,對于一些比較簡單的問題 ,在指令窗中直接輸入指令計算 。,對于復雜計算,采用腳本文件(Script file)最為合適 。,MATLAB只是按文件所寫的指令執(zhí)行 。,M腳本文件的特點是:,腳本文件的構成比較簡單,只是一串按用戶意圖排列而成的(包括控制流向指令在內的)MATLAB指令集合。,腳本文件運行后 ,所產(chǎn)生的所有變量都駐留在 MATLAB基本工作空間(Base workspace)中。只要用戶不使用清除指令(clear), MATLAB指令窗不關閉,這些變量將一直保存在基本工作空間中。,M文件有兩種形式 :腳本文件(Script File)和函數(shù)文件(Function File )。這兩種文件的擴展名,均為“ . m” 。,目錄,1012 M函數(shù)文件,與腳本文件不同 ,函數(shù)文件猶如一個“黑箱”,把一些數(shù)據(jù)送進并經(jīng)加工處理,再把結果送出來。,MATLAB提供的函數(shù)指令大部分都是由函數(shù)文件定義的。,M函數(shù)文件的特點是:,從形式上看 ,與腳本文件不同 ,函數(shù)文件的笫一行總是以 “function”引導的“函數(shù)申明行”。,從運行上看 ,與腳本文件運行不同 ,每當函數(shù)文件運行, MATLAB就會專門為它開辟一個臨時工作空間,稱為函數(shù)工作空間( Function workspace) 。當執(zhí)行文件最后一條指令時 ,就結束該函數(shù)文件的運行,同時該臨時函數(shù)空間及其所有的中間變量就立即被清除。,MATLAB允許使用比 “標稱數(shù)目 ”較少的輸入輸出宗量,實現(xiàn)對函數(shù)的調用 。,目錄,1013 M文件的一般結構,由于從結構上看 ,腳本文件只是比函數(shù)文件少一個“函數(shù)申明行”,所以只須描述清楚函數(shù)文件的結構 。,典型 M函數(shù)文件的結構如下 :,函數(shù)申明行:位于函數(shù)文件的首行,以關鍵字 functio 開頭,函數(shù)名以及函數(shù)的輸入輸出宗量都在這一行被定義。,笫一注釋行:緊隨函數(shù)申明行之后以%開頭笫一注釋行。該行供lookfor關鍵詞查詢和 help在線幫助使用 。,在線幫助文本區(qū) :笫一注釋行及其之后的連續(xù)以%開頭的所有注釋行構成整個在線幫助文本。,編寫和修改記錄:與在線幫助文本區(qū)相隔一個“空”行,也以%開頭,標志編寫及修改該M文件的作者和日期等 。,函數(shù)體:為清晰起見,它與前面的注釋以“空”行相隔。,目錄,102 函數(shù)調用和參數(shù)傳遞,1021 局部變量和全局變量,局部(Local)變量:它存在于函數(shù)空間內部的中間變量,產(chǎn)生于該函數(shù)的運行過程中,其影響范圍也僅限于該函數(shù)本身 。,全局(Global)變量:通過 global 指令,MATLAB也允許幾個不同的函數(shù)空間以及基本工作空間共享同一個變量,這種被共享的變量稱為全局變量。,1022 函數(shù)調用,在MATLAB中,調用函數(shù)的常用形式是:,輸出參數(shù)1,輸出參數(shù)2, = 函數(shù)名(輸入?yún)?shù)1,輸入?yún)?shù)2, ),函數(shù)調用可以嵌套,一個函數(shù)可以調用別的函數(shù),甚至調用它自己 (遞歸調用)。,目錄,1023 參數(shù)傳遞,MATLAB在函數(shù)調用上有一個與眾不同之處 :函數(shù)所傳遞的參數(shù)具有可調性 。,傳遞參數(shù)數(shù)目的可調性來源于如下兩個MATLAB永久變量:,函數(shù)體內的 nargin 給出調用該函數(shù)時的輸入?yún)?shù)數(shù)目。,函數(shù)體內的 nargout 給出調用該函數(shù)時的輸出參數(shù)數(shù)目。,只要在函數(shù)文件中包括這兩個變量,就可以知道該函數(shù)文件調用時的輸入?yún)?shù)和輸出參數(shù)數(shù)目。,值得注意:nargin、 nargout 本身都是函數(shù),不是變量,所以用戶不能賦值,也不能顯示。,“變長度”輸入輸出宗量:varargin 、 varrgout。具有接受 “任意多輸入” 、返回“任意多輸出”的能力 。,跨空間變量傳遞:evalin。,(參考 : circle .m,am1.m),目錄,103 M文件的調試,編寫 M文件時,錯誤(Bug)在所難免。錯誤有兩種:語法(Syntax)錯誤和運行(Run-time)錯誤。,語法錯誤是指變量名、函數(shù)名的誤寫,標點符號的缺、漏等。對于這類錯誤,通常能在運行時發(fā)現(xiàn),終止執(zhí)行,并給出相應的錯誤原因以及所在行號。,運行錯誤是算法本身引起的,發(fā)生在運行過程中。相對語法錯誤而言,運行錯誤較難處理 。尤其是M函數(shù)文件,它一旦運行停止,其中間變量被刪除一空,錯誤很難查找。,有兩種調試方法:直接調試法和工具調試法。,目錄,直接調試法:可以用下面方法發(fā)現(xiàn)某些運行錯誤。,在M文件中,將某些語句后面的分號去掉, 迫使M文件輸出一些中間計算結果,以便發(fā)現(xiàn)可能的錯誤。,在適當?shù)奈恢茫砑语@示某些關鍵變量值的語句(包括使用 disp 在內)。,利用 echo 指令,使運行時在屏幕上逐行顯示文件內容。echo on 能顯示M腳本文件;echo FunNsme on 能顯示名為FunNsme 的M函數(shù)文件。,在原M腳本或函數(shù)文件的適當位置,增添指令 keyboard 。 keyboard 語句可以設置程序的斷點 。,通過將原M函數(shù)文件的函數(shù)申明行注釋掉,可使一個中間變量難于觀察的M函數(shù)文件變?yōu)橐粋€所有變量都保留在基本工作空間中的M腳本文件。,目錄,GUI 界面調試法:,MATLAB 5.x 版提供了一個基于GUI界面的調試。使用它,可以對函數(shù)進行調試。,Debug菜單的使用:,Continue:恢復程序運行至結束或另一個斷點 。,Single Step:單步執(zhí)行函數(shù)。,Step In:深入下層局部工作區(qū) 。,Quit Debugging:退出調試狀態(tài)。,Set/Clear Breakpoint:設置/清除光標處的斷點 。,Clear All Breakpoints:清除程序中的所有斷點 。,Stop if Error:運行至出錯或結束。,Stop if Warning:運行至警告消息或結束。,Stop if NaN of Inf:運行至運算結果出現(xiàn) NaN 或 Inf。,目錄,104 環(huán)境設置,每次MATLAB遇到一個命令(例如test)時,其處置程序為: 1.將test視為使用者定義的變數(shù)。 2.若test不是使用者定義的變數(shù),將其視為永久常數(shù)。 3.若test不是永久常數(shù),檢查其是否為目前工作目錄下 的M檔案。 4.若不是,則由搜尋路徑尋找是否有test.m的檔案。 5.若在搜尋路徑中找不到,則MATLAB會發(fā)出嗶嗶聲并 印出錯誤訊息。,目錄,假設test.m所在的目錄是d:mlbook。如果不先進入這個目錄, MATLAB就找不到你要執(zhí)行的M檔案。如果希望MATLAB不論在何處都能執(zhí)行 test.m,那麼就必須將d:mlbook加入MATLAB的搜尋路徑(Search path)上。要檢MATLAB的搜尋路徑,鍵入path即可:,要將d:mlbook加入MATLAB的搜尋路徑,還是使用path命令: path(path, c:datamlbook);,目錄,105 MATLAB使用中的常用命令,Close 關閉窗口命令 Clear 清除變量賦值 Ans 對上一個問題的回答,目錄,