Simulink交互式仿真6.docx

上传人:b****3 文档编号:3708847 上传时间:2023-05-06 格式:DOCX 页数:26 大小:603.62KB
下载 相关 举报
Simulink交互式仿真6.docx_第1页
第1页 / 共26页
Simulink交互式仿真6.docx_第2页
第2页 / 共26页
Simulink交互式仿真6.docx_第3页
第3页 / 共26页
Simulink交互式仿真6.docx_第4页
第4页 / 共26页
Simulink交互式仿真6.docx_第5页
第5页 / 共26页
Simulink交互式仿真6.docx_第6页
第6页 / 共26页
Simulink交互式仿真6.docx_第7页
第7页 / 共26页
Simulink交互式仿真6.docx_第8页
第8页 / 共26页
Simulink交互式仿真6.docx_第9页
第9页 / 共26页
Simulink交互式仿真6.docx_第10页
第10页 / 共26页
Simulink交互式仿真6.docx_第11页
第11页 / 共26页
Simulink交互式仿真6.docx_第12页
第12页 / 共26页
Simulink交互式仿真6.docx_第13页
第13页 / 共26页
Simulink交互式仿真6.docx_第14页
第14页 / 共26页
Simulink交互式仿真6.docx_第15页
第15页 / 共26页
Simulink交互式仿真6.docx_第16页
第16页 / 共26页
Simulink交互式仿真6.docx_第17页
第17页 / 共26页
Simulink交互式仿真6.docx_第18页
第18页 / 共26页
Simulink交互式仿真6.docx_第19页
第19页 / 共26页
Simulink交互式仿真6.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Simulink交互式仿真6.docx

《Simulink交互式仿真6.docx》由会员分享,可在线阅读,更多相关《Simulink交互式仿真6.docx(26页珍藏版)》请在冰点文库上搜索。

Simulink交互式仿真6.docx

Simulink交互式仿真6

.1.1系统平衡点和普通状态轨线图

【例8.7-7】求图8.7-13所示两个模型的平衡点。

模型(b)输入端比模型(a)多一个输入口。

exm080707_1.mdl

exm080707_2.mdl

(a)

(b)

图8.7-13待求平衡点的非线性系统块图模型

(1)

(2)

xa=trim('exm080707_1',[-0.1;-0.3])%<1>

xb=trim('exm080707_1',[0;1])%<2>

xa=

-0.8944

-1.7889

xb=

0.8944

1.7889

(4)

Axa=linmod2('exm080707_1',xa);

eig_Axa=(eig(Axa))'

Axb=linmod2('exm080707_1',xb);

eig_Axb=(eig(Axb))'

eig_Axa=

-1.3944-2.6457i-1.3944+2.6457i

eig_Axb=

3.4110-2.6222

(6)

[xa2,ua]=trim('exm080707_2',[-0.1;-0.3],0)%<3>

[xb2,ub]=trim('exm080707_2',[0;1],1)%<4>

xa2=

-0.7487

-1.4974

ua=

1.1974

xb2=

0.6810

1.3620

ub=

1.6810

(2)

%exm080707_1m.m

clf;

xx=[-2,-1,0,1,1,1,1

1,1,1,1,0,-1,-2];

set_param('exm080707_1','InitInArrayFormatMsg','None')

nxx=size(xx,2);

fork=1:

nxx

opts=simset('initialstate',xx(:

k));%<5>

[t,x]=sim('exm080707_1',10,opts);%<6>

plot(x(:

1),x(:

2));

holdon

end

gridon,holdoff

xlabel('x1');ylabel('x2')

title('普通状态轨线')

图8.7-14多初始点出发的状态轨线和平衡点

.1.2M码和Simulink模型的综合运用

101单步仿真和精良状态轨线图

【例8.7-8】绘制非线性系统

块图模型的精良状态变化轨线。

(1)

function[DX1,DX2,DP]=exm080708_zzy(x1,x2,h)

opts=simset('solver','ode5','fixedstep',h);%<2>

n=length(x1);

DX1=zeros(n,n);DX2=DX1;DP=DX1;

