Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中生成待优化的非线性函数_Matlab_Optimization_Nonlinear Optimization - Fatal编程技术网

在MATLAB中生成待优化的非线性函数

在MATLAB中生成待优化的非线性函数,matlab,optimization,nonlinear-optimization,Matlab,Optimization,Nonlinear Optimization,我试图最小化这个非线性函数 利用MATLAB中的BFGS优化方法。然而,我花了很长时间才弄明白如何为n=500编写函数。我尝试过这些变化,但运气不佳: (一) S_symsum=@(x)(100*(x(2*(1:250))-x(2*(1:250)-1)^2+(1-x(2*(1:250)-1))^2) (二) k=1:N/2; V=(100*(x(2*k)-x(2*k-1)。^2.^2+(1-x(2*k-1))。^2); f=总和(V) 3) f=symsum(100*(x(2*k)-x(2*k

我试图最小化这个非线性函数

利用MATLAB中的BFGS优化方法。然而,我花了很长时间才弄明白如何为n=500编写函数。我尝试过这些变化,但运气不佳:

(一)
S_symsum=@(x)(100*(x(2*(1:250))-x(2*(1:250)-1)^2+(1-x(2*(1:250)-1))^2)

(二)
k=1:N/2;
V=(100*(x(2*k)-x(2*k-1)。^2.^2+(1-x(2*k-1))。^2);
f=总和(V)

3)
f=symsum(100*(x(2*k)-x(2*k-1)。^2.^2+(1-x(2*k-1))。^2,k,1500)


编辑:由于BFGS方法的需要,我需要能够在每次迭代时获取函数f的梯度。因此,函数公式将需要保持此属性,我使用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});




f=@(x)sum(100*(x(2:2:end)-x(1:2:end)。^2+(1-x(2:2:end))。^2
?它如何知道从1到500(n=500)求和?对于所有元素都等于1的向量
x
,此函数被最小化(其中得到
f(x)==0
)@user239857239853985它不知道。它将执行此操作,直到最后一个值
x
。因此,如果
x
n=500
值(
length(x)==500
),那么它将执行500,如果它有20,那么它将执行20。@CrisLuengo是的,这是直观的,但是起始向量将是零,并且由于函数的唯一属性,我不能保证找到函数的全局最优值。请不要覆盖函数名
sum
。它存在于matlab中。请叫它
mysum
或其他什么。谢谢您的回复!我将执行BFGS作为非线性优化方法。因此,在每次迭代时,我需要能够得到函数f的梯度。使用这个公式可能吗?@CrisLuengo 1)同意N是均匀的,2)使用
fmincon
是为了表明OP可以使用任何需要函数句柄的优化器。3)
syms
函数可以区分,函数句柄不能t@Adam谢谢你!我将进一步研究这个问题later@user23985723985如果你认为答案对你有帮助,请接受。检查此链接