1
我在我的代碼中使用匿名函數。例如:由matlab中的循環定義的匿名函數
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] "
非常感謝您的幫助!
匿名函數已經是「閉包」了。這意味着您可以像通常那樣定義匿名函數,參考表達式中的'grad_f'和'f',函數對象將存儲定義時的值。如果這不是你的問題,請更清楚你想要發生什麼,哪些不起作用。 – Peter
G = @(x)[f,grad_f]; 然後循環不起作用,因爲x在循環中沒有意義。 你能舉個例子說明你的解釋嗎? 謝謝! – user3819570
對不起,我不知道你在問什麼。我不知道你是在試圖在函數內部定義一個循環,還是在循環內定義函數。我認爲你問題中的問題是從這裏開始的:「那麼我想做一些事情:」。用更清楚的描述你的意圖來替換該語言。 – Peter