0

면책 조항 : 실제로 Scilab을 사용하고 있습니다. 그러나 MATLAB과 거의 유사하며 연구 결과에 따라 MATLAB에서도 같은 현상이 발생합니다.Matlab의 다중 출력 기능은 정확히 무엇을 반환합니까?

MATLAB에서 함수는 다중 출력이 가능합니다. 우리가 함수 function [a, b] = f(x)을 가지고 있다고 가정하십시오. 내가 입력 한 경우 :

c = f(x) 

c에 첫 번째 출력의 값이 지정됩니다. 입력하는 경우 :

[a, b] = f(x) 

[a, b]에는 두 출력 쌍의 값이 제공됩니다. 이것은 MATLAB에 referential transparency이 없다는 것을 의미합니다. 표현 f(x)의 실제 값은 무엇입니까? 무슨 일이야?

+1

예, Matlab은 참조가 투명하지 않습니다. 그렇지 않으면 함수 결과를 색인화 할 수 있습니다. 일부 기능은 2 번째와 3 번째 출력으로 "덜 중요한"내용을 가지고 있기 때문에 프로그래밍을 '더 쉽게'만드는 것이라고 생각합니다. –

답변

4

요청 출력의 수는 기능이없는 출력 인수로 호출 특히, 동작을 변경합니다.

는 예를 들어,이 단순히 기본 설정으로 a의 데이터의 히스토그램을 나타내는 :

hist(a); 

다음 반환 히스토그램 데이터를 N로. 어떤 음모가 만들어지지 않습니다 :

N = hist(a); 

그러나, 우리는 두 개의 출력 (X 이제 빈 센터입니다) 우리가 어떤 출력 인수를 지정하지 않으면 hist 플롯하기 위해 내부적으로 사용하는 것 인 (bar와 히스토그램을 그릴 수를 요청하는 경우) :

[N, X] = hist(a); 
bar(X,N); 

이 동작은 nargout을 확인하여 제어하고, 자신의 기능에 통합 할 수 있습니다.

+0

이것은 의미가 있습니다! 다른 솔루션에서도이 점에 대해 언급했습니다. – Divakar

+0

첫 번째 경우에는'nargout = 0', 두 번째'nargout = 1'과 세 번째'nargout = 2'가 있습니까? –

+0

@JackM 예, 맞습니다. – am304

4

즉, f(x) 함수는 2 개의 출력을 반환합니다. 그러나 하나의 출력 인수 만 사용하여 호출하면 첫 번째 인수 만 반환됩니다 (귀하의 경우 a). MATLAB, 당신은 또한 당신이 ~을 사용하여 특정 출력에 관심이없는 것을 지정할 수 있습니다 경우에

[~,b] = f(x); 
[a,~] = f(x); % equivalent to a = f(x) 
+0

그래서 기본적으로 matlab에서 "함수를 호출하지"않으면 "출력의 특정 집합에 대한 함수를 호출"할까요? –

+0

음, 의미 론적입니다. MATLAB에서는 하나 이상의 출력을 반환하는 함수를 호출합니다 (함수에 따라 출력이없는 경우도 있음). 함수의 본문에서'nargout'을 사용하여 얼마나 많은 출력 인수가 호출되고 무엇을 반환할지 결정할 수 있습니다. http://www.mathworks.co.uk/help/matlab/matlab_prog/find-number-of-function-arguments.html을 참조하십시오. – am304

+1

음, 첫 번째 출력은 항상 유일한 출력 사례와 동일하지 않습니다. 예를 들어'idx = find()'를 사용하면'idx'는 선형 인덱스를 줄 것입니다. 하지만''idx, ~] = find()' '를 실행하면'idx'가 행 인덱스가됩니다. 대부분의 MATLAB 내장 함수는'nargout' (방금 언급 한)을 사용하여 값을 감지하고 출력합니다. 'nargout'은'[a, b] = some_func1'과'[a, ~] = some_func1' 둘 다 '2'가 될 것이고, MATLAB이 무엇을 출력할지 결정할 때 사용한다고 생각합니다. – Divakar