由matlab中的循环定义的匿名函数

时间:2014-07-22 13:04:24

标签: matlab for-loop anonymous-function

我在代码中使用匿名函数。例如:

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] "

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

找到答案: 创建F(x)和GRAD_F(x)作为matlab计算f和grad_f中的函数。 然后:

G = @(x) [F(x);GRAD_F(x)];
Algo(G,varargin);