【发布时间】:2019-10-16 22:34:59
【问题描述】:
我正在尝试最小化这个非线性函数
在 MATLAB 中使用 BFGS 优化方法。但是,我很难弄清楚如何为 n=500 编写函数代码。我尝试了这些变体但没有运气:
1)
S_symsum = @(x) (100*(x(2*(1:250))-x(2*(1:250)-1)^2)^2+(1-x(2*(1:250)-1))^2);
2)
k = 1:N/2;
V = (100*(x(2*k)-x(2*k-1).^2).^2+(1-x(2*k-1)).^2);
f = sum(V);
3)f = symsum(100*(x(2*k)-x(2*k-1).^2).^2+(1-x(2*k-1)).^2,k,1,500)
编辑:由于 BFGS 方法需要,我需要能够在每次迭代时获取函数 f 的梯度。所以,函数公式需要保持这个属性
【问题讨论】:
-
f = @(x) sum(100*(x(2:2:end)-x(1:2:end).^2).^2+(1-x(2:2:end)).^2)? -
它怎么知道从 1 到 500 (n = 500) 的总和?
-
对于所有元素都等于 1 的向量
x(您得到F(x)==0),此函数被最小化。 -
@user23985723985 它没有。它将一直执行到
x的最后一个值。所以如果x有n=500值(length(x)==500)那么它会做 500,如果它有 20 那么它会做 20。 -
@CrisLuengo 是的,这很直观,但起始向量将为零,鉴于其独特的属性,我不能保证找到该函数的全局最优值
标签: matlab optimization nonlinear-optimization