如发现有乱码,
请直接从这里浏览原文
正文摘录:2006年第24期总第239写成矩阵的形式为:仇㈧肾艇罐:}+是雕摊懈图1多自由度系统实物图根据这个数学模型建立该机械振动系统的Simulink模型,新建一个空白的模型编辑窗口,打开Simulink模块库,通常建模的方法有以下几种:3.1采用积分模块建模由于该机械振动系统的数学模型为一个线性微分方程组,因此可采用Continuous库中的Integrator模块进行建模,建模速度较快。但是这种方法得到Simulink模型看-起来很复杂,可读性较差。3.2采用状态空间模块建模通常的线性微分方程都可转化成状态空间方程,上述的微分方程同样可以。令:rX(£)Ir0I1及幻一f飙)P—l一肟,K一肝,PJ,r0’B—fAr-Gf,c一16~6,D一0s~l将微分方程转化成状态方程:fz(t)一nz(t)+Bu(£)1y(£)一CZ(t)+Du(£)因此采用状态空间模块得到的Simulink模型看起来非常简单。n气eWavelState-Space廖sc~L~pee3Scope4图2振动系统的状态空间模型图设定各模块的参数,双击Sinewave模块,从弹出的对话框中设置其频率为2、幅值为1。双击State—Space模块,设置A为A,B为B,C为C,D为D,initialConditions为[O.5;0.5;0.5;0;0;O]。启动仿真过程,所得结果如图3所示。这种方法,在仿真前需要输入A,B,c,D的值,因此,在Matlab命令窗口中要写出计算A,B,C,D的程序代码,或者新建一个M文件来计算A,B,C,D的值。后者较前者使用更方便,但是在每次仿真前,都必须先在M。tl。b命令窗口输人M文件的名称,才能开始仿真,使用起来还是不方便。图3Simulink窗口Scope显示状态3.3采用S~Function模块建模以上2种方法造成的弊端,采用S函数可以很容易地得到解决。用Matlab语言,C语言等构成S函数,然后在Simulink模型中通过S函数模块直接调用。这就使得S函数成为Simulink展现魅力的一个亮点,完美地结合了Simulink框图简洁明了的特点和编程灵活的优点,扩展了Simulink的能力。用Matlab语言编写的S函数如下:function[sys,x0,str,ts]一sanz·(t,X,u,flag)m一1;c一3;k一2;G一[1;1;1];%系统输入参数,系统不同时,可做修改M—In”eye(3):P—C*I-2—10;一12—1;0—11];K—k*[2—10;~12—1;0—11];A—cat(1,cat(2,zeros(3,3),eye(3)),cat(2,一inv(M)*K。一inv(M)*P));B—cat(1,zeros(3,1),一inv(M)*G);C—eye(6);D—zeros(6,1);%上述程序主要是求A、B、C、Dswitchflag,case0,b1Zcs——S1II?1S1Ze8:sizes.NumContStates一6:sizes.NumDiscStates一0:sizes.NumOutputs一6:sizes.NumInputs一1:sizes.DirFeedthrough一1;sizes.NumSampleTimes=1:sys—simsizes(sizes):x0一[O.5,0.5,0.5,0,0,O];str一口;ts—LOOJ;case1,sys—A*x+B*u:case3,sys—C*X+D。U:case{2,4,9),sys=[];end%固定格式%连续状态变量数量为6%离散状态变量数量为0%有6个输出%有一个输入%输入输出间存在直接比例关系%只有一个采样时间%固定格式%初始状态值%固定格式%对应连续系统%计算得到的导数向量向sys赋值%计算得到的向量向sys赋值S函数看起来较复杂,其实只要搞清楚程序段的功能,编写起来很快。编写时可将Matlab/Simulink自带的47
阅读此文(图):
在线翻阅