disp('正在逐点计算,请稍等!

')

forii=1:

n;

forjj=1:

n;

opts=simset(opts,'initialstate',[x1(ii);x2(jj)]);%<8>

[~,x]=sim('exm080707_1',h,opts);%<9>

dx1=x(2,1)-x1(ii);

dx2=x(2,2)-x2(jj);

L=sqrt(dx1^2+dx2^2);

DP(jj,ii)=L/h;

ifL>1.e-10

DX1(jj,ii)=dx1;DX2(jj,ii)=dx2;%<15>

end

end

end

disp('计算结束')

(2)

%exm080708m.m

h=0.01;

x1=(-2.5:

0.25:

2.5)';x2=x1;

k=3.5;

set_param('exm080707_1','InitInArrayFormatMsg','None')

xs=trim('exm080707_1',[-0.1;-0.3]);

xus=trim('exm080707_1',[0;1]);

[DX1,DX2,DL]=exm080708_zzy(x1,x2,h);

pcolor(x1,x2,DL)

shadinginterp

alpha(0.5)

colorbar

holdon

quiver(x1,x2,k*DX1,k*DX2,0)

plot(xs

(1),xs

(2),'bo',xs

(1),xs

(2),'+','MarkerSize',10)

plot(xus

(1),xus

(2),'bo',xus

(1),xus

(2),'.','MarkerSize',10)

gridoff

holdoff

xlabel('x1'),ylabel('x2')

title('精良状态轨线斜率图')

shg

图8.7-15精良状态轨线迹斜率图

102仿真模型和优化指令的协调

【例8.7-9】题目背景:

在迄今的自动控制教材中,凡讨论积分性能指标时,几乎总会提到所谓的ITAE传递函数标准型,并列出相应的分母多项式系数表。

但值得指出的是:

这些数据是20世纪50年代初期,用模拟计算机仿真得到的。

因此,这些数据的准确性带有明显的时代缺陷。

不同,ITAE性能函数

无法解析计算,而只能通过数值计算进行。

图8.7-16计算

的块图模型

(1)问题的形成

(2)

(3)

%exm080709m.m

globalaJc

amin=min(a0);

na=length(a0);

nd=na+2;

opts=optimset('MaxFunEvals',300*na);

CF=zeros(Kr,nd);Jk=zeros(1,Kr);

forkk=1:

Kr

ar=a0+2*amin*(rand(1,na)-0.5);%<8>

a=fminsearch(@exm080709_itae,ar,opts);

cf=[1,a,1];

CF(kk,:

)=cf;

Jk(kk)=Jc;

end

[Jmin,kmin]=min(Jk);

cfmin=CF(kmin,:

);

%exm080709_itae.m

functionJc=exm080709_itae(aa)

globalaJc

a=aa;

Tspan=[0,0.1,20];%<4>

opts=simset('RelTol',0.0001);

[~,~,Jt]=sim('exm080709',Tspan,opts);%<6>

Jc=Jt(end);

(4)

clear

Kr=5;

a0=[3.25,6.60,8.60,7.45,3.95];

exm080709m

Jmin,cfmin

Jmin=

8.3338

cfmin=

Columns1through6

1.00002.15195.62906.93386.79253.7398

Column7

1.0000

(5)

old=tf(1,[1,a0,1]);

new=tf(1,cfmin);

[yold,told]=step(old,50);

[ynew,tnew]=step(new,50);

plot(told,yold,'b','LineWidth',1)

axis([0,18,0,1.1])

holdon,plot(tnew,ynew,'r','LineWidth',3),holdoff

xlabel('t')

title('ITAE6阶新老标准型的阶跃响应比较')

legend('Old','New',4),gridon

图8.7-17新老标准型的阶跃响应局部放大比较图

表8.7-2ITAE标准型新系数(黑体)和老“经典”系数(细体)对照

阶次

ITAE值

传递函数分母多项式系数

2

1.99

1.9519

11.41

11.50491

3

3.144

3.1383

11.752.151

11.78282.17151

4

4.626

4.5913

12.103.402.751

11.95213.34582.64731

5

7.155

6.3215

12.805.005.503.401

12.06674.49764.67303.25681

6

9.656

8.3338

13.256.608.607.453.951

12.15195.62906.93386.79253.73981

7

15.003

10.6290

14.4810.4215.0515.5410.644.5801

12.21696.74339.346911.5778.67784.32261

8

18.680

13.2051

15.2012.8021.6025.7522.2013.305.151

12.26817.831311.847217.532516.064511.30944.80691

●研究表明:

ITAE函数搜索空间的形状非常复杂,凹凸不平,小谷很多,许多地方深谷高峰相邻。

要找到真正最小值点决非易事。

虽可以肯定:

单点标准型的新系数比老系数具有更小的ITAE值;但不能断言这新系数一定指示着最小值点。

.2数值计算方面的考虑

.2.1微分方程解算器Solver

101ode45和ode23运作机理简要

102ode113运作机理简要

103ode15s和ode23s运作机理简要

104不同解算器解Stiff方程的表现

【例8.8-1】求微分方程

时的解。

图8.8-1微分方程的块图模型exm080801

(1)关于exm080901.mdl的说明

(2)

symstxxd

xs=dsolve('D2x+100*Dx+0.9999*x=0','x(0)=1,Dx(0)=0','t')

xsd=diff(xs,'t')

HL2=ezplot(xd-xsd,[0,10,-0.012,0]);

set(HL2,'LineWidth',3)

title(['x''=',char(xsd)])

xs=

9999/(9998*exp(t/100))-1/(9998*exp((9999*t)/100))

xsd=

9999/(999800*exp((9999*t)/100))-9999/(999800*exp(t/100))

图8.8-2微分方程的解x和它的导数dx/dt

(3)

tt=(0:

4000)/10;

xx0=subs(xsd,t,tt);

Tspan=600;

opts=simset('Solver','ode45');

[tt1,xx1,s]=sim('exm080801',Tspan,opts);

opts=simset('Solver','ode15s');

[tt2,xx2,s]=sim('exm080801',Tspan,opts);

plot(tt,xx0,'k',tt1,xx1(:

2),'b:

',tt2,xx2(:

2),'r-.')

