记录MATLAB的s函数的使用(一)
最近要用simulink做仿真,需要用S函數,因此記錄一下,防止以后再用找不到資料。
第一步:新建simulink模型
主頁面點擊新建->Simulink Model新建一個Simulink模型。
進入之后點擊Blank Model建立一個空白模型。
?這時候按住ctrl+S保存一下,會彈出一個選擇保存路徑和起一個文件名字的彈框,我這里選擇是MATLAB->bin里面新建了一個文件夾保存,這樣模型就建立完成了。
第二步:加入s函數塊
?點擊simulink library打開simulink的塊倉庫,在Simulink->User-Defined Functions里面找到下圖中4,也就是S-Function塊,點擊拖到simulink里面。這里直接搜s函數會出現其他不相干的函數,直接按這個路徑找就可以。
?拖入之后就可以進行下一步了。
第二步:s函數m文件的建立
回到命令行窗口,Ctrl+N新建一個腳本,Ctrl+S保存一下,名字就是要編寫的S函數的名字。
保存到和第一步一樣的文件路徑里面。
鍵入:edit sfuntmpl,打開s函數例程,選擇全部,復制粘貼到剛剛建立的腳本m文件里面,然后作為自己的s函數的m文件。(鍵入sfundemos會打開s函數的塊例程,目前不知道什么用處。)
復制完之后刪掉注釋,就變成下面的樣子。
第三步:s函數的編寫
建立完之后開始進行s函數的編寫,s函數按照官方描述是可以實現任意復雜系統的編寫的,我這里水平有限,先試一下簡單的函數。
y=5*x1+3*x2;
要實現上面這個函數,可以看到有兩個輸入x1,x2,一個輸出y,因此在初始化函數里面設置sizes.NumInputs為 2,sizes.NumOutputs為 1,另外還要注意sizes.DirFeedthrough也要設置,這個根據輸出里面有沒有輸入出現來設置的,若輸出的表達式里面有輸入,則設置為1,否則設置為0。其他為默認。
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes sizes = simsizes;sizes.NumContStates = 0; sizes.NumDiscStates = 0; sizes.NumOutputs = 1; sizes.NumInputs = 2; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; % at least one sample time is neededsys = simsizes(sizes); x0 = []; str = []; ts = [0 0]; simStateCompliance = 'UnknownSimState';?設置完初始化函數之后,設置輸出函數,輸出函數的函數參數為t,x,u,這里只使用u,按照上面式子直接寫下來。保存函數。
function sys=mdlOutputs(t,x,u) x1 = u(1); x2 = u(2); y = 5*x1+3*x2; sys = [y];第四步:s函數的塊關聯
打開simulink界面,點擊s函數塊,在s函數的函數名處填剛剛建立的函數的名字,點擊OK。
下面來進行驗證一下。搭建如下模型,step的幅值都設為1,時間分別設為0.5和1。
可以看到,滿足y=5*x1+3*x2。
?
?
?
總結
以上是生活随笔為你收集整理的记录MATLAB的s函数的使用(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最小生成树详解
- 下一篇: android edittext 不滚动