2017-10-21 11 views
1

나는 2 인자와 기능, 예를 들면있는 경우 :익명 함수의 각 인수를 교란 개별적으로

formula

을하고 난 i 번째 요소는 섭동에 f을 보유 기능의 벡터를 만들려면 다음과 같이

formula

내가이 작업을 수행 할 수 있습니다 :

i 번째 인수
f = @(x) x(1) + x(2)^2 ; 
eps = 1e-10; 
g = @(x) []; 
for i = 1:2 
    f_i = @(x) f([x(1) - eps * (i == 1), x(2) - eps * (i == 2)]); 
    g = @(x) [g(x), f_i(x)]; 
end 

k 인수가있는 함수에 대해 익명 함수를 사용하는 방법이 있습니까? 예를 들어 제 기능을한다면 :

formula

편집

(x1, ..., xk) 내가, 즉 x_opt = fminunc(@(x) g(x) * eye(k) * g(x)', zeros(k, 0))하지 알려진 값을 추정해야하는 매개 변수입니다.

: 대답은 어떤 함수 형태에 적용해야한다 (예 : f = @(x) x(1)^x(2)이 경우 내가 MATLAB에서 g = @(x) [(x(1) - eps)^x(2), x(1)^(x(2) - eps)]

답변

2

자주 같은 기능을 만들 필요가 없습니다 원하는 것 대신에 당신이 벡터와 함께 작업 할 수 있습니다. .

X = [x1 x2 x3 ... xk]; 

대신의 f = [x1^1 x2^2 ...]을 : 및 행렬

당신은 값의 벡터로 (x1,x2,...)을 정의 할 수 있습니다 작성할 수 g 들면 각 행은 기능 나타내는 [k * k] 행렬 생성 할

k = numel(X); 
f= X.^(1:k); 

:

Eps = 1e-10; 
g = repmat(f,k,1); 

다음 Eps 의해 대각 요소들을 승산하는 단계;

g(1:k+1:end) = g(1:k+1:end) * Eps; 

편집 :

함수는 또한 핸들 셀 어레이

를 생성 할 수있다.

Eps의 대각선 행렬을 만들 수 있으며 각 행에 대해 x을 받아들이는 함수 핸들을 반환 할 수 있으며 f(x+row)을 반환합니다.

f = @(x) x(1) + x(2)^2 ; 
k = 2; % k = numel(x) 
Eps = 1e-10; 
g = cell (1, k); 
d = diag(repmat(Eps,1,k)); 
for ii = 1 : k 
    g{ii} = @(x)f(d(ii,:)+x); 
end 
모두 한 줄에

: 답장을

g = cellfun(@(y){@(x)f(y+x)},num2cell(diag(repmat(Eps,1,k)),2)); 
+0

감사합니다,하지만 난 X''에 대한 고정 된 값이 없습니다. 궁극적으로 나는'x'의 최적 값을 찾기 위해'g'를 해결사에 넣어야 할 것입니다 - 즉'fminunc (@ (x) g (x) * eye (k) * g (x) ', 0 , k))'. 나는 내 질문을 편집 할 것이다. – greyBag

+0

@greyBag 답변이 업데이트되었습니다. – rahnema1