2017-12-12 5 views
0

여러 회귀에서 계수를 저장하고 나중에 모든 다른 예측 값을 한 번에 평가하려고합니다. 이 특별한 비트의 코드는 많이 호출 될 것이므로 가능한 한 빠르고 효율적 이길 원합니다. 아이디어는 내가 지금Matlab은 같은 지점에서 여러 함수를 계산합니다.

F{1} = @(x) 0.5 + 1*x 
    F{2} = @(x) 0.3 + .4*x 

말, 객체를 가지고 내가 예를 들어, 평가하고자하는 것입니다 F (5), F {1} (5) 및 F {2} (5)를 수행하지 않아도 5.5와 2.3을 얻을 수 있습니다.

+0

가능한 중복 : MATLAB에서 여러 명령문을 실행하는 방법 익명 함수?] (https://stackoverflow.com/q/558478/52738) – gnovice

답변

1

당신의 두 가지 기능 :

[5.5 2.3] 

편집 당신을 위해 정상적인 기능을 사용할 수있는 좀 더 영리

당신이 원하는 경우 뭔가 :

F{1} = @(x) 0.5 + 1*x; 
F{2} = @(x) 0.3 + .4*x; 

% create another anonymous function which calls both F{1} and F{2} 
FF = @(x) [F{1}(x) F{2}(x)]; 

FF(5) 

당신에게 출력을 제공 당신이 좀더 할 수있는 "collection":

function test_function 
    F{1} = @(x) 0.5 + 1*x; 
    F{2} = @(x) 0.3 + .4*x; 

    result = collectorFunction (5, F{:}) 

end 
function output = collectorFunction (x, varargin) 
    output = zeros(nargin-1,1); 
    for ii=2:nargin 
    output(ii-1) = feval(varargin{ii-1}, x); 
    end 
end 

결과를 자동으로 이 결과를 수집합니다 당신은 예를 들어 다른 F{3}에게 콜렉터 기능을 추가하는 경우 다음

5.5 
2.3 

:

function test_function 
    F{1} = @(x) 0.5 + 1*x; 
    F{2} = @(x) 0.3 + .4*x; 
    F{3} = @(x) 1.3 + .3*x;    % Simply ADD a new F{N}.... 

    result = collectorFunction (5, F{:}) 

end 
function output = collectorFunction (x, varargin) 
    output = zeros(nargin-1,1); 
    for ii=2:nargin 
    output(ii-1) = feval(varargin{ii-1}, x); 
    end 
end 

결과 :

5.5 
2.3 
2.8 
+0

네, 고마워요, 그것에 대해 생각해 보았습니다. 실제로 제 현재의 해결 방법입니다. 방금 구현이 느리다는 것을 알았습니다. 또한 다양한 입력을 쉽게 처리 할 수 ​​없습니다. – Immo

+0

* collection *이 여러 함수를 동적으로 처리 할 수 ​​있도록 업데이트되었습니다. – matlabgui