我想使用循环找到函数的局部最小值。
基本上,函数有两个选择变量,比如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是固定值时找到局部最小值(就像你试图对循环做的那样(,那么最好将x
和y
组合成一个向量。
您可以直接修改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])