主要内容

lsqnonlin仿真软件模型金宝app

这个例子展示了如何调优参数的仿真软件®模型。金宝app模型,optsim,包含当您运行这个例子。该模型包含一个非线性过程建模为仿真软件框图。金宝app

植物与执行机构饱和

植物是一个欠阻尼三阶模型与执行机构的限制。致动器限制饱和限制,转换速率限制。驱动器饱和限制切断输入值大于2单位或者小于2单位。致动器的转换速率限制为0.8户/秒。系统的闭环响应阶跃输入所示闭环反应。你可以看到这个响应通过打开模型(类型optsim在命令行或单击模型名称),并选择运行模拟菜单。响应块范围。

闭环反应

问题是设计一个反馈控制回路跟踪单位阶跃输入系统。进入闭环植物的植物和致动器的街区位于层次结构子系统。一块范围显示输出轨迹在设计过程中。

闭环模型

为了解决这个问题,最小化系统的输入信号和输出之间的误差。(相比之下,在这个例子中用fminimax仿真软件模型金宝app解决方案,最大限度地减少输出的最大值)。变量的参数比例积分微分(PID)控制器。如果你只需要最小化误差在一个时间单位,你会有一个标量目标函数。但我们的目标是最小化所有步骤从0到100的错误,从而产生一个多目标函数(一个函数为每个时间步)。

使用lsqnonlin执行常用的跟踪输出。执行的跟踪功能tracklsq,这是嵌套在runtracklsq最后这个例子。tracklsq返回错误的信号,输出计算通过调用sim卡-输入信号1。

这个函数runtracklsq设置所需的所有值,然后调用lsqnonlin的目标函数tracklsq。的变量选项传递给lsqnonlin定义了标准和显示特征。指定的选项没有显示输出,使用“levenberg-marquardt”算法,选择给终止公差的步骤和目标函数的0.001。

运行仿真模型中optsim,你必须指定变量Kp,Ki,Kd,a1,a2(a1a2变量的块)。Kp,Ki,Kd变量进行优化。这个函数tracklsq内嵌套runtracklsq这样的变量a1a2这两个函数之间共享。的变量a1a2正在初始化runtracklsq

目标函数tracklsq仿真运行。您可以运行仿真基工作区或当前工作空间,也就是说,工作空间的函数调用sim卡,在这种情况下的工作空间tracklsq。在这个例子中,SrcWorkspace选项设置为“当前”告诉sim卡仿真运行在当前工作区中。runtracklsq运行仿真100秒。

当完成仿真,runtracklsq创建myobj对象在当前工作空间(也就是说,工作区tracklsq)。外港块的框图模型了字段的对象到当前工作空间的模拟。

当您运行runtracklsq比例,优化给出了解决方案,积分和导数(Kp,Ki,Kd)获得的控制器。

(Kp、Ki Kd) = runtracklsq
Kp = 3.1330
Ki = 0.1465
Kd = 14.3918

显示了优化的闭环阶跃响应范围。

闭环响应后lsqnonlin

请注意:电话sim卡导致调用模型的常微分方程(ODE)解决。金宝app你需要选择使用哪种类型的解算器。从优化的角度来看,一个固定的ODE求解器是最好的选择,如果能充分解决ODE。然而,在僵硬的情况下系统,变步歌唱方法可能需要解决的颂歌。

产生的数值解变步解算器,然而,并不是一个平滑函数的参数,因为步长控制机制。这种缺乏平滑可以防止一个优化程序收敛。平滑的缺乏并不是一个问题,当你使用一个固定的解决者。(进一步说明,请参阅[53]。)

金宝app仿真软件设计优化™软件建议为解决多目标优化问题与模型变步解决者。这个软件提供了一个特殊数值梯度计算与仿真软件和避免引入缺乏平滑度的问题。金宝app

Helper函数

下面的代码创建runtracklsqhelper函数。

函数(Kp、Ki Kd) = runtracklsq% RUNTRACKLSQ演示了用LSQNONLIN仿真软件。金宝appmdl =“optsim”;open_system (mdl)%加载模型在= Si金宝appmulink.SimulationInput (mdl);%创建模拟输入对象在= in.setModelParameter (“StopTime”,“100”);% 100年停止时间pid0 = (0.63 0.0504 1.9688);%初始增益值a1 = 3;a2 = 43;%初始化变量模型工厂选择= optimoptions (@lsqnonlin,“算法”,“levenberg-marquardt”,“显示”,“关闭”,“StepTolerance”,0.001,“OptimalityTolerance”,0.001);%优化收益set_param (mdl“FastRestart”,“上”);%快速重启pid = lsqnonlin (@tracklsq pid0,[],[],选项);set_param (mdl“FastRestart”,“关闭”);%返还收益Kp = pid (1);Ki = pid (2);Kd = pid (3);函数F = tracklsq (pid)%的输出跟踪optsim 1的一个信号%设置仿真输入对象参数在= in.setVariable (“金伯利进程”pid (1),“工作区”、mdl);在= in.setVariable (“吻”pid (2),“工作区”、mdl);在= in.setVariable (“Kd”pid (3),“工作区”、mdl);%模拟= sim(中);F =重燃(“你”)- 1;结束结束

版权2019 - 2020 MathWorks公司。