如何在Matlab中使用带有forloop的fminsearch



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

基本上,函数有两个选择变量,比如f(x,y(。

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

例如,

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

但我不知道如何正确使用它。

有人能帮我解决这个问题吗?

提前谢谢。

您可以使用包装器函数:

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是固定值时找到局部最小值(就像你试图对循环做的那样(,那么最好将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])

相关内容

  • 没有找到相关文章

最新更新