第7章S函数论述.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
  运行仿真,在示波器中观察结果波形,图7-15(b)中示波器上面的窗口显示的是输入信号波形,下面的窗口显示的是S-函数的输出波形。 (a)    (b) 图7-15   用户也可以封装S-Function模块,这样可以在模块图标上标明该函数的功能,如在封装编辑器的Icon选项页内输入绘制命令:disp(Unit Delay),那么所得S-Function模块如图7-16所示。 图7-16   sys = simsizes(sizes);      x0 = 0;   str = [ ];   ts = [0.1 0]; % Sample period of 0.1 seconds (10Hz)      % end mdlInitializeSizes   %============================================================   % mdlUpdate   % Handle discrete state updates, sample time hits, and major time step requirements.   %============================================================   function sys = mdlUpdate(t, x, u)   sys = u;   %end mdlUpdate   %=============================================   % mdlOutputs   % Return the output vector for the S-function   %=============================================   function sys = mdlOutputs(t, x, u)   sys = x;   %end mdlOutputs   例7-6 人口系统S-函数。   编写一个S-函数描述人口的动态变化。设繁殖率为r,资源为k,初始人口数量为init,则人口变化规律为 系统模型如图7-17所示。 图7-17   修改S-函数的第一行:   function [sys, x0, str, ts] = sfun_population(t, x, u, flag, r, k, init)   对子函数的调用为:   case 0,    [sys, x0, str, ts] = mdlInitializeSizes(init);   case 2,    sys = mdlUpdate(t, x, u, r, k);   在这个例子中,p为状态,输出等于状态,于是,更新函数和输出函数为:   function sys = mdlUpdate(t, x, u, r, k)   sys = [r*x*(1-x/k)];   function sys = mdlOutputs(t, x, u)   sys = [x];   打开S-Function对话框,设置S-function name参数为sfun_population,设置S-function parameter参数值为1.05、1e6、100000,如图7-18(a)所示。选择变步长ode45求解器,仿真100个时间单位,运行仿真后得到的结果曲线如图7-18(b)所示。 (a) 图7-18 (b) 图7-18   下面是sfun_population函数文件完整的M代码:   function [sys,x0,str,ts] = sfun_population(t, x, u, flag, r, K, init)   %population dynamics. Rate(r), resources(K) and initial population   %(init) are user inputs.   switch flag,    case 0,    [sys,x0,str,ts] = mdlInitializeSizes(init);    case 1,    sys = mdlDerivatives(t, x, u);    case 2,    sys = mdlUpdate(t, x, u, r, K);    case 3,    sys = mdlOutputs(t, x, u);    case 4,    sys = mdlGetTimeOfNext

文档评论(0)

花仙子 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档