- 1、本文档共101页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 控制系统的MATLAB仿真 2)形成开、闭环系数阵 c=c/a(1); % 首一化处理 a=a/a(1); A=a(2:n+1); A=[rot90(rot90(eye(n-1,n)));-fliplr(A)]; % 形成能控标准形 B=[zeros(1,n-1),1]; % 形成输入阵B m1=length(c); % 分子系数向量维数m+1 C=[fliplr(c),zeros(1,n-m1)]; % 形成输出阵C Ab=A-B*C*V; % 形成闭环系数阵Ab X=X0;y=0;t=T0; % 设初值,准备递推运算 第7章 控制系统的MATLAB仿真 3)运算求解 N=round(Tf-T0)/h; % 确定输出点数 for i=1:N % 四阶龙格-库塔法 K1=Ab*X+B*R; K2=Ab*(X+h*K1/2)+B*R; K3=Ab*(X+h*K2/2)+B*R; K4=Ab*(X+h*K3)+B*R; % 求各次斜率K X=X+h*(K1+2*K2+2*K3+K4)/6; % 求状态 y=[y,C*X]; % 求输出并以向量形式保存 t=[t,t(i)+h]; % 输出对应时刻以向量形式保存 end 第7章 控制系统的MATLAB仿真 4)输出结果 [t,y] % 输出数据形式结果 plot(t,y) % 输出曲线形式结果 以上即为采用MATLAB语言实现面向典型闭环系统数字仿真的程序,可编辑为CSS1.m文件存储起来。使用时,只要进入到MATLAB命令窗口,按要求输入系统参数和运行参数,再调用该文件,即可得到系统的仿真结果。 第7章 控制系统的MATLAB仿真 该程序中用到了几个MATLAB特殊功能函数,简要说明如下: eye(m,n)——产生m?n型I阵,即主对角元素均为1,其余元素为零的长方阵 length( )——求取括号内向量的维数 zeros(m,n)——产生m?n型零阵 rot90( )——将括号内矩阵左旋90? fliplr( )——将括号内矩阵或向量左右翻转 round( )——对括号内运算取整 plot(t,y)——打印以t为横轴,y为纵轴的y(t)曲线 第7章 控制系统的MATLAB仿真 7.5.2 面向结构图的线性系统仿真 1.仿真程序框图与程序实现 (1)程序框图的描述 当控制系统的数学模型以动态结构图的形式给出时,可以用以下的方法处理,如图7-15所示。 (2)程序设计的实现 采用MATLAB语言编程,程序名为CSS2.M,保存为M文件。 图7-15 面向结构图的线性系统的仿真框图 第7章 第7章 控制系统的MATLAB仿真 输入系统原始数据: P % 输入各环节参数 WIJ= % 输入连接阵非零元素 n=; % 环节个数(系统阶次) Y0=; % 阶跃输入幅值 Yt0= % 各环节输出初值 h=; % 计算步长 L1=; %每隔L1个点打印一次 T0=; % 起始时间 Tf=; % 终止时间 nout=Nout; % 输出环节编号 第7章 控制系统的MATLAB仿真 程序处理开始: A=diag(P(:,1));B=diag(P(:,2)); % 求开环系统系数阵 C=diag(P(:,3));D=diag(P(:,4)); m=length(WIJ(:,1)); % 求非零元素个数 W0=zeros(n,1);W=zeros(n,n); % 建立初始W、W0阵 for k=1:m if (WIJ(k,2)==0);W0(WIJ(k,1))=WIJ(k,3);% 求W0阵 else W(WIJ(k,1),WIJ(k,2))=WIJ(k,3); % 求W阵 end end 第7章 控制系统的MATLAB仿真 Q=B-D*W;Qn=inv(Q); % 求Q和Q逆阵 R=C*W-A;V1=C*W0; % 求R,V1阵 Ab=Qn*R;b1=Qn*V1; % 形成闭环系数阵 Y=Yt0; y=Y(nout);t=T0; % 置初值 N=round((Tf-T0)/(h*L1)); % 总输出点数 for i=1:N; % 每循环一次,输出一点数据 for j=1:L1; % 每输出点之间计算L1次 K1=Ab*Y+b1*Y0; K2=Ab*(Y+h*K1/2)+b1*Y0; K3=Ab*(Y+h*K2/2)+b1*Y0; K4=Ab*(Y+h*K3)+b1*Y0
文档评论(0)