S函數(shù)學(xué)習(xí)筆記_第1頁(yè)
S函數(shù)學(xué)習(xí)筆記_第2頁(yè)
S函數(shù)學(xué)習(xí)筆記_第3頁(yè)
S函數(shù)學(xué)習(xí)筆記_第4頁(yè)
S函數(shù)學(xué)習(xí)筆記_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、S函數(shù)用于自定義實(shí)現(xiàn)特定的算法,然后嵌入到simulink模塊“S-Function”中用于仿真。一、主函數(shù)1、函數(shù)頭:function sys,x0,str,ts=functionname(t,x,u,flag,p1,p2,p3.)1 sys,x0,str,ts為系統(tǒng)默認(rèn)輸出變量;2 t,x,u,flag為系統(tǒng)默認(rèn)輸入?yún)?shù);3 p1,p2,p3.為用戶可選輸入變量;(如果定義函數(shù)時(shí)列表中有可選輸入?yún)?shù),在S-Function模塊中要設(shè)置參數(shù)的值)4 s函數(shù)文件名要與函數(shù)名一致。2、 函數(shù)體switch flagcase 0sys,x0,str,ts=mdlInitializeSizes;ca

2、se 1sys = mdlDerivatives(t,x,u);case 2sys = mdlUpdates(t,x,u);case 3sys = mdlOutputs(t,x,u);case 4sys = mdlGetTimeOfNextVarHit(t,x,u);case 9sys=mdlGetTimeOfNextVarHit(t,x,u);3、 說(shuō)明對(duì)于特定的算法可能只用到某些flag狀態(tài)的操作,對(duì)于不需要操作的flag狀態(tài),有兩種處理方式,一種是在主函數(shù)中處理,另一種是在定義子函數(shù)時(shí)處理。以不需要進(jìn)行flag為1、4和9狀態(tài)時(shí)的操作為例分別進(jìn)行說(shuō)明。1 在主函數(shù)中處理在主函數(shù)中編寫(xiě)為:

3、case 1,2,9 sys = ; 這樣處理就不需要再編寫(xiě)對(duì)應(yīng)狀態(tài)的子函數(shù)。2 在子函數(shù)中處理在主函數(shù)中編寫(xiě)為:case 1sys = mdlDerivatives(t,x,u);case 4sys = mdlGetTimeOfNextVarHit(t,x,u);case 9sys=mdlGetTimeOfNextVarHit(t,x,u);在子函數(shù)中編寫(xiě)為:function sys = mdlUpdates(t,x,u)sys = ;function sys = mdlGetTimeOfNextVarHit(t,x,u)sys = ;function sys=mdlTerminate(t,

4、x,u) sys = ;二、子函數(shù)算法的設(shè)計(jì)可能會(huì)用到狀態(tài)變量x,那么根據(jù)x的性質(zhì)可以將算法分為三大類(lèi):基于連續(xù)狀態(tài)變量的算法、基于離散狀態(tài)變量的算法和不基于狀態(tài)變量的算法。接下來(lái)分別介紹這三種類(lèi)型的算法設(shè)計(jì)。1、 基于連續(xù)狀態(tài)變量的算法算法的整體設(shè)計(jì)思想是:=f1(t,x,u) y=f2(t,x,u)1 初始化(flag=0)設(shè)置使用的連續(xù)狀態(tài)變量的個(gè)數(shù):size.NumContStates = 設(shè)置不使用離散狀態(tài)變量:size.NumDiscStates = 0設(shè)置輸出變量的個(gè)數(shù):size.NumOutputs = 設(shè)置輸入變量的個(gè)數(shù):size.NumInputs = 設(shè)置輸出變量與輸入變

5、量是否相關(guān):size.DirFeedthrough = 1或0設(shè)置采樣時(shí)間的個(gè)數(shù):size.NumSampleTimes = 用系統(tǒng)變量sys記錄并返回上述設(shè)置:sys=simsize(sizes)設(shè)置狀態(tài)變量的初始值:x0 = .設(shè)置保留變量str為空:str = 設(shè)置采樣時(shí)間類(lèi)型:ts = .示例:/*/function sys,x0,str,ts = mdlInitializeSizessizes = simsizes;sizes.NumContStates = 2;sizes.NumDiscStates = 0;sizes.NumOutputs = 2;sizes.NumInputs

6、= 2;sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1;sys = simsizes(sizes);x0 = zeros(2,1);str = ;ts = 0 0;/*/2 狀態(tài)變量求導(dǎo)(flag=1)子函數(shù)mdlDerivatives實(shí)現(xiàn)連續(xù)狀態(tài)變量x導(dǎo)數(shù)的表達(dá)式:f1(t,x,u),用系統(tǒng)變量sys記錄并傳遞給。在函數(shù)體中也可以編寫(xiě)其它操作,但是sys只返回給。示例:/*/function sys = mdlDerivatives(t,x,u,A,B,C,D)sys = A*x + B*u;/*/3 狀態(tài)變量更新(flag=2)子函數(shù)m

