代码之家  ›  专栏  ›  技术社区  ›  user2738748

如何在Matlab中正确优化具有参数边界的函数?

  •  1
  • user2738748  · 技术社区  · 9 年前

    我正在使用Matlab 2015a。

    以下是我要优化的功能:

    function result = fig_of_merit(x, a, b, c, d) 
        result = 1;
    end
    

    这就是我想要优化功能的方式:

    x1 = [10*10^-6, 120]; 
    x2 = [300*10^-6, 175];
    fminbnd(@(x) fig_of_merit(x, 1, 2, 3, 4),x1,x2);
    

    我一直收到以下错误:

    使用时出错* 内部矩阵维度必须一致。

    fminbnd错误(第291行)

    x=xf+si*max(绝对值(d),tol1);

    测试错误(第5行)

    fminbnd(@(x)fig_of_merit(x,1,2,3,4),x1,x2);

    我的代码有什么问题?我也使用 fminsearch公司 功能和一切都很好。

    这与我使用的匿名函数有关——当我将向量x1和x2缩减为标量时,它起了作用:

    fminbnd(@(x) fig_of_merit(x, 1, 2, 3, 4),-4, 5);
    

    我不满意,因为我想同时优化两个参数。

    1 回复  |  直到 9 年前
        1
  •  1
  •   drhagen    9 年前

    这个 fminbnd 函数仅适用于标量参数。它不能同时优化两个参数。然而 fmincon 函数可以执行以下操作:

    x1 = [10*10^-6, 120]; 
    x2 = [300*10^-6, 175];
    fmincon(@(x) fig_of_merit(x, 1, 2, 3, 4),ones(size(x1)),[],[],[],[],x1,x2);