产生要在MATLAB中优化的非线性函数

时间:2019-10-15 23:44:49

标签: matlab optimization nonlinear-optimization

我正在尝试最小化该非线性函数

enter image description here

使用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的梯度。因此,函数公式将需要保留此属性

1 个答案:

答案 0 :(得分:0)

我使用N = 10进行说明,将其更改为500以进行优化。

% given length of x, here N
N = 10;
% supposed x is a row vector 
 x = sym('x', [1,N]);
f = 0;
 for i = 1:N/2
    f =   f + 100.*(x(2*i) - (x(2*i-1)).^2) + (1-x(2*i-1)).^2;
 end


% gradient 
% to compute gradient, use syms function type
g = gradient(f);


% for evaluating the function or the gradient use function handle
feval = matlabFunction(f, 'vars', {x});
geval = matlabFunction(g, 'vars', {x});