我在代码中使用匿名函数。例如:
G = @(x) [norm(A*x-b);A'*(A*x-b)];
norm(Ax-b)是目标函数,A' *(Ax-b)是梯度。 然后,
Algo( G,varagin );
等
我想做的是用循环定义f:
n = 9;
k = 2;
t = 1 - x.^k;
f = 0;
for i=1:n
f = f + x(i,1)*prod(t(1:i-1));
end
grad_f = zeros(n,1);
for i0=1:n
s = t;
s(i0) = [];
for i=i0+1:n
grad_f(i0) = grad_f(i0) + x(i)*prod(s(1:i0-1));
end
grad_f(i0) = -k*x(i0)^(k-1)*grad_f(i0);
grad_f(i0) = grad_f(i0) + prod(t(1:i0-1));
end
然后我想做类似的事情:
" G = @(x) [f,grad_f] "
非常感谢你的帮助!
答案 0 :(得分:1)
找到答案: 创建F(x)和GRAD_F(x)作为matlab计算f和grad_f中的函数。 然后:
G = @(x) [F(x);GRAD_F(x)];
Algo(G,varargin);