lsqnonlin
仿真软件模型金宝app
这个例子展示了如何调优参数的仿真软件®模型。金宝app模型,optsim
是包含在optim
/演示
安装文件夹的MATLAB®。该模型包含一个非线性过程建模为仿真软件框图。金宝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
(a1
和a2
变量的块)。Kp
,Ki
,Kd
变量进行优化。这个函数tracklsq
内嵌套runtracklsq
这样的变量a1
和a2
这两个函数之间共享。的变量a1
和a2
正在初始化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函数
下面的代码创建runtracklsq
helper函数。
函数(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公司。