版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第三章 Matlab编程(数值积分法仿真),3.1 连续系统数值积分法仿真编程思路,目的:针对下面的系统编写通用的数值积分法仿真程序,(3.1-1),对这样的系统进行仿真,实际上涉及到控制的计算、状态的数值积分计算和输出的计算。3个函数g,f,h确定后,就可以完整地描述一个系统。,给定初值:u0,y0,系统中的向量都采用列向量表示,2,function t,y=w_DigiInteSimu(tstart,tstop,h,x0,u0,cnty,InteMethod,StateModel,OutputFile, ControlFile) % 函数功能:用数值积分法仿真 % 输入参数:tstar
2、t, tstop,h 分别是起始时间、结束时间和仿真步长,是标量 % x0,u0是状态、输入的初值,都是列向量 % cnty是输出变量的个数 % InteMethod时数值积分方法,可以是EUL ,RK2,RK4 % StateModel是状态模型的文件名 % ControlFile是控制作用的文件名 % OutputFile是系统输出的文件名 % 输出参数:t是仿真结果的时间序列 % y是仿真结果系统的输出序列,(1)数值积分法仿真框架函数,3,function t,y=w_DigiInteSimu(tstart,tstop,h,x0,u0,cnty,InteMethod,StateMode
3、l,OutputFile,ControlFile) t=tstart:h:tstop;%t数一个行序列 cntt=size(t,2);%返回列数 y=zeros(cnty,cntt);%构造一个空矩阵,用来存储结果 y0=eval(OutputFile,(tstart,x0,u0);%计算初始输出 y(:,1)=y0;%将cury作为输出的第1列 curx=x0; %当前一步的x curu=u0; %当前一步的u cury=y0; %当前一步的y for i=1:1:cntt-1 curu=eval(ControlFile,(t(i),h,curx,curu,cury);%计算控制时传递的参数
4、:当前时间,步长,当前状态和输出 curx=w_StepIntegral(t(i),h,curx,curu,InteMethod,StateModel);%单步积分运算 cury=eval(OutputFile,(t(i),curx,curu);%计算输出 y(:,i+1)=cury;%将输出加入到输出序列里 end,4,function NewX=w_StepIntegral(curt,h,curx,curu,InteMethod,StateModel) %函数功能:单步积分运算,与模型方程有关 % 输入参数:curt是当前时间,h是数值积分步长 %curx,curu分别是当前的状态和控制向
5、量 % InteMethod是积分算法,字符串类型,可以取EUL,RK2,RK4 % StateModel是状态模型文件名称,字符串类型 % 输出参数:NewX是这一步计算的新的状态向量,(2)单步数值积分法函数,单步数值积分函数只是对微分方程组StateModel进行一步的计算,计算法由InteMethod参数指定,可以上欧拉法,RK2或RK4。,5,function NewX=w_StepIntegral(curt,h,curx,curu,InteMethod,StateModel); if InteMethod = RK4 k1=eval(StateModel,(curt,curx,cu
6、ru); k2=eval(StateModel,(curt+0.5*h,curx+0.5*h*k1,curu); k3=eval(StateModel,(curt+0.5*h,curx+0.5*h*k2,curu); k4=eval(StateModel,(curt+h,curx+h*k3,curu); NewX=curx+h*(k1+2*k2+2*k3+k4)/6; elseif InteMethod = RK2 k1=eval(StateModel,(curt,curx,curu); k2=eval(StateModel,(curt+h,curx+h*k1,curu); NewX=curx
7、+0.5*h*(k1+k2); else %欧拉法EUL Qk=eval(StateModel,(curt,curx,curu);%eval用来执行一个函数,传递函数名和函数的输入参数 NewX=curx+h*Qk; end,6,函数w_DigiInteSimu和w_StepIntegral构造了一个数值积分法仿真的框架,并不涉及具体的系统。 具体的系统由StateModel,ControlFile,OutputFile参个参数决定,实际上就是三个函数文件名,这三个函数输入输出参数必须遵循特定的格式,在准备好由这3个函数描述的系统后,调用w_DigiInteSimu即可进行仿真。 还需要一个调
8、用w_DigiInteSimu进行仿真的程序,它指定模型文件,指定初始参数,并且对仿真结果绘图。,7,3.2 算法稳定性分析仿真编程,针对下面的系统,求用解析法、欧拉法和RK4分别求解,计算欧拉法最大允许步长,将步长从0.1逐渐增大,比较三种解的效果。,解:1)该系统是稳定的,解析解为,2)用欧拉法计算本例时,其步长应该满足,3)RK4步长条件式是一个高阶不等式,无法直接求解,只能用试探法确定RK4的步长上限。,(3.2-1),8,我们使用3.1介绍的两个基本函数,同时要针对系统模型编写3个函数来描述该系统,最后编写一个实现仿真初值设置、仿真求解和仿真结果显示的函数。,function der
9、X=w_SysStateEqu(curt,curx,curu) % function derX=w_stateEqu(curt,curx,curu) % 函数功能:在此函数里写系统的状态方程 % 输入参数:curt当前时间,curx和curu是当前状态和控制 % 输出参数:derX是状态的X的导数值 derX(1)=-4*curx(1);,(1)状态模型函数w_SysStateEqu 在该函数里描述(3.2-1)式的状态微分方程,9,function OutputY=w_SysOutput(curt,curx,curu) % function OutputY=w_SysOutput(curt,
10、curx,curu) % 函数功能:计算系统的输出向量 % 输入参数:curt是当前时间,curx,curu分别是当前的状态和控制向量 % 输出参数:OutputY是计算出来的输出向量 OutputY(1)=curx(1);%根据具体的模型写输出方程,(2)系统输出函数w_SysOutput,function ControlU=w_SysControl(curt,h,curx,curu,cury) % ControlU=w_sysControl(curt,h,curx,curu,cury) % 函数功能: 计算系统的控制,如u=PID(t,curx,cury) % 输入参数:curt是当前时间
11、,h是数值积分步长 curx,curu,cury分别是当前的状态、控制和输出向量 % 输出参数:ControlU是计算出来的控制向量 ControlU=curu; %根据实际系统写控制,(3)系统控制计算函数w_SysControl,10,(4)仿真组织函数,function simu_Stability % 函数功能:稳定性分析仿真 tstart=0;tstop=7;h=0.7; StateModel=w_SysStateEqu; ControlFile=w_SysControl; OutputFile=w_SysOutput; x0=1;u0=0;cnty=1; t,y1=w_DigiIn
12、teSimu(tstart,tstop,h,x0,u0,cnty,EUL,StateModel,OutputFile,ControlFile); %用欧拉法求解 t,y4=w_DigiInteSimu(tstart,tstop,h,x0,u0,cnty,RK4,StateModel,OutputFile,ControlFile); %用RK4求解 y5=exp(-4*t);% 计算解析解 plot(t,y1,-m,t,y2,-.r,t,y5,-k);%绘制叠加曲线 xlabel(时间);ylabel(y); title(算法稳定性分析仿真);,该函数的主要任务是: 1)设置仿真起始时间、结束时
13、间、仿真步长、初始的x和u 2)设置模型的输出方程、状态方程和控制方程所在函数文件名 3)调用w_DigiInteSimu进行仿真计算 4)将计算结果绘图进行比较。,11,修改simu_Stability函数里的参数h,就可以作出不同步长时的仿真结果。下面是步长从0.1不断增大时的仿真结果,h=0.1时的仿真曲线。 1】RK4法的曲线与解析解重合,说明RK4法非常准确。 2】欧拉法有较大误差。,12,h=0.4时的仿真曲线。 1】RK4法还是比较准确。 2】欧拉法误差很大,出现衰减震荡。 3】两种数值算法的步长条件仍然满足,算法仍然稳定。,13,h=0.6时的仿真曲线。欧拉法的步长条件已经不满
14、足,仿真解发散,h=0.6时的仿真曲线。RK4法的步长条件仍然满足。但误差增大,14,h=0.7时的仿真曲线。 RK4法的步长条件已经不满足,仿真结果发散。,15,3.3 卫星发射仿真,卫星发射运动方程,G为重力系数,系统是高阶微分方程,不能直接用于仿真计算,需要转化为状态方程。定义状态变量:,运动方程用极坐标表示,同时还需要用直角坐标输出。,1. 模型转换,16,得到系统仿真模型,取X-Y平面坐标作为输出,状态初值为:,v是初始发射速度,可分别取,该系统没有控制,主要是研究初始发射速度对轨道的影响。,17,2. 模型描述函数构造,function derX=sat_StateEqu(curt
15、,curx,curu) G=401408; derX(1)=curx(3); derX(2)=curx(4); derX(3)=-G/(curx(1)*curx(1)+curx(1)*curx(4)*curx(4); derX(4)=-2*curx(3)*curx(4)/curx(1); derX=derX;%转换为列向量,(1)状态方程,function OutputY=sat_Output(curt,curx,curu) OutputY(1)=curx(1)*cos(curx(2); OutputY(2)=curx(1)*sin(curx(2); OutputY=OutputY; %转换为
16、列向量,(2)输出方程,(3)控制方程 由于该系统没有控制,因而采用与3.2节同样的控制函数。,18,3. 仿真组织函数,function simu_Satelite % 函数功能:对卫星发射轨道仿真 tstart=0; StateModel=sat_StateEqu; ControlFile=w_SysControl; OutputFile=sat_Output;u0=0;cnty=2; h=200;tstop=100*h;v=10;x0=6400,0,0,v/6400; t,y10=w_DigiInteSimu(tstart,tstop,h,x0,u0,cnty,RK4,StateMode
17、l, OutputFile, ControlFile); %用RK4求解 h=200;tstop=50*h;v=9;x0=6400,0,0,v/6400; t,y9=w_DigiInteSimu(tstart,tstop,h,x0,u0,cnty,RK4,StateModel, OutputFile, ControlFile); %用RK4求解 h=100;tstop=60*h;v=8;x0=6400,0,0,v/6400; t,y8=w_DigiInteSimu(tstart,tstop,h,x0,u0,cnty,RK4,StateModel, OutputFile, ControlFile
18、); %用RK4求解 plot(y10(1,:),y10(2,:),-,y9(1,:),y9(2,:),-,y8(1,:),y8(2,:),:);%绘制叠加曲线 xlabel(x);ylabel(y);title(卫星发射轨道);,19,直角坐标显示的卫星发射轨道:初始速度越大,规大越大。 V不同时,需要的步长和计算步数不一样。,20,3.4 线性系统仿真编程,前面所介绍的仿真程序是针对(3.1-1)所表示的通用的非线性系统,针对如下所表示的线性状态空间模型,(3.4-1),我们虽然也可以用前面介绍的程序仿真,但比较麻烦,实际上系统由矩阵A、B、C、D就可以指定微分方程和输出方程,而不必单独用
19、函数文件来表示。 为此,我们单独编写针对系统(3.4-1)的线性系统数值积分法仿真程序。程序仍然由仿真框架和单步积分构成。,21,(1)线性系统数值积分仿真框架,function t,y=w_LinearSimu (tstart, tstop, h, x0, u0, A, B, C, D, InteMethod, ControlFile) % 函数功能:用数值积分法仿真对线性系统dx=AX+Bu, y=Cx+Du进行仿真 % 输入参数:tstart, tstop,h 分别是起始时间、结束时间和仿真步长,是标量 % x0,u0是状态、输入的初值,都是列向量 % A,B,C,D是线性状态空间模型的
20、系数矩阵 % InteMethod是数值积分方法,可以是EUL ,RK2,RK4 % ControlFile是控制作用函数,没有控制算法时,可以省略 % 输出参数:t是仿真结果的时间序列 % y是仿真结果系统的输出序列,22,function t,y=w_LinearSimu(tstart,tstop,h,x0,u0,A,B,C,D,InteMethod,ControlFile) t=tstart:h:tstop;%t数一个行序列cntt=size(t,2);%返回列数 cnty=size(C,1);%返回y的维数 y=zeros(cnty,cntt);%构造一个空矩阵,用来存储结果 y0=C
21、*x0+D*u0;% eval(OutputFile,(tstart,x0,u0);%计算初始输出 y(:,1)=y0 ;%将y0作为输出的第1列 curx=x0; %当前一步的xcuru=u0; %当前一步的ucury=y0; %当前一步的y for i=1:1:cntt-1 curu=eval(ControlFile,(t(i),h,curx,curu,cury,A,B,C,D);%计算控制时传递的参数:当前时间,步长,当前状态和输出,模型系数矩阵 curx=w_LinearStepIntegral(h,curx,curu,InteMethod,A,B);%单步积分运算,针对线性模型 cu
22、ry=C*curx+D*curu;%计算输出 y(:,i+1)=cury;%将输出加入到输出序列里 end,23,(2)线性系统单步积分函数,function NewX=w_LinearStepIntegral(h,curx,curu,InteMethod,A,B); % 函数功能:单步积分运算,与模型方程有关 % 输入参数:h是数值积分步长,curx,curu分别是当前的状态和控制向量 % InteMethod是积分算法,字符串类型, %可以取EUL,RK2,RK4,由于要用于判断,字符串必须等长 % A,B是线性状态模型的微分方程的系数矩阵 % 输出参数:NewX是这一步计算的新的状态向量
23、 Bu=B*curu; if InteMethod = RK4 k1=A*curx+Bu; k2=A*(curx+0.5*h*k1)+Bu; k3=A*(curx+0.5*h*k2)+Bu; k4=A*(curx+h*k3)+Bu; NewX=curx+h*(k1+2*k2+2*k3+k4)/6; elseif InteMethod = RK2 k1=A*curx+Bu; %eval(StateModel,(curt,curx,curu); k2=A*(curx+h*k1)+Bu;%eval(StateModel,(curt+h,curx+h*k1,curu); NewX=curx+0.5*h
24、*(k1+k2); else %欧拉法EUL NewX=curx+h*(A*curx+Bu); end,24,3.5二阶系统传递函数仿真,1. 模型转换,写为状态模型就是,基本参数取值为,针对本例,线性系统仿真程序进行仿真。,25,2.仿真组织程序,function simu_StateSpace% 函数功能:对一个状态空间模型进行仿真 tstart=0; tstop=20; h=0.1; B=0;1; C=1,0; D=0; x0=0;0; u0=1;%单位阶跃输入 dampratio=0.1; A=0,1;-1,-2*dampratio; t,y1=w_LinearSimu(tstart,
25、tstop,h,x0,u0,A,B,C,D,RK4); dampratio=0.5; A(2,2)=-2*dampratio; t,y5=w_LinearSimu(tstart,tstop,h,x0,u0,A,B,C,D,RK4); dampratio=1; A(2,2)=-2*dampratio; t,y10=w_LinearSimu(tstart,tstop,h,x0,u0,A,B,C,D,RK4); dampratio=1.5; A(2,2)=-2*dampratio; t,y15=w_LinearSimu(tstart,tstop,h,x0,u0,A,B,C,D,RK4); plot(t,y1,-r,t,y5,:g,t,y10,*y,t,y15,.b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 血管导管感染防控指南讲义
- 2025年黔南州惠水县公益性岗位招聘真题
- 《数控机床加工零件》课件-安装壳体零件外基准加工和平长度的工艺文件编制1
- 2025年江苏省自然资源厅所属事业单位招聘考试真题
- 《商务数据可视化》课件-8.5 使用What-if参数实现动态分析
- 2026年亳州市工会系统事业单位人员招聘考试备考试题及答案详解
- 2026海南中学校园招聘事业编制人员16人考试备考题库及答案解析
- 2026智新半导体有限公司招聘笔试备考题库及答案解析
- 2026年恩施市文化和旅游系统事业单位人员招聘考试备考试题及答案详解
- 2026年北京市社区工作者招聘考试备考试题及答案详解
- 2026年公务乘车座次礼仪与司机沟通规范问答
- 2026年北京市西城区高三二模英语试卷(含答案)
- 2026重庆璧山文化旅游产业有限公司面向社会招聘5人备考题库及答案详解(各地真题)
- 济宁市2026届省属公费师范毕业生就业岗位需求备考题库(112个)含答案详解(能力提升)
- 【 道法 】社会主义市场经济体制课件-2025-2026学年统编版道德与法治八年级下册
- 2026届百师联盟高三下学期考前适应性训练(一) 英语试题+答案
- 2025-2026学年人教版八年级英语下册口语交际(补全对话)每日一练专项训练
- 2026四川三江新能源供应链科技有限责任公司第一批社会招聘7人笔试参考题库及答案解析
- 2026年高校基建处工程管理岗应聘笔试指南及项目流程
- 2026年煤矿采煤工试题及答案
- 2025四川宜宾市科技人才集团有限公司第三批员工招聘10人笔试历年参考题库附带答案详解
评论
0/150
提交评论