【问题标题】:How can I use fminsearch with forloop in the Matlab?如何在 Matlab 中使用 fminsearch 和 for 循环?
【发布时间】:2021-12-19 00:21:41
【问题描述】:

我想使用循环找到函数的局部最小值。

基本上,该函数有 2 个选择变量 f(x,y)。

但我想使用 for 循环找到 y 值从 1,2,3...10 开始的 f(x,y) 的最小值。

例如,

obj = @(x,y) x^2 + x*y + y^2
for i = 1:30
    fminsearch(...)
end

但我不确定如何正确使用它。

谁能帮我解决这个问题?

提前致谢。

【问题讨论】:

    标签: matlab for-loop optimization


    【解决方案1】:

    您可以使用包装函数:

    obj = @(x,y) x^2 + x*y + y^2;
    for i = 1:30
        y_i = generate_ith_y_value(i);
        fminsearch(@(x) obj(x,y_i), x0)
    end
    

    如果您想找到对 (x,y) 以便 obj(x,y) 是局部最小值,而不是在 y 是固定值时找到局部最小值(就像您尝试使用 for 循环所做的那样),那么最好将xy 组合成一个向量。

    你可以直接修改obj

    % x(1) = x, x(2) = y
    obj = @(x) x(1)^2 + x(1)*x(2) + x(2)^2;
    fminsearch(@(x) obj(x), [x0; y0])
    

    如果您不能直接修改obj,请使用一个接受一个输入参数并将其分隔的包装函数:

    obj = @(x,y) x^2 + x*y + y^2;
    
    % xx(1) = x, xx(2) = y
    fminsearch(@(xx) obj(xx(1),xx(2)), [x0; y0])
    

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 2012-02-11
      • 2014-11-28
      • 1970-01-01
      • 2013-12-21
      • 2021-04-21
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多