版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2024年3月6日星期三,1,Matlab 2008b下載地址:ed2k://|file|[%E7%9F%A9%E9%98%B5%E5%AE%9E%E9%AA%8C%E5%AE%A4].Mathworks.Matlab.R2008b.DVD.ISO-TBE.iso|4306182144|A2EDE3392561D89CE8EA3C37CFE2429F|h=HREWLFRSPC6YM65XD52FMVORHGGEZHVL|/網(wǎng)頁(yè):h
2、ttp://www.verycd.com/topics/430963/,2024年3月6日星期三,2,例3 考慮帶有一階延遲的多變量傳遞函數(shù)矩陣,用MATLAB命令進(jìn)行階躍響應(yīng),>>c5eg3a,step響應(yīng)是在兩路輸入單獨(dú)作用下分別得到的,表明Gij(s) (i?j)對(duì)輸入有很強(qiáng)的響應(yīng),說(shuō)明系統(tǒng)有較強(qiáng)的耦合。為了對(duì)兩路信號(hào)分別設(shè)計(jì)控制器,希望減小這種耦合。為此考慮對(duì)系統(tǒng)進(jìn)行補(bǔ)償。,2024年3月6日星期三,3,>&
3、gt; c5eg3b,例3 考慮帶有一階延遲的多變量傳遞函數(shù)矩陣,考慮補(bǔ)償矩陣Kp,并對(duì)G(s)*Kp進(jìn)行單位階躍響應(yīng)。由于對(duì)象中含有時(shí)滯,不能利用矩陣乘法,對(duì)時(shí)滯要用pade逼近,或者在simulink下仿真。,2024年3月6日星期三,4,考慮用simulink仿真,并與pade逼近的結(jié)果進(jìn)行比較,1.建立模型,2.修改模型參數(shù),2.1兩個(gè)階躍信號(hào)起始時(shí)間改為0,終值時(shí)間分別為u1,u2,2.2 修改矩陣增益為 [0.1134,
4、 0.924; 0.3378, -0.318],2.3 修改傳遞函數(shù),2024年3月6日星期三,5,考慮用simulink仿真,并與pade逼近的結(jié)果進(jìn)行比較,1.建立模型,2.修改模型參數(shù),2.4 將時(shí)滯分別改為 0.72, 0.30, 1.29.,3.用simulink模型仿真,2024年3月6日星期三,6,考慮用simulink仿真,并與pade逼近的結(jié)果進(jìn)行比較,1.建立模型,2.修改模型參數(shù),3.用simul
5、ink模型仿真,>> c5eg3c,帶有Pade逼近的第一輸入通道輸出,帶有Pade逼近的第二輸入通道輸出,Simulink仿真的第一輸入通道輸出,Simulink仿真的第二輸入通道輸出,2024年3月6日星期三,7,例4 計(jì)算機(jī)控制系統(tǒng)仿真,考慮如圖所示的計(jì)算機(jī)控制系統(tǒng),其中控制器模型D(z)是離散模型,采樣周期為T(mén)s,ZOH為零階保持器,而受控對(duì)象模型G(s)為連續(xù)模型:,對(duì)這樣的系統(tǒng)直接寫(xiě)成微分方程的形式再進(jìn)行仿真的方
6、法是行不通的,因?yàn)槠渲屑扔羞B續(xù)環(huán)節(jié),又有離散環(huán)節(jié)。所以用simulink仿真。,模型中參數(shù)a, T 需要用戶(hù)確定,,2024年3月6日星期三,8,Simulink仿真模型如下:,模型中參數(shù) a, T 需要用戶(hù)確定,而 z1, p1, K 需要由控制器模型計(jì)算。,stairs(x,y)畫(huà)出由向量 x, y 確定的階梯圖形,2024年3月6日星期三,9,仿真結(jié)果如下,T = 0.2s 時(shí),T = 1s 時(shí),2024年3月6日星期三,1
7、0,,對(duì)于該例,也可采用離散與連續(xù)傳遞函數(shù)轉(zhuǎn)換的方法,在給定采樣周期下獲得離散傳遞函數(shù)。,>> c5eg4b,Zero/pole/gain: 0.018187 (z+0.9934) (z-0.9802)-----------------------------------(z-0.9802) (z^2 - 1.801z + 0.8368) Sampling time: 0.2,2024年3月6日星期三
8、,11,,,例5 時(shí)變系統(tǒng)的仿真,考慮如圖所示控制系統(tǒng)模型,其中控制器參數(shù)Kp=200, Ki=10, 飽和非線(xiàn)性寬度為? =2,受控對(duì)象為時(shí)變模型,由以下微分方程給出,試分析該系統(tǒng)的階躍響應(yīng)曲線(xiàn)。,設(shè),,則可將系統(tǒng)寫(xiě)成,2024年3月6日星期三,12,系統(tǒng)的 simulink 模型如下,注意:1. 函數(shù)模塊中自變量是用輸入信號(hào)u表示的,u是由時(shí)鐘模塊產(chǎn)生; 2. 生成時(shí)變部分模型與狀態(tài)變量用乘法器相成即可。,2
9、024年3月6日星期三,13,>>c5eg5a,2024年3月6日星期三,14,例6 多采樣速率系統(tǒng)的仿真,如圖所示雙環(huán)電機(jī)控制系統(tǒng),內(nèi)環(huán)為電流環(huán),采樣周期為T(mén)1=0.001s,控制器模型為D1(z)=(0.0967z–0.0965)/(z–1), 控制器外環(huán)采樣周期為T(mén)2 = 0.01s,控制器模型為D2(z)=(5.2812z–5.2725)/(z–1)。,搭建simulink仿真模型,并分析階躍響應(yīng)。,2024年3月6
10、日星期三,15,Simulingk模型為,>> [t,x,y] = sim(‘c5eg6’, 2);>> plot(t,y),2024年3月6日星期三,16,例7. 系統(tǒng)的脈沖響應(yīng)分析,在simulink里并沒(méi)有提供單位脈沖信號(hào)模塊,所以可以用階躍模塊來(lái)近似,如令階躍初始值為1/a,階躍時(shí)間(即階躍寬度)為a,階躍終止時(shí)為0, 如圖。,,階躍初值,,階躍寬度,2024年3月6日星期三,17,例如將如圖所示系統(tǒng)用
11、近似單位脈沖作為輸入,觀察動(dòng)態(tài)響應(yīng),2024年3月6日星期三,18,,,指定輸入向量: [-3,-2,-1, 2,3,4 ],分段線(xiàn)性的靜態(tài)非線(xiàn)性環(huán)節(jié),指定輸出向量: [-1,-1,0,0,1,1],-3 -2 -1 0 1 2 3 4,1 0–1,2024年3月6日星期三,19,斜坡輸入響應(yīng),分段線(xiàn)性函數(shù)響應(yīng),2024年3月6日星期三,20,分
12、解,例8. 用simulink搭建如圖所示多值非線(xiàn)性環(huán)節(jié),當(dāng)u增加時(shí),取y1(u);當(dāng)u減小時(shí),取y2(u)。Simulink模型如圖。,修改模塊參數(shù),2024年3月6日星期三,21,例8. 用simulink搭建如圖所示多值非線(xiàn)性環(huán)節(jié),分解,連接模型,記憶模塊,保存上一步的值uk–1 .初值為0,將第1端口輸入值 ( 當(dāng)前值uk )與第2端口輸入值 ( 上一步的值 uk–1) 比較, uk ? uk–1時(shí)輸出1,否則為0。,當(dāng)?shù)?
13、輸入為1時(shí)(大于設(shè)定的閾值0.5),模塊輸出取第1輸入,當(dāng)?shù)?輸入為0時(shí)(小于設(shè)定的閾值0.5) ,模塊輸出去第3輸入。,2024年3月6日星期三,22,例8. 用simulink搭建如圖所示多值非線(xiàn)性環(huán)節(jié),對(duì)正弦輸入u(t)= asin t的響應(yīng),>>a=2; [t, x1, y1]=sim('c5eg8', 10);>>a=4; [t, x2, y2]=sim('c5eg8'
14、, 10);>>a=8; [t, x3, y3]=sim('c5eg8', 10);>>plot(t, [y1, y2, y3]),2024年3月6日星期三,23,例9. 類(lèi)似可以建立如下多值非線(xiàn)性,x1=[-3,-2,-1,2,3,4], y1=[-1,-1,0,0,1,1]x2=[-3,-2,-1,1,2,3], y2=[-1,-1,0,0,1,1],對(duì)正弦輸入u(t)= asin t的
15、響應(yīng),>>a=2; [t, x1, y1]=sim('c5eg8', 10);>>a=4; [t, x2, y2]=sim('c5eg8', 10);>>a=8; [t, x3, y3]=sim('c5eg8', 10);>>plot(t, [y1, y2, y3]),2024年3月6日星期三,24,非線(xiàn)性系統(tǒng)極限環(huán)的仿真研究,例10.
16、 考查如圖所示的典型非線(xiàn)性模型,其中非線(xiàn)性環(huán)節(jié)為例8中的回環(huán)非線(xiàn)性。,用simulink搭建仿真模型如圖。積分器模塊的初值設(shè)置為1,就可獲得系統(tǒng)的自激振蕩。,2024年3月6日星期三,25,>> opt=simset('RelTol',1e-8);>> [t,x,y]=sim('c5eg10',40,opt);>> subplot(121),plot(t,y)&g
17、t;> subplot(122),plot(y(:,1),y(:,2)),2024年3月6日星期三,26,十二. 編寫(xiě)M語(yǔ)言S-函數(shù),,S-函數(shù) S-函數(shù)是Simulink模塊的計(jì)算機(jī)語(yǔ)言描述,它可以用MATLAB、C、C++、Ada或Fortran語(yǔ)言編寫(xiě)。MATLAB 語(yǔ)言的 S-函數(shù)可編譯為M-文件。,S-函數(shù)使用特定的調(diào)用語(yǔ)法與Simulink中的方程求解器相互作用,接收求解器中的信息,并對(duì)求解器的指令
18、作出響應(yīng)。,S-函數(shù)的格式非常通用,可用在連續(xù)、離散、以及混雜系統(tǒng)中。 用戶(hù)可以用S-函數(shù)實(shí)現(xiàn)自己的算法,并可形成Simulink模塊。,,在模型中利用S-函數(shù) 1).首先將 S-函數(shù)模塊從Simulink /User-Defined Functions模型庫(kù)中拖拽到模型窗口;,2).打開(kāi)模型對(duì)話(huà)框, 在“S-Function name:” 欄內(nèi)填入S-函數(shù)名稱(chēng),在“S-Function parameters:”欄
19、內(nèi)填入S-函數(shù)的參數(shù)。,2024年3月6日星期三,27,function [sys,x0,str,ts]=mysfun(t,x,flag, p1,p1)% mysfun M-file% switch (flag)...,S-函數(shù)名稱(chēng),填入對(duì)話(huà)框S-function name欄,p1, p2: S-函數(shù)參數(shù),在S-function parameters欄中賦值,,,,,輸入S-函數(shù)名,允許用戶(hù)向S-函數(shù)傳遞參數(shù), 用戶(hù)必須
20、知道參數(shù)的順序、類(lèi)型, 它們可以是常數(shù)或變量, 不同參數(shù)值之間用逗號(hào)隔開(kāi),2024年3月6日星期三,28,,S-函數(shù)的工作方式Simulnk模塊的數(shù)學(xué)含義,其中,x=xc+ xd , Ts為離散狀態(tài)的采樣時(shí)間。,仿真過(guò)程初始化階段: Simulink將庫(kù)模塊結(jié)合到模型中, 傳遞信號(hào)寬度, 確定數(shù)據(jù)類(lèi)型, 采樣時(shí)間, 計(jì)算模塊參數(shù), 確定模塊執(zhí)行順序并分配內(nèi)存。,,仿真循環(huán)階段: 每通過(guò)一個(gè)仿真
21、循環(huán)稱(chēng)為一個(gè)仿真步, 在每一仿真步內(nèi), Simulink 按照初始化確定的順序執(zhí)行模型的每一模塊, 對(duì)于每一模塊, Simulink 調(diào)用相應(yīng)函數(shù)計(jì)算狀態(tài), 導(dǎo)數(shù), 并計(jì)算當(dāng)前采樣時(shí)間的輸出直到仿真結(jié)束。,2024年3月6日星期三,29,,S-函數(shù)回調(diào)方法 S-函數(shù)由一組S-函數(shù)回調(diào)方法組成, 這些方法在每個(gè)仿真階段執(zhí)行不同任務(wù), 這些任務(wù)包括: 初始化 --初始化SimStruct, 這是一個(gè)包含S-
22、 函數(shù)信息的仿真結(jié)構(gòu); --設(shè)置輸入和輸出端口的個(gè)數(shù)和維 數(shù); --設(shè)置模塊采樣時(shí)間; --分配空間和size數(shù)組。 計(jì)算下一個(gè)采樣時(shí)間點(diǎn)(適于變采 樣時(shí)間模塊)。 以最大時(shí)間步驟計(jì)算輸出。 以最大時(shí)間步更新離散狀態(tài)。 積分(適于連續(xù)狀態(tài))。,仿真步驟示意圖,2024年3月6日星期三,30,,M文件S-函數(shù)的實(shí)現(xiàn) M文件S-函數(shù)包含下列函數(shù):,[sys, x0,str,ts]=f(
23、x,t,u,flag,p1,p2,…),f: S-函數(shù)的名稱(chēng); x: S-函數(shù)對(duì)應(yīng)模塊的狀態(tài)向量; t: 當(dāng)前時(shí)間; u: 模塊輸入; flag: 標(biāo)識(shí)要執(zhí)行的任務(wù)(子函數(shù));p1,p2: 模塊參數(shù);,sys: 其含義根據(jù)標(biāo)志flag 取值不 同返回不同子函數(shù)的返回值; x0: 初始化狀態(tài)向量; str: 空矩陣(留做將來(lái)使
24、用); ts: 采樣時(shí)間.,S-函數(shù)的內(nèi)容,2024年3月6日星期三,31,,S-函數(shù)的一些概念,直接饋通:模塊的輸出(或變采樣時(shí)間的采樣時(shí)間)直接接收輸入端口值的控制。如 輸出(flag=3)是輸入 u 的函數(shù); 變采樣時(shí)間S-函數(shù)中的下一次采樣 時(shí)間點(diǎn)(flag=4)的確定要訪問(wèn)輸入u.,動(dòng)態(tài)設(shè)置數(shù)組: M文件 S-函數(shù)只有一個(gè)輸入端口, 可以接收一個(gè)向量信號(hào), 但信號(hào)寬度是可以不同的, 是
25、可以動(dòng)態(tài)指定的 (可以在sizes結(jié)構(gòu)中指定相應(yīng)的屬性值為–1 ), 也可以由輸入的維數(shù)確定輸入端口信號(hào)寬度, 連續(xù)和/或離散狀態(tài)的數(shù)目. 如果使用length(u)函,,數(shù)調(diào)用S-函數(shù), 則用戶(hù)可以確定模塊實(shí)際輸入的寬度, 如指定寬度為零, 則輸入端口被從S-函數(shù)模塊中刪除. 例如:圖中有兩個(gè)相同的S-函數(shù)模塊, 上面的模塊由一個(gè)帶有三個(gè)輸出分量的Mux向量模塊驅(qū)動(dòng), 下面的S-函數(shù)模塊由一個(gè)帶有標(biāo)
26、量輸出的模塊驅(qū)動(dòng).,2024年3月6日星期三,32,,采樣時(shí)間和偏移量的設(shè)置 在M文件S-函數(shù)中, 指定采樣時(shí)間給出了如下選項(xiàng).,? 離散采樣時(shí)間——適于用戶(hù)的S-函數(shù)模塊的行為帶有離散時(shí)間間隔, 用戶(hù)可以定義采樣時(shí)間以便控制simulink何時(shí)調(diào)用S-函數(shù)模塊, 也可以定義延遲每個(gè)采樣點(diǎn)的偏移量, 偏移量的數(shù)值不超過(guò)對(duì)應(yīng)的采樣時(shí)間. 采樣點(diǎn)時(shí)刻由下式確定,? 連續(xù)采樣時(shí)間——適于連續(xù)狀態(tài)和/或非采樣過(guò)零的S-函數(shù), 輸
27、出以最小時(shí)間步改變.,? 連續(xù)但在最小時(shí)間步固定的采樣時(shí)間——適于在每一最大仿真步上執(zhí)行, 但在最小時(shí)間步上不改變數(shù)值的S-函數(shù).,,下一采樣時(shí)刻=(n*采樣間隔)+偏移量n 從0開(kāi)始, 表示當(dāng)前仿真步數(shù). 在每個(gè)采樣時(shí)刻Simulink調(diào)用S-函數(shù)的mdlOutput函數(shù)和mdlUpdate函數(shù)來(lái)計(jì)算輸出和更新?tīng)顟B(tài).,? 變采樣時(shí)間——兩次采樣之間的時(shí)間間隔是可變的, 在每次仿真步開(kāi)始時(shí)需計(jì)算下一仿真時(shí)刻.,? 繼承
28、采樣時(shí)間——用戶(hù)可以指定模塊的采樣時(shí)間為inherited(繼承性). 對(duì)于一個(gè)模塊, 它可以繼承下列模塊的采樣時(shí)間: --驅(qū)動(dòng)模塊; --目標(biāo)模塊; --系統(tǒng)中最快的采樣時(shí)間.相應(yīng)地, 在M文件S-函數(shù)中設(shè)置采樣時(shí)間為–1.,2024年3月6日星期三,33,,采樣時(shí)間和偏移量的指定形式 ts = [ 采樣時(shí)間1, 偏移量1; 采樣時(shí)間2, 偏移量2;
29、 …… 采樣時(shí)間k, 偏移量k ]S-函數(shù)可以使用單速率系統(tǒng)和多速率系統(tǒng), 多速率系統(tǒng)有多個(gè)采樣時(shí)間.,,ts=[-1.0, Offset], 從驅(qū)動(dòng)模塊繼承采 樣時(shí)間, 但在最小時(shí)間步內(nèi)不隨 輸入改變.,有效的采樣時(shí)間對(duì)為:ts=[0.0, 0.0], 連續(xù)采樣時(shí)間;ts=[0.0, 1.0], 連續(xù)但在最小時(shí)間步 固定的采樣時(shí)間;ts=[-2.0,
30、 0.0], 變采樣時(shí)間;ts=[Period, Offset], 離散采樣時(shí)間;ts=[-1.0, 0.0], 從驅(qū)動(dòng)模塊繼承采樣 時(shí)間;,對(duì)于多速率S-函數(shù), 每個(gè)任務(wù)以不同的速率執(zhí)行, 這時(shí), ts應(yīng)該以采樣時(shí)間上升的順序指定用戶(hù) S-函數(shù)中使用的采樣速率. 如任務(wù)i 的采樣時(shí)間為: ?i , i= 1, 2, 且 ?1< ?2< 2 ?1ts = [
31、?1, ofset1; ?2, ofset2]則Simulink在下列時(shí)刻執(zhí)行S-函數(shù),[0, ofset1, ofset2, ofset1 +?1, ofset2 +?2 , ofset1 +2?1, ofset2 +2?2, ……]且在ofset1 +k ?1時(shí)執(zhí)行任務(wù)1, ofset2 +k ?2時(shí)執(zhí)行任務(wù)2.,2024年3月6日星期三,34,,M文件S-函數(shù)模板 為使Simulink識(shí)別M文件S-函數(shù),
32、 用戶(hù)必須提供S-函數(shù)的某些特定信息, 在初始化階段(flag=0), S-函數(shù)調(diào)用子函數(shù)mdlInitializeSizes,對(duì)一個(gè)sizes結(jié)構(gòu)變量初始化, sizes 結(jié)構(gòu)包含了S-函數(shù)的特定信息.,,Sizes的結(jié)構(gòu)屬性,2024年3月6日星期三,35,S-函數(shù)模板,M-文件 S函數(shù)模板sfuntmpl.m 位于 matlabroot/toolbox/simulink/blocks,我們可以通過(guò)修改該模板來(lái)建立我們自己的S
33、-函數(shù),雙擊可以打開(kāi)模板,2024年3月6日星期三,36,function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag)% The following outlines the general structure of an S-function.switch flag,case 0, [sys,x0,str,ts]=mdlInitializeSizes;
34、 % Initialization case 1, sys=mdlDerivatives(t,x,u); % Derivativescase 2, sys=mdlUpdate(t,x,u); % Update case 3, sys
35、=mdlOutputs(t,x,u); % Outputscase 4, sys=mdlGetTimeOfNextVarHit(t,x,u); % Get Time Of Next VarHitcase 9, sys=mdlTerminate(t,x,u);
36、 % Terminateotherwise error(['Unhandled flag = ',num2str(flag)]); % Unexpected flagsEnd%==========================================================,2024年3月6日星期三,37,%========================
37、=================================% mdlInitializeSizes% Return the sizes, initial conditions, and sample times for the S-function.%=========================================================function [sys,x0,str,ts]=mdlI
38、nitializeSizessizes = simsizes;sizes.NumContStates = 0;sizes.NumDiscStates = 0;sizes.NumOutputs = 0;sizes.NumInputs = 0;sizes.DirFeedthrough = 1;sizes.NumSampleTimes = 1; % at least one sample
39、 time is neededsys = simsizes(sizes);x0 = []; % initialize the initial conditionsstr = []; % str is always an empty matrixts = [0 0];
40、 % initialize the array of sample times%=========================================================,2024年3月6日星期三,38,%==========================================================% mdlDerivative
41、s% Return the derivatives for the continuous states.%==========================================================%function sys=mdlDerivatives(t,x,u)sys = []; %%=======================================================
42、===% mdlUpdate% Handle discrete state updates, sample time hits, and major time step% requirements.%==========================================================%function sys=mdlUpdate(t,x,u)sys = []; %%===========
43、===============================================,2024年3月6日星期三,39,%==========================================================% mdlOutputs% Return the block outputs.%======================================================
44、====%function sys=mdlOutputs(t,x,u)sys = []; %==========================================================% mdlGetTimeOfNextVarHit% Return the time of the next hit for this block. Note t
45、hat the result is% absolute time. Note that this function is only used when you specify a% variable discrete-time sample time [-2 0] in the sample time array in% mdlInitializeSizes.%=================================
46、=========================%function sys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime = 1; % Example, set the next hit to be one second later.sys = t + sampleTime;%===========================================
47、===============,2024年3月6日星期三,40,%%=========================================================% mdlTerminate% Perform any end of simulation tasks.%=========================================================%function sys
48、=mdlTerminate(t,x,u)sys = [];% end mdlTerminate,2024年3月6日星期三,41,靜態(tài)系統(tǒng)S-函數(shù),例1 y = 2u,function [sys,x0,str,ts] = timestwo(t,x,u,flag)%TIMESTWO S-function whose output is % two times its input.switch flag, case 0
49、 [sys,x0,str,ts]=mdlInitializeSizes; case 3 sys=mdlOutputs(t,x,u); case { 1, 2, 4, 9 } sys=[]; otherwise error(['Unhandled flag = ',num2str(flag)]);end%===============================,functio
50、n [sys,x0,str,ts] = mdlInitializeSizes()sizes = simsizes;sizes.NumContStates = 0;sizes.NumDiscStates = 0;sizes.NumOutputs = -1; sizes.NumInputs = -1; sizes.DirFeedthrough = 1; sizes.NumSampl
51、eTimes = 1;sys = simsizes(sizes);str = [];x0 = [];ts = [-1 0]; % inherited sample time%===============================function sys = mdlOutputs(t,x,u)sys = u * 2;,timetwo.m S-函數(shù)代碼如下,2024年3月6日星期三,42,進(jìn)行了封裝,輸出幅值
52、為1:2的正弦波,輸出為幅值為1:3, 周期為1, 寬度為0.5s的矩形波,2024年3月6日星期三,43,例2 y = ku , k為用戶(hù)指定的靜態(tài)增益,sfun_vargain.m S-函數(shù)代碼如下,function [sys,x0,str,ts] = … sfun_vargain(t,x,u,flag,gain)switch flag, case 0 [sys,x0,st
53、r,ts]=mdlInitializeSizes; case 3 sys=mdlOutputs(t,x,u,gain); case { 1, 2, 4, 9 } sys=[]; otherwise error(['Unhandled flag = ',num2str(flag)]);end%===============================function [sys,
54、x0,str,ts] = mdlInitializeSizes()sizes = simsizes;,sizes.NumContStates = 0;sizes.NumDiscStates = 0;sizes.NumOutputs= -1; % 動(dòng)態(tài)指定sizes.NumInputs= -1; % 動(dòng)態(tài)指定sizes.DirFeedthrough = 1; % 有直接饋通si
55、zes.NumSampleTimes = 1;sys = simsizes(sizes);str = [];x0 = [];ts = [-1 0]; % 繼承采樣時(shí)間%===============================function sys = mdlOutputs(t,x,u,gain)sys = u * gain;,2024年3月6日星期三,44,打
56、開(kāi)對(duì)話(huà)框, 選擇增益,填入所選增益, 如4,仿真,2024年3月6日星期三,45,連續(xù)系統(tǒng)S-函數(shù),例3. 建立一個(gè)積分器, 它的初值作為用戶(hù)輸入. 狀態(tài)方程為,sfun_int.m S-函數(shù)代碼如下,function [sys,x0,str,ts] = … sfun_int(t,x,u,flag,initial_state)switch flag, case 0, [sys,x0
57、,str,ts]=… mdlInitializeSizes(initial_state); case 1, sys=mdlDerivatives(t,x,u); case 3, sys=mdlOutputs(t,x,u); case {2,4,9} sys=[];otherwise error(['Unhandled flag = ',n
58、um2str(flag)]);end,%==============================function [sys,x0,str,ts]=… mdlInitializeSizes(initial_state)sizes = simsizes;sizes.NumContStates = 1;sizes.NumDiscStates = 0;sizes.NumOutputs
59、 = 1;sizes.NumInputs = 1;sizes.DirFeedthrough = 0;sizes.NumSampleTimes = 1; sys = simsizes(sizes);x0 = [initial_state];str = [];ts = [0 0];%==============================function sys=mdlDeriva
60、tives(t,x,u)sys = [u];%==============================function sys=mdlOutputs(t,x,u)sys = x;,2024年3月6日星期三,46,打開(kāi)對(duì)話(huà)框, 選擇初始狀態(tài),填入所選初始狀態(tài), 如5,仿真,2024年3月6日星期三,47,,,例4. 蹦極跳系統(tǒng)的微分方程可寫(xiě)為:,k: 彈性系數(shù) m: 物體質(zhì)量 g: 重
61、力加速度a1, a2: 空氣阻尼系數(shù),令 , h為距離地面的距離, 則系統(tǒng)方程可寫(xiě)為:,構(gòu)造S-函數(shù), 取k =5; a1=1; a2=1; g=10. 輸入長(zhǎng)度(x1的初始值), 質(zhì)量m和距離地面的距離h.,2024年3月6日星期三,48,sfun_bungee.m S-函數(shù)代碼如下,function [sys,x0,str,ts] = sfun_bungee(t,x,u,flag,
62、len,weight,dist_ground)% bungee jumping sfunction:k=5;a1=1;a2=1;g=10;% length,weight,distance from ground are input parametersk=5;a1=1;a2=1;g=10;switch flag, case 0, [sys,x0,str,ts]=mdlInitializeSizes(len); c
63、ase 1, sys=mdlDerivatives(t,x,u,weight,k,a1,a2,g); case 2, sys=mdlUpdate(t,x,u); case 3, sys=mdlOutputs(t,x,u,dist_ground); case 4, sys=mdlGetTimeOfNextVarHit(t,x,u); case 9, sys=mdlTerminate(
64、t,x,u); otherwise error(['Unhandled flag = ',num2str(flag)]);end,,輸入?yún)?shù),輸入?yún)?shù),輸入?yún)?shù),,,,,設(shè)定參數(shù),設(shè)定參數(shù),,輸入?yún)?shù),2024年3月6日星期三,49,%==================================================function [sys,x0,str,ts]=mdlInitiali
65、zeSizes(len)sizes = simsizes;sizes.NumContStates = 2;sizes.NumDiscStates = 0;sizes.NumOutputs = 1;sizes.NumInputs = 0;sizes.DirFeedthrough = 0;sizes.NumSampleTimes = 1; % at least one sample time is
66、 neededsys = simsizes(sizes);x0 = [-len;0];str = [];ts = [0 0];%==================================================,,,2024年3月6日星期三,50,%===============================================function sys=mdlDerivatives(t
67、,x,u,weight,k,a1,a2,g)if x(1)<0 b=0;else b=-k*x(1);endx1dot=x(2);x2dot=1/weight*(weight*g+b-a1*x(2)-a2*abs(x(2))*x(2));sys = [x1dot;x2dot];% end mdlDerivatives%=========================================
68、======function sys=mdlUpdate(t,x,u)sys = [];% end mdlUpdate%===============================================function sys=mdlOutputs(t,x,u,dist_ground)sys = dist_ground-x(1);% end mdlOutputs%=======================
69、========================,,,,2024年3月6日星期三,51,%====================================================function sys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime = 1; % Example, set the next hit to be one second later.sys = t
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 控制系統(tǒng)計(jì)算機(jī)輔助設(shè)計(jì)信息融合方法實(shí)現(xiàn).pdf
- 計(jì)算機(jī)輔助設(shè)計(jì)
- 計(jì)算機(jī)輔助設(shè)計(jì)試題
- 淺談?dòng)?jì)算機(jī)輔助設(shè)計(jì)
- 餐盒計(jì)算機(jī)輔助設(shè)計(jì)
- 計(jì)算機(jī)輔助設(shè)計(jì)實(shí)習(xí)報(bào)告
- 計(jì)算機(jī)輔助設(shè)計(jì)有答案
- 計(jì)算機(jī)輔助設(shè)計(jì)譯文.docx
- 家用中央空調(diào)系統(tǒng)計(jì)算機(jī)輔助設(shè)計(jì).pdf
- 計(jì)算機(jī)輔助設(shè)計(jì)開(kāi)題報(bào)告
- 計(jì)算機(jī)輔助設(shè)計(jì)論文要求
- 計(jì)算機(jī)輔助設(shè)計(jì)譯文.docx
- 計(jì)算機(jī)輔助設(shè)計(jì)譯文.docx
- 計(jì)算機(jī)輔助設(shè)計(jì)與制造
- 屏蔽電機(jī)計(jì)算機(jī)輔助設(shè)計(jì)
- 帶傳動(dòng)計(jì)算機(jī)輔助設(shè)計(jì)系統(tǒng).pdf
- 外文翻譯---計(jì)算機(jī)輔助設(shè)計(jì)和計(jì)算機(jī)輔助(cadcam)
- 飛機(jī)電氣系統(tǒng)計(jì)算機(jī)輔助設(shè)計(jì)(ECAD).pdf
- 氣動(dòng)系統(tǒng)計(jì)算機(jī)輔助設(shè)計(jì)的技術(shù)研究.pdf
- 屏蔽電機(jī)計(jì)算機(jī)輔助設(shè)計(jì).pdf
評(píng)論
0/150
提交評(píng)論