7、dlUpdates實(shí)現(xiàn)離散狀態(tài)變量x的更新,因此在基于連續(xù)狀態(tài)變量的算法中不需要這一步運(yùn)算。4 輸出變量計(jì)算(flag=3)子函數(shù)mdlOutputs實(shí)現(xiàn)輸出變量y的表達(dá)式:f2(t,x,u),用系統(tǒng)變量sys記錄并傳遞給y。在函數(shù)體中也可以編寫(xiě)其它操作,但是sys只返回給y。示例:/*/function sys = mdlOutputs( t,x,u,A,B,C,D )sys = A*x + B*u;/*/5 采樣時(shí)刻計(jì)算(flag=4)子函數(shù)mdlGetTimeOfNextVarHit計(jì)算下一次采樣時(shí)刻,只在離散采樣系統(tǒng)中有用(即mdlInitializeSizes中的ts設(shè)置ts(1)不

8、為0)。示例:/*/function sys = mdlGetTimeOfNextVarHit( t,x,u )sys = t + u(2);/*/6 Simulink仿真結(jié)束時(shí)的操作(flag=9)編寫(xiě)simulink仿真結(jié)束時(shí)刻進(jìn)行的操作,用sys記錄返回值,但是返回值傳遞給哪個(gè)變量不詳,一般置sys=。示例:/*/function sys=mdlTerminate(t,x,u) sys = ;/*/2、 基于離散狀態(tài)變量的算法算法的整體設(shè)計(jì)思想是:x(n+1)=f1(t,x,u) y(n)=f2(t,x,u)1 初始化(flag=0)設(shè)置不使用連續(xù)狀態(tài)變量:size.NumContSta

9、tes = 0設(shè)置使用的離散狀態(tài)變量的個(gè)數(shù):size.NumDiscStates = 設(shè)置輸出變量的個(gè)數(shù):size.NumOutputs = 設(shè)置輸入變量的個(gè)數(shù):size.NumInputs = 設(shè)置輸出變量與輸入變量是否相關(guān):size.DirFeedthrough = 1或0設(shè)置采樣時(shí)間的個(gè)數(shù):size.NumSampleTimes = 用系統(tǒng)變量sys記錄并返回上述設(shè)置:sys=simsize(sizes)設(shè)置狀態(tài)變量的初始值:x0 = .設(shè)置保留變量str為空:str = 設(shè)置采樣時(shí)間類(lèi)型:ts = .示例:/*/function sys,x0,str,ts = mdlInitializ

10、eSizessizes = simsizes;sizes.NumContStates = 0;sizes.NumDiscStates = 2;sizes.NumOutputs = 2;sizes.NumInputs = 2;sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1;sys = simsizes(sizes);x0 = zeros(2,1);str = ;ts = 0 0;/*/2 狀態(tài)變量求導(dǎo)(flag=1)子函數(shù)mdlDerivatives實(shí)現(xiàn)連續(xù)狀態(tài)變量x的更新,計(jì)算f1(t,x,u),用系統(tǒng)變量sys記錄并傳遞給。因此在基于離散

11、狀態(tài)變量的算法中不需要這一步運(yùn)算。3 狀態(tài)變量更新(flag=2)子函數(shù)mdlUpdates實(shí)現(xiàn)離散狀態(tài)變量x導(dǎo)數(shù)的表達(dá)式:f1(t,x,u),用系統(tǒng)變量sys記錄并傳遞給x(n+1)。在函數(shù)體中也可以編寫(xiě)其它操作,但是sys只返回給x(n+1)。示例:/*/function sys = mdlUpdates(t,x,u,A,B,C,D)sys = A*x + B*u;/*/4 輸出變量計(jì)算(flag=3)子函數(shù)mdlOutputs實(shí)現(xiàn)輸出變量y的表達(dá)式:f2(t,x,u),用系統(tǒng)變量sys記錄并傳遞給y。在函數(shù)體中也可以編寫(xiě)其它操作,但是sys只返回給y。示例:/*/function sys = mdlUpdates( t,x,u,A,B,C,D )sys = A*x + B*u;/*/5 采樣時(shí)刻計(jì)算(flag=4)子函數(shù)mdlGetTimeOfNextVarHit計(jì)算下一次采樣時(shí)刻,只在離散采樣系統(tǒng)中有用(即mdlInitializeSizes中的ts設(shè)置ts(1)不為0)。示例:/*/function sys = mdlGetTimeOfNextVarHit( t,x,u )sy

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論