主要内容

lsqnonlin使用Simul金宝appink®模型

此示例显示了如何调整Simulink模型的参数。金宝app该模型,Optsim.,船只在优化/演示MATLAB®安装的文件夹。该模型包括一个非线性过程工厂,其建模为Simulink块图。金宝app

植物饱和子饱和度

该工厂是具有致动器限制的阻尼三阶模型。致动器限制是饱和极限和转换速率限制。执行器饱和极限限制切断大于2个单位或小于-2单元的输入值。执行器的转换速率限制为0.8单位/秒。显示系统到步进输入的闭环响应闭环响应。您可以通过打开模型来查看此响应(类型Optsim.在命令行或单击型号名称),然后选择来自模拟菜单。响应地图到范围。

闭环响应

问题是设计反馈控制环路,该反馈控制环路跟踪对系统输入的单位步骤。闭环工厂的块在植物和致动器被放置在分层子系统块方面。范围块在设计过程中显示输出轨迹。

闭环模型

要解决此问题,请尽量减少输出和输入信号之间的误差。(相比之下,在使用带有Simulink®模型的Fminim金宝appax该解决方案涉及最小化输出的最大值。)变量是比例积分衍生物(PID)控制器的参数。如果您只需要在一个时间单位最小化错误,则您将具有标量目标函数。但目标是最小化0到100的所有时间步长的误差,从而产生多目标函数(每次步骤的一个功能)。

利用lsqnonlin执行最小二乘拟合输出的跟踪。通过该功能执行跟踪tracklsq.,这是嵌套在RunTracklsq.下面tracklsq.返回错误信号you ..,通过呼叫计算的输出SIM,减去输入信号1。

功能RunTracklsq.设置所有所需的值,然后调用lsqnonlin通过目标函数tracklsq.。变量选择传递给lsqnonlin定义标准和显示特性。在这种情况下,您要求输出,使用'levenberg-marquardt'算法,并为阶梯和目标函数提供0.001的终止公差。

在模型中运行模拟Optsim.,变量kp.ki.kd.A1,和a2A1a2必须定义工厂块中的变量。kp.ki.,和kd.是要优化的变量。功能tracklsq.嵌套在RunTracklsq内,以便在两个函数之间共享变量A1和A2。变量A1a2被初始化RunTracklsq.

目标职能tracklsq.运行模拟。模拟可以在基础工作区或当前工作空间中运行,即函数调用的工作空间SIM,在这种情况下是工作空间tracklsq.。在这个例子中,srcworkspace.选项设置为'当前'告诉SIM在当前工作区中运行模拟。RunTracklsq.将模拟运行到100秒钟。

仿真完成后,RunTracklsq.创造了myobj.当前工作区中的对象(即工作区)tracklsq.)。该外港块图模型中的块放置了you ..对象的字段在模拟结束时进入当前工作空间。

当你运行时RunTracklsq.,优化给出了比例,积分和衍生物的解决方案(kp.ki.kd.)控制器的收益:

[kp,ki,kd] = runtracklsq
kp = 3.1330.
ki = 0.1465.
KD = 14.3918.

范围显示了优化的闭环步骤响应。

闭环响应后lsqnonlin

注意:呼叫SIM导致对Simulink常微分方程(ODE)求解器之一的呼叫。金宝app必须选择要使用的求解器类型的选择。从优化的角度来看,如果足以解决ode,则固定步骤ode求解器是最佳选择。然而,在刚性系统的情况下,可能需要可变步骤ode方法来解决ode。

然而,由于步进尺寸控制机制,通过可变步骤求解器产生的数值溶液不是参数的平滑功能。这种缺乏光滑度可以防止优化程序会聚。当使用固定步骤求解器时,不会引入缺乏平滑性。(有关进一步的解释,请参阅[53]。)

金宝app建议使用Simulink设计优化™软件,以解决Simulink可变步骤求解器的多目标优化问题。它提供了一个特殊的数字渐变计算,其适用于Simulink,避免引入缺乏平滑度的问题。金宝app

以下代码创建了RunTracklsq.功能。

功能[kp,ki,kd] = runtracklsq%RunTrackLSQ使用Simulink使用LSQNONLIN演示。金宝appOptsim.%加载模型PID0 = [0.0504 1.9688];%设置初始值A1 = 3;A2 = 43;%初始化模型植物变量选项= Optimoptions(@lsqnonlin,'算法''levenberg-marquardt'......'显示''off''steptolerance',0.001,'OptimalalcaltalTolerance',0.001);pid = lsqnonlin(@tracklsq,pid0,[],[],选项);kp = pid(1);ki = pid(2);KD = PID(3);功能f = tracklsq(PID)%跟踪Optsim的输出到1的信号Model Optsim需要%变量A1和A2。它们与RunTracklsq共享,所以不需要%重新定义。kp = pid(1);ki = pid(2);KD = PID(3);%sim选项和计算函数值myobj = sim('Optsim''srcworkspace''当前'......'停止''100');f = myobj.get('你') -  1;结束结束