主要内容gydF4y2Ba

使用gydF4y2BafminimaxgydF4y2Ba仿真软件模型金宝appgydF4y2Ba

这个例子展示了如何调优参数的仿真软件®模型。金宝app模型,gydF4y2BaoptsimgydF4y2Ba是包含在gydF4y2BaoptimgydF4y2Ba/gydF4y2Ba演示gydF4y2Ba安装文件夹的MATLAB®。该模型包含一个非线性过程建模为仿真软件框图。金宝appgydF4y2Ba

植物与执行机构饱和gydF4y2Ba

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

闭环反应gydF4y2Ba

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

闭环模型gydF4y2Ba

优化这个系统,减少输出的最大值gydF4y2Ba tgydF4y2Ba 在0到100之间。(相比之下,在这个例子中gydF4y2Balsqnonlin仿真软件模型金宝appgydF4y2Ba解决方案,输出和输入信号之间的误差最小化)。gydF4y2Ba

这个例子的代码中包含helper函数gydF4y2BaruntrackmmgydF4y2Ba在gydF4y2Ba这个例子。gydF4y2Ba目标函数是输出gydF4y2Ba你gydF4y2Ba返回的gydF4y2Basim卡gydF4y2Ba命令。但最小化最大输出时间步骤可能会迫使输出是远低于统一在一段时间内的步骤。继续上面的输出0.95第一次20秒后,约束函数gydF4y2BatrackmmcongydF4y2Ba包含约束gydF4y2Ba你> = 0.95gydF4y2Ba从gydF4y2Bat = 20gydF4y2Ba来gydF4y2Bat = 100gydF4y2Ba。因为约束必须在表单中gydF4y2Ba ggydF4y2Ba ≤gydF4y2Ba 0gydF4y2Ba 的约束函数gydF4y2Bag =你(20:100)+ 0.95gydF4y2Ba。gydF4y2Ba

这两个gydF4y2BatrackmmobjgydF4y2Ba和gydF4y2BatrackmmcongydF4y2Ba使用的结果你gydF4y2Basim卡gydF4y2Ba从当前PID计算值。为了避免两次调用仿真,gydF4y2BaruntrackmmgydF4y2Ba嵌套函数这样的价值吗gydF4y2Ba你gydF4y2Ba目标和约束函数之间共享。仿真是只有当当前点的变化。gydF4y2Ba

调用gydF4y2BaruntrackmmgydF4y2Ba。gydF4y2Ba

(Kp、Ki Kd) = runtrackmmgydF4y2Ba
马克斯线搜索目标定向Iter F-count值约束steplength导数过程0 5 0 1.11982 1 11 17 1.012 - 0.04285 1.184 0.482 0.07978 - 1 2 1 -0.236 3 23日0.9996 - 0.00397 -0.0195黑森修改两次4 29日0.9996 - 3.464 e-05 1 0.000687黑森修改gydF4y2Ba
5 35 0.9996 -0.0175 2.274 e-09 1黑森修改局部最小值的两倍。约束满足。fminimax停止,因为预测目标函数的变化小于公差的值函数和约束满足约束的值公差内。gydF4y2Ba
Kp = 0.5894gydF4y2Ba
Ki = 0.0605gydF4y2Ba
Kd = 5.5295gydF4y2Ba

最后的价值gydF4y2Ba客观价值gydF4y2Ba列的输出显示了最大值的时间不到1的步骤。这个结果的闭环响应是图所示gydF4y2Ba使用fminimax闭环反应gydF4y2Ba。gydF4y2Ba

这个解决方案与获得的解决方案不同gydF4y2Balsqnonlin仿真软件模型金宝appgydF4y2Ba因为你是解决不同问题的配方。gydF4y2Ba

闭环响应使用gydF4y2BafminimaxgydF4y2Ba

Helper函数gydF4y2Ba

下面的代码创建gydF4y2BaruntrackmmgydF4y2Bahelper函数。gydF4y2Ba

函数gydF4y2Ba(Kp、Ki Kd) = runtrackmm optsimgydF4y2Ba%初始化模型(R)金宝appgydF4y2Bapid0 = (0.63 0.0504 1.9688);gydF4y2Ba% a1, a2,你共享TRACKMMOBJ和TRACKMMCONgydF4y2Baa1 = 3;a2 = 43;gydF4y2Ba%初始化变量模型gydF4y2Ba你= [];gydF4y2Ba%给你一个初始值gydF4y2Bapold = [];gydF4y2Ba去年pid %跟踪gydF4y2Ba选择= simset (gydF4y2Ba“规划求解”gydF4y2Ba,gydF4y2Ba“ode5”gydF4y2Ba,gydF4y2Ba“SrcWorkspace”gydF4y2Ba,gydF4y2Ba“当前”gydF4y2Ba);选择= optimset (gydF4y2Ba“显示”gydF4y2Ba,gydF4y2Ba“通路”gydF4y2Ba,gydF4y2Ba…gydF4y2Ba“TolX”gydF4y2Ba,0.001,gydF4y2Ba“TolFun”gydF4y2Ba,0.001);pid = fminimax (@trackmmobj pid0, [], [], [], [], [], [],gydF4y2Ba…gydF4y2Ba@trackmmcon选项);Kp = pid (1);Ki = pid (2);Kd = pid (3);gydF4y2Ba函数gydF4y2BaF = trackmmobj (pid)gydF4y2Ba%的输出跟踪optsim 1的一个信号。gydF4y2Ba%变量a1和a2与RUNTRACKMM共享。gydF4y2Ba%变量你RUNTRACKMM和共享gydF4y2Ba% RUNTRACKMMCON。gydF4y2BaupdateIfNeeded (pid) F =你;gydF4y2Ba结束gydF4y2Ba函数gydF4y2Ba测查[c] = trackmmcon (pid)gydF4y2Ba%的输出跟踪optsim 1的一个信号。gydF4y2Ba%变量你RUNTRACKMM和共享gydF4y2Ba% TRACKMMOBJgydF4y2BaupdateIfNeeded (pid) c =你(20:100)+ .95;测查= [];gydF4y2Ba结束gydF4y2Ba函数gydF4y2BaupdateIfNeeded (pid)gydF4y2Ba如果gydF4y2Bapold ~ isequal (pid)gydF4y2Ba%计算前提是必要的gydF4y2BaKp = pid (1);Ki = pid (2);Kd = pid (3);[~,~,你]= sim卡(gydF4y2Ba“optsim”gydF4y2Ba,100年[0],选择);pold = pid;gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba

另请参阅gydF4y2Ba

相关的话题gydF4y2Ba