首页 文章

使用“fminunc”最小化数组返回函数

提问于
浏览
0

我正在使用MATLAB构建一个自动调整三个PID控制器增益的代码 . 我正在考虑它的方法是最小化我的系统的错误(所需状态和获得的状态之间的差异),为此,我编写了一个函数,接受PID增益作为输入参数并返回计算出的错误,即:

errors_vector = closedLoopSimulation(pidGains)

由于我有三个设定点(输入命令),因此输出 errors_vector 的维数为3 * N,其中N是我拥有的时间样本数(在我的情况下为1000) . 所以这就是我想要最小化的功能,为此,我尝试使用 fminunc 命令,即:

pidGains_ini  = [2.4 0.1 0.4];
func          = @closedLoopSimulation;
[pid, fval]   = fminunc(func, pidGains_ini)

但是,当我运行最后一段代码时,我收到此错误:

User supplied objective function must return a scalar value.

这显然是因为 errors_vector 是3 * 1000阵列而不是标量 .

从编程的角度来看,我的问题是,有没有办法让最小化返回数组的函数?

另一方面,从控制理论的角度来看,还有另一种方法可以自动优化PID增益吗?

我希望我做得足够清楚 .

谢谢

1 回答

  • 1

    最小化矢量的定义不是很明确(有一种称为多目标或多标准的优化,但这有点特殊) . “正常”优化方法只能最小化(或最大化)标量目标 . 我怀疑在你的情况下,你可以通过取平方误差的总和并最小化它来形成这样的目标 . 完成:这是标准操作程序,通常称为“最小二乘法” .

相关问题