axis([246247-8.55e-4-8.35e-4])

legend('Symbolic','ode45','ode15s',0)

xlabel('t'),ylabel('dx/dt')

title('Stiff方程的三种算法结果比较局部放大')

ns1=length(xx1)

ns2=length(xx2)

ns1=

18085

ns2=

101

图8.8-3不同方法的解算结果比较

.2.2积分步长和容差

101积分步长的选择

102计算容差的选择

.2.3代数环问题

101无惯性模块和代数环

102消减代数环影响

【例8.8-2】构建由方程(8.8-2)和(8.8-3)表述系统的Simulink块图模型,讨论代数环。

(8.8-2)

(8.8-3)

图8.8-4带隐式代数方程的块图模型exm080802_1

(1)关于图8.8-4所示exm080802_1.mdl的说明

(2)

(3)

图8.8-5采用代数约束模块消减代数环影响的exm080802_2

(4)

图8.8-6采用单位延迟模块消减代数环影响的exm080802_3

(5)

%exm080802m.m

clearall

bdclose('all')%<2>

load_system('simulink')%<3>

tic;sim('exm080802_1');T1=toc;

tic;sim('exm080802_2');T2=toc;

t2='0.2';

open_system('exm080802_3')

set_param('exm080802_3','MaxStep',t2)

tic;sim('exm080802_3');T3=toc;

t002='0.002';

set_param('exm080802_3','MaxStep',t002)

tic;sim('exm080802_3');T4=toc;

disp('')

disp([blanks(31),'仿真绝对耗时',blanks(5),'仿真相对耗时'])

disp(['带代数环原模型',blanks(20),num2str(T1),blanks(12),num2str

(1)])

disp(['代数约束模块',blanks(22),num2str(T2),blanks(9),num2str(T2/T1)])

disp(['单位延迟阻断','MaxStep=',t2,blanks(9),num2str(T3),blanks(8),num2str(T3/T1)])

disp(['单位延迟阻断','MaxStep=',t002,blanks(7),num2str(T4),blanks(9),num2str(T4/T1)])

(a)含代数环的原模型

相对耗时1

(b)采用代数约束模块的修改模型

相对耗时0.25

(c)采用单位延迟模块的修改模型

最大步长取0.2

相对耗时0.18

(d)采用单位延迟模块的修改模型

最大步长取0.002

相对耗时0.34

图8.8-7采用代数约束模块的块图模型的输出曲线

.3S函数模块的创建和应用

.3.1S函数概述

.3.2S函数模块及其运作机理

(1)

(2)

图8.9-2

101开发S函数模块的一般步骤

.3.3M码S函数

101两个级别的M码S函数

102对二级M码S函数模版的注释

functionmsfuntmpl_basic(block)

%%msfuntempl_basic是二级M码S函数模版的基本型。

在大多数场合,该模版已够用。

%%用户使用该模版编写自己S函数时,绝不要沿用msfuntempl_basic名称,而应另起函数名。

%%更全面深入的模版是msfuntempl.m,它也驻留在{toolbox/simulink/blocks}文件夹上。

%%该主函数只包含如下一条指令,不得更改,不得添加。

setup(block);

%endfunction

%%====设置Inputports、Outputports、Dialogparameters、Options等特性;必须有。

functionsetup(block)

%%

(1)设置输入输出口数目

block.NumInputPorts=1;

block.NumOutputPorts=1;

%%

(2)调用“运行对象”的SetPreCompInpPortToDynamic和SetPreCompOutPortInfoToDynamic

%%方法使模块的输入输出口继承信号的数据类型、维数、是否复数、采样模式

