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