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
,和a2
(A1
和a2
必须定义工厂块中的变量。kp.
那ki.
,和kd.
是要优化的变量。功能tracklsq.
嵌套在RunTracklsq内,以便在两个函数之间共享变量A1和A2。变量A1
和a2
被初始化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;结束结束