block.SetPreCompInpPortInfoToDynamic;

block.SetPreCompOutPortInfoToDynamic;

%%(3)若模块对输入口某些属性有特别要求,则进行必要的重定义;否则,以下省略。

%%以下指令及其赋值仅是示例,用户应据需要改写。

block.InputPort

(1).Dimensions=1;

block.InputPort

(1).DatatypeID=0;%double

block.InputPort

(1).Complexity='Real';

block.InputPort

(1).DirectFeedthrough=true;%%true有直通通路;false则无。

%%(4)若模块对输出口某些属性有特别要求,则进行必要的重定义;否则,以下省略。

%%以下指令及其赋值仅是示例,用户应据需要改写。

block.OutputPort

(1).Dimensions=1;

block.OutputPort

(1).DatatypeID=0;%double

block.OutputPort

(1).Complexity='Real';

%%(5)指定S函数模块的对话窗参数数目

%%以下赋值仅是示例,用户应据需要改写。

block.NumDialogPrms=0;

%%(6)指定采样时间,可取格式:

%%[0offset],连续采样时间;[positive_numoffset],离散采样时间;

%%[-1,0],继承采样时间;[-2,0],可变采样时间

%%以下赋值仅是示例,用户应据需要改写。

block.SampleTimes=[00];%%表示无偏移的连续采样

%%(7)指定仿真状态的保存和创建方法,可取选项:

%%'UnknownSimState',先给出警告,然后采用默认设置;

%%'DefaultSimState',采用内建模块的方法保存和重建连续状态、工作向量等

%%'HasNoSimState',没有仿真状态要处理(如中模块不带输出口)

%%'CustomSimState',通告Simulink有GetSimState和SetSimState方法实施

%%'DisallowSimState',不允许保存和重建,若保存和重建则报错

block.SimStateCompliance='DefaultSimState';%%通常使用该指令及赋值。

%%(8)下面列出了块方法的最常用回调名(即单引号内的字符),它们是不可更改的。

%%函数句柄(即@及其后的字符)可以由用户自己命名,但必须与子函数名一致。

%%对于那些不需要的回调方法,用户应整行加以删除。

block.RegBlockMethod('PostPropagationSetup',@DoPostPropSetup);

%%设置Dwork向量的数目及其属性;仅含连续状态的S函数,不需要此回调。

block.RegBlockMethod('InitializeConditions',@InitializeConditions);

%%若仿真开始前及仿真过程中需要多次初始化,则使用该回调.

%%该回调对连续状态ContStates和/或Dwork向量赋初始值、配置内存等。

block.RegBlockMethod('Start',@Start);

%%若仅在仿真开始前需要初始化,则使用该回调。

block.RegBlockMethod('Outputs',@Outputs);%Required

%%任何S函数都必需该回调。

该回调计算S函数的输出,并存放于输出信号数组。

block.RegBlockMethod('Update',@Update);

%%若S函数有离散状态,或无直通通路,则需要该回调。

block.RegBlockMethod('Derivatives',@Derivatives);

%%若有连续状态,则需要该回调。

block.RegBlockMethod('Terminate',@Terminate);

%%二级M码S函数不必使用此回调。

%endsetup

%%====后向传递设置:

S函数含离散状态,或无直通通路时写该子函数。

functionDoPostPropSetup(block)

%%以下指令及其赋值仅是示例,用户应据需要改写。

block.NumDworks=1;

block.Dwork

(1).Name='x1';

block.Dwork

(1).Dimensions=1;

block.Dwork

(1).DatatypeID=0;%double

block.Dwork

(1).Complexity='Real';%real

block.Dwork

(1).UsedAsDiscState=true;

%endDoPostPropSetup

%%====初始化条件:

当S函数需多次初始化时,才写该子函数

functionInitializeConditions(block)

%%(以下填写适当指令)

%endInitializeConditions

%%====启动:

当S函数仅需初始化一次,则应编写该子函数

functionStart(block)

%%以下指令行,仅是示例,用户应据需要编写。

block.Dwork

(1).Data=0;

%endfunction

%%====输出:

任何S函数都必有该子函数

functionOutputs(block)

%%以下指令行,仅是示例,用户应据需要编写。

block.OutputPort

(1).Data=block.Dwork

(1).Data+block.InputPort

(1).Data;

%endOutputs

%%====更新:

若S函数有离散状态,或无直通通路,则需要编写此子函数。

functionUpdate(block)

%%以下指令行,仅是示例,用户应据需要编写。

block.Dwork

(1).Data=block.InputPort

(1).Data;

%endUpda

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2