You are on page 1of 8

‫ﺑﻨﺎﻡ ﺧﺪﺍ‬

‫‪١‬‬
‫ﺗﻮﺍﺑﻊ ﺍﺱ‬

‫ﺗﺎﺑﻊ ﺍﺱ ﭼﻴﺴﺖ؟‬

‫ﺗﻮﺍﺑﻊ ﺍﺱ ﺍﻣﮑﺎﻥ ﺗﻌﺮﻳﻒ ﺑﻠﻮﮎ ﺳﻴﻤﻴﻮﻟﻴﻨﮏ ﺳﻔﺎﺭﺷﻲ ﺑﻪ ﮐﻤﮏ ﺑﺮﻧﺎﻣﻪ ‪ MATLAB‬ﻳﺎ ‪ C‬ﺭﺍ ﻓﺮﺍﻫﻢ ﻣﻲﮐﻨﺪ‪ .‬ﺍﮔﺮ ﺑﺮﻧﺎﻣﻪ ‪ C‬ﻳـﺎ‬
‫‪ MATLAB‬ﮐﻪ ﺑﺨﺸﻲ ﺍﺯ ﺳﻴﺴﺘﻢ ﺭﺍ ﻣﺪﻝ ﻣﻲﮐﻨﺪ ﻣﻮﺟـﻮﺩ ﺑﺎﺷـﺪ )ﮐـﻪ ﻧﻤـﺎﻳﺶ ﺁﻥ ﺩﺭ ﺳـﻴﻤﻴﻮﻟﻴﻨﮏ ﺑـﺎ ﺗﺮﮐﻴـﺐ ﻭ ﺳـﻨﺘﺰ‬
‫ﺑﻠﻮﮐﻬﺎﻱ ‪ Built-in‬ﻣﻮﺟﻮﺩ‪ ،‬ﻣﻤﮑﻦ ﻧﻤﻲﺑﺎﺷﺪ ﻳﺎ ﺑﻪ ﻋﻠﺖ ﺣﺠﻴﻢ ﺑﻮﺩﻥ ﺣﻮﺻﻠﻪ ﭘﻴﺎﺩﻩﺳﺎﺯﻱ ﺁﻧﺮﺍ ﻧﺪﺍﺭﻳﺪ!( ﻣﻤﮑﻦ ﺍﺳﺖ ﺑﺨﻮﺍﻫﻴﺪ‬
‫ﺍﺯ ﻫﻤﻴﻦ ﺑﺮﻧﺎﻣﻪ ﺩﺭ ﻣﺪﻝ ﺳﻴﻤﻴﻮﻟﻴﻨﮏ ﺍﺳﺘﻔﺎﺩﻩ ﮐﻨﻴﺪ‪ .‬ﻣﺜﻼﹰ ﻣﻲﺧﻮﺍﻫﻴﺪ ﮐﻨﺘﺮﻟﺮ ﺑﺮﺍﻱ ﻣﺪﻟﻲ ﻃﺮﺍﺣﻲ ﮐﻨﻴﺪ ﮐﻪ ﮐﺪﻳﻨﮓ ﺍﻡﻓﺎﻳـﻞ‬
‫ﺁﻧﺮﺍ ﺩﺍﺭﻳﺪ‪ MATLAB .‬ﺗﺎﺑﻊ ﺍﺱ ﺭﺍ ﺑﺮﺍﻱ ﺗﺤﻘﻖ ﺍﻣﻮﺭ ﺫﮐﺮ ﺷﺪﻩ ﺑﻪ ﺷﻤﺎ ﭘﻴﺸﻨﻬﺎﺩ ﻣﻲﮐﻨﺪ‪ .‬ﺗﺎﺑﻊ ﺍﺱ ﻋـﻼﻭﻩ ﺑـﺮ ﺍﻳﻨﮑـﻪ ﺍﻣﮑـﺎﻥ‬
‫ﺗﻌﺎﻣﻞ ﺑﺎ ‪ Solver‬ﻣﻌﺎﺩﻻﺕ ﺩﺭ ﺳﻴﻤﻴﻮﻟﻴﻨﮏ ﺭﺍ ﺍﻳﺠﺎﺩ ﻣﻲ ﮐﻨﺪ‪ ،‬ﺍﺯ ﺟﺎﻣﻌﻴﺖ ﮐﺎﻓﻲ ﺑﺮﺍﻱ ﺳـﺎﺧﺖ ﻣـﺪﻝ ﺳﻴﺴـﺘﻤﻬﺎﻱ ﭘﻴﻮﺳـﺘﻪ‪،‬‬
‫ﮔﺴﺴﺘﻪ ﻭ ﻫﻴﺒﺮﻳﺪ ﺑﺮﺧﻮﺭﺩﺍﺭ ﺍﺳﺖ‪.‬‬

‫ﺑﻠﻮﮎ ﻭ ﭘﻨﺠﺮﻩ ﻣﮑﺎﻟﻤﻪ ﺗﺎﺑﻊ ﺍﺱ‬

‫& ‪Drag‬‬ ‫ﺑﻠﻮﮎ ‪ S-Function‬ﺭﺍ ﺍﺯ ﺷﺎﺧﻪ ‪ User-defined Function‬ﺩﺭ ‪ Simulink Library Browser‬ﺍﻧﺘﺨﺎﺏ ﮐﺮﺩﻩ ﻭ ﺑـﺎ‬
‫‪ Drop‬ﺩﺭ ﺩﺭ ﻓﻀﺎﻱ ﺳﻴﻤﻴﻮﻟﻴﻨﮏ ﻗﺮﺍﺭ ﺩﻫﻴﺪ‪ .‬ﺑﺎ ﺑﺎﺯ ﮐﺮﺩﻥ ﺑﻠﻮﮎ ﻓﻮﻕ ﭘﻨﺠﺮﻩ ﺯﻳﺮ ﻣﺸﺎﻫﺪﻩ ﻣﻲﺷﻮﺩ‪:‬‬

‫ﺗﺎﺑﻊ ﺍﺱ ﻣﺎﻧﻨﺪ ﺩﻳﮕﺮ ﺗﻮﺍﺑﻊ ﺩﺭ ‪ MATLAB‬ﺩﺭ ‪ M-File‬ﻧﻮﺷﺘﻪ ﻣﻲﺷﻮﺩ ﻭ ‪ M-File‬ﺁﻥ ﺑـﺎ ﻧـﺎﻡ ﺍﻧﺘﺨـﺎﺑﻲ ﺑـﺮﺍﻱ ﺗـﺎﺑﻊ ﺫﺧﻴـﺮﻩ‬
‫ﻣﻲﺷﻮﺩ‪ .‬ﻟﺬﺍ ﻫﺮﮔﺎﻩ ﮐﻪ ﺗﺎﺑﻊ ﺭﺍ ﻓﺮﺍﺧﻮﺍﻧﻲ ﮐﻨﻴﺪ‪ MATLAB ،‬ﺩﺭ ﭘﺸﺖ ﺻﺤﻨﻪ ‪ M-File‬ﻣﺮﺑﻮﻁ ﺑﻪ ﺁﻧﺮﺍ ﺍﺟﺮﺍ ﻣﻲﮐﻨﺪ‪.‬‬
‫ﺩﺭ ﺑﻠﻮﮎ ﺗﺎﺑﻊ ﺍﺱ‪ ،‬ﺩﺭ ﻣﺤﻠﻲ ﮐﻪ ﺍﺯ ﺷﻤﺎ ﺧﻮﺍﺳﺘﻪ ﺷﺪﻩ ﻧﺎﻡ ﺗﺎﺑﻊ ﺭﺍ ﻭﺍﺭﺩ ﮐﻨﻴﺪ‪ ،‬ﻧﺎﻡ ‪M-File‬ﺍﻱ ﮐﻪ ﺗﺎﺑﻊ ﺍﺱ ﺭﺍ ﺩﺭ ﺁﻥ ﺫﺧﻴـﺮﻩ‬
‫ﮐﺮﺩﻩﺍﻳﺪ ﺑﺪﻭﻥ ﭘﺴﻮﻧﺪ ‪ m ٢‬ﻭﺍﺭﺩ ﻣﻲﮐﻨﻴﺪ‪.‬‬
‫ﻣﻤﮑﻦ ﺍﺳﺖ ﺗﺎﺑﻊ ﺍﺱ ﺷﻤﺎ ﻧﻴﺎﺯ ﺑﻪ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻳﻲ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﮐﻪ ﺍﻧﺘﺨﺎﺏ ﺁﻥ ﺑﺮﻋﻬﺪﻩ ﮐـﺎﺭﺑﺮ )ﻳـﺎ( ﻃـﺮﺍﺡ ﺍﺳـﺖ‪ .‬ﻟﻴﺴـﺖ ﺍﻳـﻦ‬
‫ﭘﺎﺭﺍﻣﺘﺮﻫﺎ ﮐﻪ ﺑﺎ " ‪ ",‬ﺍﺯ ﻫﻢ ﺟﺪﺍ ﺷﺪﻩﺍﻧﺪ ﺑﺪﻭﻥ ﺁﻧﮑﻪ ﺩﺭ ﺩﺍﺧﻞ ﺑﺮﺍﮐﺖ ﻗﺮﺍﺭ ﺑﮕﻴﺮﻧﺪ ﺩﺭ ﺑـﺎﮐﺲ ‪ S-Function Parameters‬ﻭﺍﺭﺩ‬
‫ﻣﻲﺷﻮﻧﺪ‪.‬‬

‫‪1‬‬
‫‪- S - Function‬‬
‫‪2‬‬
‫‪- Extension‬‬
‫‪١‬‬
‫ﺗﺎﺑﻊ ﺍﺱ ﭼﮕﻮﻧﻪ ﮐﺎﺭ ﻣﻲﮐﻨﺪ؟‬

‫ﻓﻬﻢ ﻋﻤﻠﮑﺮﺩ ﺗﺎﺑﻊ ﺍﺱ ﻣﺴﺘﻠﺰﻡ ﻓﻬﻢ ﻧﮕﺮﺵ ﺳﻴﻤﻴﻮﻟﻴﻨﮏ ﺩﺭ ﺷﺒﻴﻪ ﺳﺎﺯﻱ ﻳﮏ ﺑﻠﻮﮎ ﺍﺳﺖ ﮐـﻪ ﺧـﻮﺩ ﺗـﺎﺑﻊ ﺩﺭﮎ ﺭﻳﺎﺿـﻴﺎﺕ‬
‫ﺣﺎﮐﻢ ﺑﺮ ﺑﻠﻮﮐﻬﺎ ﺍﺳﺖ‪.‬‬

‫‪ -۱‬ﺭﻳﺎﺿﻴﺎﺕ ﭘﺸﺘﻴﺒﺎﻥ‬

‫ﻫﻤﺎﻧﻄﻮﺭ ﮐﻪ ﺩﺭ ﺷﮑﻞ )‪ (۱‬ﻣﻼﺣﻈﻪ ﻣﻲﮐﻨﻴﺪ ﻫﺮ ﺑﻠﻮﮎ ﻳﮏ ﻓﻀﺎﻱ ﺣﺎﻟﺖ )ﻭﺭﻭﺩﻱ ‪ -‬ﺣﺎﻟﺖ‪ -‬ﺧﺮﻭﺟﻲ( ﺍﺳﺖ‪.‬‬

‫)‪(۱‬‬
‫ﮐﻪ ﺍﺯ ﺩﻭ ﺑﺨﺶ ﺗﺸﮑﻴﻞ ﺷﺪﻩ ﺍﺳﺖ‪:‬‬
‫‪ -١‬ﺩﻳﻨﺎﻣﻴﮏ ﻓﻀﺎﻱ ﺣﺎﻟﺖ ﮐﻪ ﺷﺎﻣﻞ ﻣﻌﺎﺩﻻﺕ ﺩﻳﻔﺮﺍﻧﺴﻴﻞ ﻭ ﺩﻳﻔﺮﻧﺲ ﺍﺳﺖ‪.‬‬
‫‪ -٢‬ﺟﺒﺮ ﻓﻀﺎﻱ ﺣﺎﻟﺖ ﮐﻪ ﺑﻴﺎﻧﮕﺮ ﺭﺍﺑﻄﻪ ﺣﺎﻻﺕ‪ ،‬ﻭﺭﻭﺩﻳﻬﺎ ﻭ ﺧﺮﻭﺟﻴﻬﺎﺳﺖ‪:‬‬

‫‪٢‬‬
‫‪ -۲‬ﻣﺮﺍﺣﻞ ﺷﺒﻴﻪﺳﺎﺯﻱ‬

‫ﺷﮑﻞ )‪(۲‬‬

‫ﻧﺤﻮﻩ ﻧﻮﺷﺘﻦ ﺗﺎﺑﻊ ﺍﺱ ﺍﻡﻓﺎﻳﻞ‬

‫ﺍﻟﮕﻮﻱ ﺍﻡ ﻓﺎﻳﻞ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺗﻮﺳﻂ ‪ Mathworks‬ﺩﺭ ﺷﺎﺧﻪ‪:‬‬


‫‪matlabroot/toolbox/simulink/blocks/msfuntmpl.m‬‬
‫ﺗﺤﺖ ﻋﻨﻮﺍﻥ ‪ sfuntmpl.m‬ﻣﻮﺟﻮﺩ ﺍﺳﺖ ﮐﻪ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺁﻥ ﺑﻪ ﻋﻨﻮﺍﻥ ﻧﻘﻄﻪ ﺷﺮﻭﻉ ﺩﺭ ﺍﻳﺠﺎﺩ ﺗﺎﺑﻊ ﺍﺱ ﺗﻮﺻﻴﻪ ﻣﻲﺷﻮﺩ‪ .‬ﺑـﺎ‬
‫ﺍﻳﻦ ﮐﺎﺭ ﺩﻳﮕﺮ ﺍﺣﺘﻴﺎﺟﻲ ﺑﻪ ﺗﺎﻳﭗ ﺑﺨﺸﻬﺎﻳﻲ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﻧﺪﺍﺭﻳﺪ ﻭ ﺑﻪ ﻋﻼﻭﻩ ﺍﺯ ﺗﺎﺑﻊ ﺍﺳﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﮐﻨﻴﺪ ﮐـﻪ ﺍﺯ ﻗﺮﺍﺭﺩﺍﺩﻫـﺎﻱ‬
‫‪ Mathworks‬ﺗﺒﻌﻴﺖ ﻣﻲﮐﻨﺪ‪.‬‬
‫ﺍﻭﻟﻴﻦ ﻋﺒﺎﺭﺕ ﻗﺎﺑﻞ ﺍﺟﺮﺍ ﺩﺭ ﺍﻡﻓﺎﻳﻞ ﻓﻮﻕ )ﻭ ﺩﺭ ﺗﻤﺎﻣﻲ ﺗﻮﺍﺑﻊ ﺍﺱ( ﺑﻪ ﻓﺮﻡ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬
‫)‪function [sys,x0,str,ts] = sfunc_name(t,x,u,flag,p1,p2,K pn‬‬
‫ﮐﻪ ﺩﺭ ﺁﻥ ‪ sfunc_name‬ﻧﺎﻡ ﺗﺎﺑﻊ ﺍﺱ ﺍﺳﺖ ﻭ ﺍﻡ ﻓﺎﻳﻞ ﺗﺎﺑﻊ ﺍﺱ ﺑﺼﻮﺭﺕ‪ sfunc_name.m :‬ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﺗﻌﺮﻳﻒ‬
‫ﺁﺭﮔﻮﻣﺎﻧﻬﺎﻱ ﻭﺭﻭﺩﻱ ﺩﺭ ﺟﺪﻭﻝ )‪ (۱‬ﻭ ﺁﺭﮔﻮﻣﺎﻧﻬﺎﻱ ﺧﺮﻭﺟﻲ ﺗﺎﺑﻊ ﺩﺭ ﺟﺪﻭﻝ )‪ (۲‬ﺩﻳﺪﻩ ﻣﻲﺷﻮﺩ‪.‬‬
‫ﺍﻡ ﻓﺎﻳﻞ ﺗﺎﺑﻊ ﺍﺱ ﻣﻄﺎﺑﻖ ﺑﺎ ﻣﻘﺪﺍﺭ ﺍﺭﺳﺎﻟﻲ ‪ flag‬ﺩﺭ ﻫﺮ ﺑﺎﺭ ﻓﺮﺍﺧﻮﺍﻧﻲ ﺗﻮﺳﻂ ﺳﻴﻤﻴﻮﻟﻴﻨﮏ‪ ،‬ﻋﻤﻞ ﻣﺘﺎﻧﺎﻇﺮﻱ ﮐﻪ ﺩﺭ ﺟﺪﻭﻝ )‪(۳‬‬
‫ﺑــﺪﺍﻥ ﺍﺷــﺎﺭﻩ ﺷــﺪﻩ ﺭﺍ ﺍﻧﺠــﺎﻡ ﻣــﻲﺩﻫــﺪ‪ .‬ﺑــﺪﻳﻦ ﻣﻨﻈــﻮﺭ‪ ،‬ﺩﺭ ﺍﻟﮕــﻮﻱ ﺍﺭﺍﻳــﻪ ﺷــﺪﻩ ﺗﻮﺳــﻂ ‪ Mathworks‬ﺍﺯ ﺩﺳــﺘﻮﺭ‬
‫‪ switch-case‬ﺍﺳﺘﻔﺎﺩﻩ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫‪٣‬‬
‫‪flag=0 -۱‬‬

‫ﺑﺎ ﻓﺮﺍﺧﻮﺍﻧﻲ ﺗﺎﺑﻊ ﺍﺱ ﺑﺎ ‪ flag=0‬ﺗـﺎﺑﻊ ‪ mdlInitializeSizes‬ﺻـﺪﺍ ﺯﺩﻩ ﺷـﺪﻩ ﻭ ﺧﺮﻭﺟـﻲ ﺁﻥ ﺑـﻪ ]‪[sys,x0,str,ts‬‬
‫ﻧﺴﺒﺖ ﺩﺍﺩﻩ ﻣﻲﺷﻮﺩ‪ .‬ﺗﻌﺮﻳﻒ ﺗﺎﺑﻊ ‪ mdlInitializeSizes‬ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬
‫‪function [sys,x0,str,ts]=mdlInitializeSizes‬‬
‫;‪sizes = simsizes‬‬
‫; ?= ‪sizes.NumContStates‬‬
‫; ?= ‪sizes.NumDiscStates‬‬
‫;?= ‪sizes.NumOutputs‬‬
‫;?= ‪sizes.NumInputs‬‬
‫; ?= ‪sizes.DirFeedthrough‬‬
‫;?= ‪sizes.NumSampleTimes‬‬
‫;)‪sys = simsizes(sizes‬‬
‫;? = ‪x0‬‬
‫;][ = ‪str‬‬
‫;]‪ts = [0 0‬‬
‫ﺗﺎﺑﻊ ‪ mdlInitializeSizes‬ﺁﺭﮔﻮﻣﺎﻥ ﻭﺭﻭﺩﻱ ﻧﺪﺍﺭﺩ ﻭ ﺍﺯ ﺁﺭﮔﻮﻣﺎﻧﻬﺎﻱ ﻭﺭﻭﺩﻱ ﺗﺎﺑﻊ ﺍﺱ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﮐﻨﺪ‪ .‬ﺩﺭ ﮔﺎﻡ ﻧﺨﺴـﺖ‪،‬‬
‫ﺳﺎﺧﺘﺎﺭ ‪ sizes‬ﺑﺎ ﮐﻤﮏ ﺗﺎﺑﻊ ‪ simsizes Built-in‬ﺳﻴﻤﻴﻮﻟﻴﻨﮏ ﺳﺎﺧﺘﻪ ﻣﻲﺷﻮﺩ‪ .‬ﺍﮔﺮ ﺑﺎ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﺷﺊ ﮔﺮﺍ ﻣـﺄﻧﻮﺱ‬
‫ﺑﺎﺷﻴﺪ ﻣﻲﺩﺍﻧﻴﺪ ﮐﻪ ﺳﺎﺧﺘﺎﺭﻫﺎ ‪ ،١‬ﮐﻼﺳﻬﺎﻳﻲ ﻫﺴﺘﻨﺪ ﮐﻪ ﺗﻨﻬﺎ ‪ Attribute‬ﺩﺍﺭﻧﺪ ﻭ ﺑﺮﺍﻱ ﺩﺳﺘﺮﺳﻲ ﻭ ﻣﻘـﺪﺍﺭ ﺩﻫـﻲ ﺑـﻪ ﺍﻋﻀـﺎ‬
‫ﺁﻧﻬﺎ ﺍﺯ ﺍﻟﮕﻮﻱ ﺯﻳﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﺷﻮﺩ‪:‬‬
‫‪structurename.attribute1‬‬
‫)‪structurename ® attribute1 (if attribute1 is e pinter‬‬
‫ﭘﺲ ﺍﺯ ﺍﻳﺠﺎﺩ ‪ sizes‬ﺗﻤﺎﻣﻲ ﺍﻋﻀﺎﻱ ﺁﻥ ﺑﺎﻳﺴﺘﻲ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﺷﻮﻧﺪ‪ .‬ﺩﺭ ﺟﺪﻭﻝ )‪ (۴‬ﻟﻴﺴﺖ ﺍﻋﻀـﺎﻱ ‪ sizes‬ﻭ ﺗﻌـﺎﺭﻳﻒ ﺁﻧﻬـﺎ‬
‫ﺁﻣﺪﻩ ﺍﺳﺖ‪.‬‬
‫ﺗﻮﺟﻪ‪ :‬ﺍﮔﺮ ﺳﺎﻳﺰ ﻭﺭﻭﺩﻱ ﺍﺯ ﭘﻴﺶ ﻣﻌﻠـﻮﻡ ﻧﻴﺴـﺖ )ﺑﺼـﻮﺭﺕ ﺩﻳﻨـﺎﻣﻴﮑﻲ ﻭ ﺩﺭ ﺣـﻴﻦ ﺷـﺒﻴﻪﺳـﺎﺯﻱ ﻣﺸـﺨﺺ ﻣـﻲﺷـﻮﺩ( ﻟـﺬﺍ‬
‫‪ sizes.NumInputs =-1‬ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﮐﻨﻴﺪ‪ .‬ﻫﺮﮐﺪﺍﻡ ﺍﺯ‪:‬‬
‫‪sizes.NumContStates‬‬
‫‪sizes.NumDiscStates‬‬
‫‪sizes.NumOutputs‬‬
‫ﮐﻪ ﻭﺍﺑﺴﺘﻪ ﺑﻪ ﻭﺭﻭﺩﻱ ﻣﻲﺑﺎﺷﻨﺪ ﺑﺎﻳﺪ ﺑﻪ ﻫﻤﻴﻦ ﺗﺮﺗﻴﺐ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﺷﻮﻧﺪ‪.‬‬
‫ﭘﺲ ﺍﺯ ﺗﻌﺮﻳﻒ ﺳﺎﺧﺘﺎﺭ ‪ ، sizes‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﺳﺘﻮﺭ‪:‬‬
‫;)‪sys = simsizes(sizes‬‬
‫ﺳﺎﺧﺘﺎﺭ ‪ sizes‬ﺑﻪ ﺑﺮﺩﺍﺭ ﺳﻄﺮﻱ ‪ sys‬ﮐﻪ ﻗﺎﺑﻞ ﭘﺮﻭﺳﺲ ﺗﻮﺳﻂ ﺳﻴﻤﻴﻮﻟﻴﻨﮏ ﺍﺳﺖ ﺗﺒﺪﻳﻞ ﻣﻲﺷﻮﺩ‪.‬‬
‫ﺩﺭ ﮔﺎﻡ ﺩﻭﻡ ﻣﻘﺎﺩﻳﺮ ﺍﻭﻟﻴﻪ ﺣﺎﻻﺕ ) ﭘﻴﻮﺳﺘﻪ ﻭ ﮔﺴﺴﺘﻪ( ﺑﺼﻮﺭﺕ ﻳﮏ ﺑﺮﺩﺍﺭ ﺳﻄﺮﻱ ﺑﻪ ‪ x0‬ﺗﺨﺼﻴﺺ ﺩﺍﺩﻩ ﻣﻲﺷﻮﺩ‪.‬‬
‫ﺩﺭ ﮔﺎﻡ ﺳﻮﻡ‪ str ،‬ﺑﺎ ﺑﺮﺩﺍﺭ ﺗﻬﻲ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﻣﻲﺷﻮﺩ‪.‬‬
‫ﻭ ﺩﺭ ﮔﺎﻡ ﺁﺧﺮ‪ ،‬ﻣﺎﺗﺮﻳﺲ ﺟﻔﺘﻬﺎﻱ )ﺯﻣﺎﻥ ﻧﻤﻮﻧﻪ ﺑﺮﺩﺍﺭﻱ ‪ -‬ﺁﻓﺴﺖ( ﺑﻪ ‪ ts‬ﻧﺴﺒﺖ ﺩﺍﺩﻩ ﻣﻲﺷﻮﺩ‪.‬‬
‫ﺑﺮﺍﻱ ﺗﺎﺑﻊ ﺍﺱ ﭘﻴﻮﺳﺘﻪ‪:‬‬

‫‪1‬‬
‫‪- Structure‬‬
‫‪٤‬‬
‫]‪ts=[0,0‬‬
‫ﺑﺮﺍﻱ ﺯﻣﺎﻥ ﻧﻤﻮﻧﻪ ﺑﺮﺩﺍﺭﻱ ﻣﻮﺭﻭﺛﻲ )ﮐﻪ ﺍﺯ ﺑﻠﻮﮎ ﻣﺘﺼﻞ ﺑﻪ ﻭﺭﻭﺩﻱ ﺗﺎﺑﻊ ﺍﺱ‪ ،‬ﻣﻮﺭﻭﺛﻲ ﺍﺳﺖ(‪:‬‬
‫]‪ts=[-1,0‬‬
‫ﺑﺮﺍﻱ ﺯﻣﺎﻥ ﻧﻤﻮﻧﻪ ﺑﺮﺩﺍﺭﻱ ﻣﺘﻐﻴﻴﺮ )ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﺗﺎﺑﻊ ﺍﺱ ‪ flag=4‬ﺭﺍ ﺑﺮﺍﻱ ﻣﺤﺎﺳﺒﻪ ﺯﻣﺎﻥ ﻧﻤﻮﻧﻪ ﺑﻌﺪﻱ ﻓﺮﺍ ﻣﻲﺧﻮﺍﻧﺪ(‪:‬‬
‫]‪ts=[-2,0‬‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﮐﻨﻴﺪ‪.‬‬

‫‪flag=1 -۲‬‬

‫ﺑﺎ ﻓﺮﺍﺧﻮﺍﻧﻲ ﺗﺎﺑﻊ ﺍﺱ ﺑﺎ ‪ flag=1‬ﺗﺎﺑﻊ ‪ mdlDerivatives‬ﺻﺪﺍ ﺯﺩﻩ ﺷﺪﻩ ﻭ ﻣﻌﺎﺩﻻﺕ ﺩﻳﻔﺮﺍﻧﺴﻴﻞ ﺣﺎﻻﺕ ) &‪ ( x‬ﺑﻪ ﺗﺮﺗﻴﺐ‬
‫ﺗﻌﺮﻳﻒ ﺣﺎﻻﺕ ) ‪ ( x‬ﺑﻪ ﺳﻄﺮﻫﺎﻱ ‪ sys‬ﻧﺴﺒﺖ ﺩﺍﺩﻩ ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫ﻣﺜﺎﻝ‪ :‬ﺳﻴﺴﺘﻢ ﻏﻴﺮﺧﻄﻲ ﺯﻳﺮ ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪:‬‬
‫‪ìï x&1 = x 2‬‬
‫‪í‬‬
‫‪ïî x& 2 = x 1 - 3x 2 + u 1‬‬
‫‪2‬‬

‫ﺩﺳﺘﻮﺭﺍﺕ ﺯﻳﺮ ‪ sys‬ﺭﺍ ﺑﻄﻮﺭ ﻣﻨﺎﺳﺐ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﻣﻲﮐﻨﺪ‪:‬‬


‫;)‪sys(1)=x(2‬‬
‫;)‪sys(2)=x(1)-3* x(2)^2+u(1‬‬
‫ﻳﺎ‪:‬‬
‫;])‪sys=[x(2),x(1)-3* x(2)^2+u(1‬‬

‫‪flag=2 -۳‬‬

‫ﺑﺎ ﻓﺮﺍﺧﻮﺍﻧﻲ ﺗﺎﺑﻊ ﺍﺱ ﺑﺎ ‪ flag=2‬ﺗﺎﺑﻊ ‪ mdlUpdate‬ﺻﺪﺍ ﺯﺩﻩ ﺷﺪﻩ ﻭ ﻣﻌﺎﺩﻻﺕ ﺩﻳﻔﺮﻧﺲ ﺣﺎﻻﺕ ﮔﺴﺴﺘﻪ ) )‪( x (k + 1‬‬
‫ﺑﻪ ﺗﺮﺗﻴﺐ ﺗﻌﺮﻳﻒ ﺣﺎﻻﺕ ﮔﺴﺴﺘﻪ ) ) ‪ ( x (k‬ﺑﻪ ﺳﻄﺮﻫﺎﻱ ‪ sys‬ﻧﺴﺒﺖ ﺩﺍﺩﻩ ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫ﻣﺜﺎﻝ‪ :‬ﺳﻴﺴﺘﻢ ﮔﺴﺴﺘﻪ ﻣﺮﺗﺒﻪ ﺍﻭﻝ ﺗﮏ ﺣﺎﻟﺘﻪ ﺯﻳﺮ ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪:‬‬
‫) ‪x 1 (k + 1) = x 1 (k ) + u 1 (k‬‬
‫ﺩﺳﺘﻮﺭ ﺯﻳﺮ ‪ sys‬ﺭﺍ ﺑﻄﻮﺭ ﻣﻨﺎﺳﺐ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﻣﻲﮐﻨﺪ‪:‬‬
‫;)‪sys = x (1) + u (1‬‬
‫ﺯﻣﺎﻥ ﻧﻤﻮﻧﻪ ﺑﺮﺩﺍﺭﻱ ﻣﻲﺗﻮﺍﻧﺪ ﺑﺮﺍﻱ ﺗﻤﺎﻣﻲ ﻣﻌﺎﺩﻻﺕ ﺩﻳﻔﺮﻧﺲ ﻳﮑﺴﺎﻥ ﺑﺎﺷﺪ ﻳﺎ ﺍﻳﻨﮑﻪ ﻫﺮ ﻣﻌﺎﺩﻝ ﺩﻳﻔﺮﻧﺲ ﺩﺍﺭﺍﻱ ﺯﻣـﺎﻥ ﻧﻤﻮﻧـﻪ‬
‫ﺑﺮﺩﺍﺭﻱ ﻣﻨﺤﺼﺮ ﺑﻪ ﺧﻮﺩ ﺑﺎﺷﺪ‪ .‬ﺳﻴﺴﺘﻢ ﺯﻳﺮ ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪:‬‬
‫) ‪ì x 1 (k + 1) = x 1 (k ) + 0.5x 2 (k‬‬
‫‪í‬‬
‫) ‪î x 2 (k + 1) = x 2 (k ) + u 1 (k‬‬
‫ﻭ ﻓﺮﺽ ﮐﻨﻴﺪ ﮐﻪ ﻣﺆﻟﻔﻪ ﺍﻭﻝ ﺩﺭ ﻫﺮ ‪ 0.3‬ﺛﺎﻧﻴﻪ ﻭ ﻣﺆﻟﻔﻪ ﺩﻭﻡ ﺩﺭ ﻫﺮ ‪ 0.5‬ﺛﺎﻧﻴﻪ ﺑﻬﻨﮕﺎﻡ ﻣﻲﺷﻮﺩ ﻭ ﺁﻓﺴﺖ ﻫﺮ ﺩﻭ ﺻﻔﺮ ﺍﺳـﺖ‪.‬‬
‫ﺩﺳﺘﻮﺭﺍﺕ ﺯﻳﺮ ﺯﻣﺎﻥ ﺷﺒﻴﻪﺳﺎﺯﻱ ﺭﺍ ﺑﺮﺭﺳﻲ ﻧﻤﻮﺩﻩ ﻭ ﺩﺭ ﺻﻮﺭﺗﻴﮑﻪ ﺯﻣﺎﻥ ﻓﻌﻠﻲ‪ ،‬ﺯﻣﺎﻥ ﻧﻤﻮﻧـﻪ ﺑﻌـﺪﻱ ﺑـﺮﺩﺍﺭﻱ ﺑﺎﺷـﺪ‪ sys ،‬ﺭﺍ‬
‫ﺑﻄﻮﺭ ﻣﻨﺎﺳﺐ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﻣﻲﮐﻨﺪ‪:‬‬

‫‪٥‬‬
‫;‪period_1=0.32‬‬
‫;‪offset_1=0.0‬‬
‫;‪period_2=0.5‬‬
‫;‪offset_2=0.0‬‬
‫;‪sys=x‬‬
‫‪if abs(round(t-offset_1)/period_1-((t-offset_1)/peroid_1))<1.0e-8‬‬
‫;)‪sys(1)=sys(1)+0.5*x(2‬‬
‫‪if abs(round(t-offset_2)/period_2-((t-offset_2)/peroid_2))<1.0e-8‬‬
‫;)‪sys(2)=sys(2)+u(1‬‬

‫‪flag=3 -۴‬‬

‫ﺑﺎ ﻓﺮﺍﺧﻮﺍﻧﻲ ﺗﺎﺑﻊ ﺍﺱ ﺑﺎ ‪ flag=3‬ﺗﺎﺑﻊ ‪ mdlOutputs‬ﺻﺪﺍ ﺯﺩﻩ ﺷﺪﻩ ﻭ ﺧﺮﻭﺟﻴﻬﺎﻱ ﺳﻴﺴـﺘﻢ ) ‪ ( u‬ﺑـﻪ ﺳـﻄﺮﻫﺎﻱ ‪sys‬‬
‫ﻧﺴﺒﺖ ﺩﺍﺩﻩ ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫ﻣﺜﺎﻝ‪ :‬ﻓﺮﺽ ﮐﻨﻴﺪ ﺧﺮﻭﺟﻲ ﺳﻴﺴﺘﻢ ﻣﺮﺗﺒﻪ ﺩﻭﻣﻲ ﺑﻪ ﻗﺮﺍﺭ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬
‫‪y = x1 + x 2‬‬
‫ﺩﺳﺘﻮﺭ ﺯﻳﺮ ‪ sys‬ﺭﺍ ﺑﻄﻮﺭ ﻣﻨﺎﺳﺐ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﻣﻲﮐﻨﺪ‪:‬‬
‫;)‪sys=x(1)+x(2‬‬

‫‪flag=4 -۵‬‬

‫ﺑﺎ ﻓﺮﺍﺧﻮﺍﻧﻲ ﺗﺎﺑﻊ ﺍﺱ ﺑﺎ ‪ flag=4‬ﺗـﺎﺑﻊ ‪ mdlGetTimeOfNextVarHit‬ﺻـﺪﺍ ﺯﺩﻩ ﺷـﺪﻩ ﻭ ﺧﺮﻭﺟـﻲ ﺁﻥ ﺑـﻪ ﺑـﺮﺩﺍﺭ‬
‫ﺳﻄﺮﻱ ‪ sys‬ﻧﺴﺒﺖ ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ ﻭ ﻣﻘﺎﺩﻳﺮ ﺯﻣﺎﻧﻬﺎﻱ ﻧﻤﻮﻧﻪ ﺑﺮﺩﺍﺭﻱ ﺑﻌﺪﻱ ﺑﻪ ﺳﻄﺮﻫﺎﻱ ‪ sys‬ﻧﺴﺒﺖ ﺩﺍﺩﻩ ﻣﻲﺷـﻮﻧﺪ‪ .‬ﻣـﺜﻼﹰ‬
‫ﻓﺮﺽ ﮐﻨﻴﺪ ﻣﻲﺧﻮﺍﻫﻴﺪ ﺯﻣﺎﻥ ﻧﻤﻮﻧﻪ ﺑﺮﺩﺍﺭﻱ ﺑﻌﺪﻱ ‪ 1‬ﺛﺎﻧﻴﻪ ﺑﻌﺪ ﺑﺎﺷﺪ‪:‬‬
‫‪sys=t+1‬‬

‫‪flag=9 -۵‬‬

‫ﻫﻨﮕﺎﻣﻴﮑﻪ ﺷﺒﻴﻪ ﺳﺎﺯﻱ ﺑﻪ ﻫﺮ ﺩﻟﻴﻠﻲ ﺧﺎﺗﻤﻪ ﻳﺎﻓﺖ‪ ،‬ﺍﻳﻦ ﭘﺮﭼﻢ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻣﻲﺷﻮﺩ‪ .‬ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ‪ sys‬ﺑﺎ ﺑـﺮﺩﺍﺭ ﺗﻬـﻲ ﻣﻘـﺪﺍﺭ‬
‫ﺩﻫﻲ ﻣﻲﺷﻮﺩ‪.‬‬

‫‪٦‬‬
‫ﺗﻌﺮﻳﻒ‬ ‫ﺁﺭﮔﻮﻣﺎﻥ‬
‫ﻣﻘﺪﺍﺭ ﻓﻌﻠﻲ ﺯﻣﺎﻥ ﺷﺒﻴﻪﺳﺎﺯﻱ‪.‬‬ ‫‪t‬‬
‫ﻣﻘﺪﺍﺭ ﻓﻌﻠﻲ ﺑﺮﺩﺍﺭ ﺣﺎﻟﺖ‪ .‬ﺩﺭ ﺻﻮﺭﺕ ﻭﺟﻮﺩ ‪ n‬ﺣﺎﻟﺖ ﭘﻴﻮﺳﺘﻪ‬ ‫‪x‬‬
‫ﻭ ‪ m‬ﺣﺎﻟﺖ ﮔﺴﺴﺘﻪ‪ n ،‬ﻣﺆﻟﻔﻪ ﺍﻭﻝ‪ ،‬ﺣـﺎﻟﺘﻬﻠﻲ ﭘﻴﻮﺳـﺘﻪ ﻭ ‪m‬‬
‫ﺣﺎﻟﺖ ﺩﻳﮕﺮ‪ ،‬ﺣﺎﻟﺘﻬﺎﻱ ﮔﺴﺴﺘﻪ ﻣﻲﺑﺎﺷﻨﺪ‪.‬‬
‫ﻣﻘﺪﺍﺭ ﻓﻌﻠﻲ ﺑﺮﺩﺍﺭ ﻭﺭﻭﺩﻱ‪.‬‬ ‫‪u‬‬
‫ﻫﺮﺑﺎﺭ ﮐﻪ ﺳﻴﻤﻴﻮﻟﻴﻨﮏ ﺗﺎﺑﻊ ﺍﺱ ﺭﺍ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻣﻲﮐﻨﺪ )ﺑﻪ ﺗـﺮ‬ ‫‪flag‬‬
‫ﺗﻴﺒﻲ ﮐﻪ ﺩﺭ ﺷﮑﻞ )‪ (۲‬ﺩﻳـﺪﻩ ﻣـﻲ ﺷـﻮﺩ(‪ ،‬ﻣﻘـﺪﺍﺭ ‪ flag‬ﺭﺍ‬
‫ﺗﻨﻈﻴﻢ ﻣﻲ ﮐﻨﺪ ﻭ ﺗﺎﺑﻊ ﺍﺱ ﺑﺎ ﺑﺮﺭﺳﻲ ﻣﻘـﺪﺍﺭ ﺍﺭﺳـﺎﻟﻲ‪ ،‬ﻋﻤـﻞ‬
‫ﻧﺸﺎﻥ ﺩﺍﺩﻩ ﺷﺪﻩ ﺩﺭ ﺟﺪﻭﻝ )‪ (۳‬ﺭﺍ ﺍﻧﺠﺎﻡ ﻣﻲﺩﻫﺪ‪.‬‬

‫ﻓﻬﺮﺳﺖ ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﺍﺳﺖ ﮐﻪ ﺗﻌﺪﺍﺩ ﻭ ﺗﺮﺗﻴﺐ ﺁﻥ ﺑﺮﺍﺑﺮ ﺍﺳﺖ‬ ‫‪p1,K pn‬‬


‫ﺑـــــﺎ ﺗﻌـــــﺪﺍﺩ ﻭ ﺗﺮﺗﻴـــــﺐ ﭘﺎﺭﺍﻣﺘﺮﻫـــــﺎﻱ ﻓﻴﻠـــــﺪ‬
‫‪ s-function parameters‬ﺩﺭ ﭘﻨﺠﺮﻩ ﻣﮑﺎﻟﻤﻪ ﺗﺎﺑﻊ ﺍﺱ‪.‬‬
‫ﺟﺪﻭﻝ ‪۱‬‬

‫ﺗﻌﺮﻳﻒ‬ ‫ﺁﺭﮔﻮﻣﺎﻥ‬
‫ﺁﺭﮔﻮﻣﺎﻥ ﭼﻨﺪ ﻣﻨﻈﻮﺭﻩ ﺧﺮﻭﺟﻲ ﮐﻪ ﺗﻌﺮﻳـﻒ ﺁﻥ ﻭﺍﺑﺴـﺘﻪ ﺑـﻪ‬ ‫‪sys‬‬
‫ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ ‪ flag‬ﺍﺳﺖ )ﺑﻪ ﺟﺪﻭﻝ ‪ ۳‬ﻣﺮﺍﺟﻌﻪ ﮐﻨﻴﺪ(‪.‬‬
‫ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ﺑﺮﺩﺍﺭ ﺣﺎﻟﺖ ﮐﻪ ﺷـﺎﻣﻞ ﻣﻘـﺪﺍﺭ ﺍﻭﻟﻴـﻪ ﺣﺎﻟﺘﻬـﺎﻱ‬ ‫‪x0‬‬
‫ﭘﻴﻮﺳﺘﻪ ﻭ ﮔﺴﺴﺘﻪ ﻣﻲ ﺑﺎﺷﺪ‪ .‬ﺍﻳﻦ ﺁﺭﮔﻮﻣﺎﻥ ﺗﻨﻬـﺎ ﺯﻣـﺎﻧﻲ ﮐـﻪ‬
‫‪ flag‬ﺻﻔﺮ ﺍﺳﺖ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺍﺳﺖ‪.‬‬
‫ﺁﺭﮔﻮﻣﺎﻥ ﺧﺮﻭﺟﻲ ‪ placeholder‬ﻣﻲ ﺑﺎﺷـﺪ ﮐـﻪ ﺁﻧـﺮﺍ ﺑـﺎ‬ ‫‪str‬‬
‫ﻣﺎﺗﺮﻳﺲ ﺗﻬﻲ ) ][ (ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﻣﻲ ﮐﻨﻴﻢ‪ .‬ﺍﻳﻦ ﺁﺭﮔﻮﻣﺎﻥ ﺗﻨﻬـﺎ‬
‫ﺯﻣﺎﻧﻲ ﻧﻴﺎﺯ ﺍﺳﺖ ﮐﻪ ‪ flag‬ﺻﻔﺮ ﺍﺳﺖ‪.‬‬
‫ﻣﺎﺗﺮﻳﺲ ﺟﻔﺘﻬﺎﻱ ﺯﻣﺎﻥ ﻧﻤﻮﻧﻪ ﺑـﺮﺩﺍﺭﻱ ‪ ١‬ﻭ ﺁﻓﺴـﺖ ‪ .٢‬ﺁﻓﺴـﺖ‬ ‫‪ts‬‬
‫ﺯﻣﺎﻥ ﺍﻭﻟﻴﻦ ﻧﻤﻮﻧﻪ ﺑـﺮﺩﺍﺭﻱ ﻭ ﺯﻣـﺎﻥ ﻧﻤﻮﻧـﻪ ﺑـﺮﺩﺍﺭﻱ ﻓﺎﺻـﻠﻪ‬
‫ﺯﻣﺎﻧﻲ ﺑﻴﻦ ﺩﻭ ﻧﻤﻮﻧﻪ ﺑﺮﺩﺍﺭﻱ ﺍﺳﺖ‪ .‬ﻣﺎﺗﺮﻳﺲ ﻓـﻮﻕ ﺩﺍﺭﺍﻱ ﺩﻭ‬
‫ﺳﺘﻮﻥ ﻭ ﺣﺪﺍﻗﻞ ﻳﮏ ﺳﻄﺮ ﺍﺳﺖ ﮐﻪ ﺯﻣﺎﻧﻬﺎﻱ ﻧﻤﻮﻧﻪ ﺑـﺮﺩﺍﺭﻱ‬
‫ﺩﺭ ﺳﺘﻮﻥ ﺍﻭﻝ ﻭ ﺁﻓﺴﺘﻬﺎ ﺩﺭ ﺳﺘﻮﻥ ﺩﻭﻡ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﻧﺪ‪ .‬ﺍﻳـﻦ‬
‫ﺁﺭﮔﻮﻣﺎﻥ ﺗﻨﻬﺎ ﺯﻣﺎﻧﻲ ﻧﻴﺎﺯ ﺍﺳﺖ ﮐﻪ ‪ flag‬ﺻﻔﺮ ﺍﺳﺖ‪.‬‬
‫ﺟﺪﻭﻝ ‪۲‬‬

‫‪1‬‬
‫‪- Sampling Time‬‬
‫‪2‬‬
‫‪- Offset‬‬
‫‪٧‬‬
‫ﻋﻤﻞ ﺍﻧﺠﺎﻡ ﺷﺪﻩ ﺗﻮﺳﻂ ﺗﺎﺑﻊ ﺍﺱ‬ ‫ﻣﻘﺪﺍﺭ ‪flag‬‬
‫‪١‬‬
‫ﺁﻣﺎﺩﻩ ﺳﺎﺯﻱ ﺳﺎﺧﺘﺎﺭ ‪ sizes‬ﻭ ﺗﺨﺼﻴﺺ ﺍﻥ ﺑﻪ ‪ sys‬ﻭ ﺗﻨﻈﻴﻢ ﻣﻘـﺎﺩﻳﺮ‬ ‫‪0‬‬
‫‪ x 0‬ﻭ ‪ str‬ﻭ ‪. ts‬‬
‫ﻣﺤﺎﺳﺒﻪ ﻣﻘﺪﺍﺭ ﻣﺸﺘﻖ ﺣﺎﻻﺕ ﭘﻴﻮﺳﺘﻪ ﺑﺮ ﺍﺳﺎﺱ ﻣﻘـﺎﺩﻳﺮ ﻓﻌﻠـﻲ ﺣـﺎﻻﺕ‬ ‫‪1‬‬
‫ﭘﻴﻮﺳــﺘﻪ ﻭ ﻭﺭﻭﺩﻳﻬــﺎ ﻭ ﺗﺨﺼــﻴﺺ ﺁﻥ ﺑــﻪ ‪ sys . sys‬ﺗﻨﻬــﺎ ﺁﺭﮔﻮﻣــﺎﻥ‬
‫ﺧﺮﻭﺟﻲ ﺍﺳﺖ‪.‬‬
‫ﺑﻬﻨﮕﺎﻡ ﮐﺮﺩﻥ ﺣﺎﻟﺘﻬﺎﻱ ﮔﺴﺴﺘﻪ ﺑﺮ ﺍﺳﺎﺱ ﻣﻘﺎﺩﻳﺮ ﻓﻌﻠﻲ ﺣﺎﻻﺕ ﮔﺴﺴﺘﻪ‬ ‫‪2‬‬
‫ﻭ ﻭﺭﻭﺩﻳﻬﺎ ﻭ ﺗﺨﺼﻴﺺ ﺁﻥ ﺑﻪ ‪ sys‬ﺗﻨﻬﺎ ﺁﺭﮔﻮﻣﺎﻥ ﺧﺮﻭﺟﻲ ﺍﺳﺖ‪sys ..‬‬
‫ﺗﻨﻬﺎ ﺁﺭﮔﻮﻣﺎﻥ ﺧﺮﻭﺟﻲ ﺍﺳﺖ‪ .‬ﺩﺭ ﺻﻮﺭﺕ ﻭﺟﻮﺩ ﺯﻣﺎﻧﻬﺎﻱ ﻧﻤﻮﻧـﻪ ﺑـﺮﺩﺍﺭﻱ‬
‫ﭼﻨﺪﮔﺎﻧﻪ )ﺑﻴﺶ ﻟﺰ ﻳﮏ ﺳﻄﺮﻱ ﺑﻮﺩﻥ ﻣﺎﺗﺮﻳﺲ ‪ ( ts‬ﻫﺮ ﺑﺎﺭ ﮐـﻪ ‪flag‬‬
‫ﺑﺮﺍﺑﺮ ‪ ۲‬ﺍﺳﺖ‪ ،‬ﺗﻤﺎﻣﻲ ﻣﺆﻟﻔﻪﻫﺎﻱ ﺑﺮﺩﺍﺭ ﺣﺎﻟﺖ ﮔﺴﺴﺘﻪ )ﮐﻪ ﺷﺎﻣﻞ ﺣﺎﻻﺗﻲ‬
‫ﮐﻪ ﺗﻐﻴﻴﺮ ﻧﻤﻲﮐﻨﻨﺪ ﻧﻴﺰ ﻣﻲﺑﺎﺷﺪ( ﺑﻬﻨﮕﺎﻡ ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫ﻣﺤﺎﺳﺒﻪ ﺧﺮﻭﺟﻴﻬﺎ ﺑﺮ ﺍﺳﺎﺱ ﻣﻘﺎﺩﻳﺮ ﻓﻌﻠﻲ ﺣﺎﻻﺕ ﻭﻭﺭﻭﺩﻳﻬﺎ‪ sys .‬ﺗﻨﻬـﺎ‬ ‫‪3‬‬
‫ﺁﺭﮔﻮﻣﺎﻥ ﺧﺮﻭﺟﻲ ﺍﺳﺖ‪.‬‬
‫ﻣﺤﺎﺳﺒﻪ ﺯﻣﺎﻧﻬﺎﻱ ﻧﻤﻮﻧﻪ ﺑﺮﺩﺍﺭﻱ ﺑﻌﺪﻱ ﻭ ﺗﺨﺼﻴﺺ ﺁﻥ ﺑﻪ ‪. sys‬‬ ‫‪4‬‬
‫‪٢‬‬
‫ﺍﺗﻤﺎﻡ ﺗﻤﺎﻡ ﻭﻇـﺎﻳﻒ ﭘﺎﻳـﺎﻧﻲ ﺷـﺒﻴﻪ ﺳـﺎﺯﻱ‪ .‬ﺁﺭﮔﻮﻣـﺎﻥ ﺧﺮﻭﺟـﻲ ﻧـﺪﺍﺭﺩ‬ ‫‪9‬‬
‫) ][=‪( sys‬‬

‫ﺗﻌﺮﻳﻒ‬ ‫ﻋﻀﻮ‬
‫ﺁﻧﺮﺍ ﺑﺎ ﺗﻌﺪﺍﺩ ﺣﺎﻻﺕ ﭘﻴﻮﺳﺘﻪ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﮐﻨﻴﺪ‪.‬‬ ‫‪sizes.NumContStates‬‬
‫ﺁﻧﺮﺍ ﺑﺎ ﺗﻌﺪﺍﺩ ﺣﺎﻻﺕ ﮔﺴﺴﺘﻪ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﮐﻨﻴﺪ‪.‬‬ ‫‪sizes.NumDiscStates‬‬
‫ﺁﻧﺮﺍ ﺑﺎ ﺗﻌﺪﺍﺩ ﺧﺮﻭﺟﻴﻬﺎ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﮐﻨﻴﺪ‪.‬‬ ‫‪sizes.NumOutputs‬‬
‫ﺁﻧﺮﺍ ﺑﺎ ﺗﻌﺪﺍﺩ ﻭﺭﻭﺩﻳﻬﺎ ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﮐﻨﻴﺪ‪.‬‬ ‫‪sizes.NumInputs‬‬
‫ﺍﺯ ﺧﺮﻭﺟﻲ ﺑﻠﻮﮎ ﻋﻼﻭﻩ ﺑﺮ ﺣﺎﻻﺕ‪ ،‬ﺗﺎﺑﻊ ﻭﺭﻭﺩﻱ ﻧﻴﺰ ﻫﺴﺖ ﺑﺎ‬ ‫‪sizes.DirFeeddthrough‬‬
‫‪) ۱‬ﻣﺎﻧﻨــﺪ ﺑﻠــﻮﮎ ﺑﻬــﺮﻩ‪ ،‬ﺗﻮﺍﺑــﻊ ﻣﺜﻠﺜــﺎﺗﻲ ﻭ ﺩﺭ ﺳﻴﺴــﺘﻤﻬﺎﻱ‬
‫ﻓﻀﺎﻁ ﺣﺎﻟﺘﻲ ﮐﻪ ﻣﺎﺗﺮﻳﺲ ‪ D‬ﻣﺨﺎﻟﻒ ﺻﻔﺮ ﺍﺳﺖ( ﻭ ﺩﺭ ﻏﻴﺮ‬
‫ﺍﻳﻦ ﺻﻮﺭﺕ ﺑﺎ ‪ ۰‬ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﮐﻨﻴﺪ‪.‬‬
‫ﺁﻧﺮﺍ ﺑﺎ ﺗﻌﺪﺍﺩ ﺟﻔﺘﻬﺎﻱ )ﺯﻣﺎﻥ ﻧﻤﻮﻧﻪ ﺑﺮﺩﺍﺭﻱ‪ -‬ﺁﻓﺴﺖ( ﻣﻘـﺪﺍﺭ‬ ‫‪sizes.NumSampleTimes‬‬
‫ﺩﻫﻲ ﮐﻨﻴﺪ‪ .‬ﺑﺮﺍﻱ ﺗﺎﺑﻊ ﭘﻴﻮﺳﺘﻪ ﺻﺮﻑ‪ ،‬ﻣﻘﺪﺍﺭ ﺁﻥ ﻳﮏ ﺍﺳﺖ‪.‬‬
‫ﺟﺪﻭﻝ ‪۴‬‬

‫‪1‬‬
‫‪- Initialization‬‬
‫‪2‬‬
‫‪- Termination‬‬
‫‪٨‬‬

You might also like