石油大学仿真课件5时域离散相似法.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
石油大学仿真课件5时域离散相似法

1】各线性环节内部离散方程 用矩阵表示为 Matlab仿真编程 4.5 2】各环节之间连接方程 3】系统输出为 Matlab仿真编程 4.5 function [t,p]=w_DisNodesSimuNonL(tstart,tstop,h,x0,y0,r0,W,W0,G,H,C,D,Q,NLBefore,NLBeforeParams,NLAfter,NLAfterParams) % 函数功能:带有非线性环节的面向环节离散化仿真, % 环节输入方程: u(k)=W*x(k)+W0*r(k) % 环节迭代方程:x(k+1)=G*x(k)+H*u(k) % 环节输出方程 y(k)=C*x(k)+D*u(k); % 整个系统的输出方程 p(k)=Q*y(k); % 输入参数:tstart, tstop,h 分别是起始时间、结束时间和仿真步长,是标量 % x0,y0是每个环节状态和输出的初值, % r0为系统外部输入 % NLBefore是前置非线性环节的名称,如果没有就写None,NLBeforeParams是前置非线性环节的参数,每个环节 % 的参数占一行。 % NLAfter是后置非线性环节的名称,如果没有就写None,NLAfterParams是后置非线性环节的参数,每个环节的参数占一行。 % 输出参数:t是仿真结果的时间序列 % p是仿真结果系统的输出序列 1、带非线性环节的按环节离散化仿真程序原型 Matlab仿真编程 4.5 function [t,p]=w_DisNodesSimuNonL(tstart,tstop,h,x0,y0,r0,W,W0,G,H,C,D,Q,NLBefore,NLBeforeParams,NLAfter,NLAfterParams) t=[tstart:h:tstop];%t数一个行序列 cntnodes=size(W,1);%得到环节的个数 cntt=size(t,2);%返回列数 cnty=size(Q,1);%返回y的维数 p=zeros(cnty,cntt);%构造一个空矩阵,用来存储结果 p(:,1)=Q*y0; for i=1:1:cntt-1 for j=1:1:cntnodes u(j)=W(j,:)*y0+W0(j,:)*r0;%根据环节之间的连接计算, u(j)=NonlinearNode(NLBefore(j),u(j),NLBeforeParams(j,:));%计算第j个环节的前置非线性环节的输出 x0(j)=G(j,j)*x0(j)+H(j,j)*u(j); y0(j)=C(j,j)*x0(j)+D(j,j)*u(j);%根据线性部分计算线性部分的输出 y0(j)=NonlinearNode(NLAfter(j),y0(j),NLAfterParams(j,:));%计算第j个环节的后置非线性环节的输出 end; p(:,i+1)=Q*y0 ;%将y0作为输出的第1列 end Matlab仿真编程 4.5 2、典型非线性环节函数 function u_out=NonlinearNode(NodeType,u_in,params) % 函数功能:典型非线性环节的计算 % 输入参数:NodeType 节点类型,可以取Saturation,Deadzone,Relay,RelayDeadzone, % None表示没有非线性环节 % u_in, 环节的输入; % params, 环节的参数行向量 % 输出结果:u_out,环节的输出 Matlab仿真编程 4.5 Matlab仿真编程 4.5 function u_out=NonlinearNode(NodeType,u_in,params) switch NodeType case Saturation %params(1)=c,params(2)=k c=params(1); k=params(2); if (k*u_in)-c u_out=-c; elseif (k*u_in)c u_out=c; else u_out=k*u_in; end; case Deadz

文档评论(0)

shujukd + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档