2016-10-07 4 views
1

내가 MATLAB에 다음 함수를 정의하는 것을 시도하고있다 : 그러나가변 개수의 입력으로 함수 만들기?

file = @(var1,var2,var3,var4) ['var1=' num2str(var1) 'var2=' num2str(var2) 'var3=' num2str(var3) 'var4=' num2str(var4)']; 

을, 나는 더 많은 매개 변수를 추가로 기능을 확장 할; 내가 변수 vark를 추가하고자한다면, 나는 기능이 원하는 :이 작업을 수행 할 수있는 체계적인 방법이

file = @(var1,var2,var3,var4,vark) ['var1=' num2str(var1) 'var2=' num2str(var2) 'var3=' num2str(var3) 'var4=' num2str(var4) 'vark=' num2str(vark)']; 

있습니까?

+1

나중에 출력을 'eval'과 함께 사용하지 않으려 하시겠습니까? –

+0

문제가 해결되면 대답 중 하나를 수락하는 것을 고려하십시오. 이것은 답의 왼쪽에있는 체크 표시입니다. 감사! :) –

답변

2

사용 fprintf는 : 내가 사용했던 형식은

f = @(varargin) fprintf('var%i= %i\n', [(1:numel(varargin));[varargin{:}]]) 
f(5,6,7,88) 
var1= 5 
var2= 6 
var3= 7 
var4= 88 

입니다

: 'var%i= %i\n'. 이것은 처음에 var을 쓰고, %i은 정수를 입력해야한다고 말합니다. 그 후에 =과 그 뒤에 새로운 번호 %i과 줄 바꿈 \n을 써야합니다.

var%i의 홀수 위치의 정수와 실제 수의 짝수 위치의 정수를 선택합니다. MATLAB의 선형 인덱스가 열에 대한 열이되므로 벡터 [1 2 3 4 5 ...]을 맨 위에 배치하고 변수의 내용을 두 번째 행에 배치합니다. 그런데

: 당신은 실제로 당신이 질문에 지정된 형식을 원하는 경우, \n 건너 뜁니다 또한

f = @(varargin) fprintf('var%i= %i', [(1:numel(varargin));[varargin{:}]]) 

f(6,12,3,15,5553) 
var1= 6var2= 12var3= 3var4= 15var5= 5553 

을, 당신은 실제 변수 이름을 사용하려는 change the second %i to floats (%f), doubles (%d) etc.

할 수있는 경우 귀하의 입력에 var1, var2, var3, ... 다음 한 가지만 말할 수 있습니다 : 하지 마! 그것은 끔찍한 생각입니다. 셀, 구조체 또는 번호가 매겨진 변수 이름 이외의 것을 사용하십시오.

그냥 진실하게 말하자면 : eval과 함께 MATLAB에서이 결과를 사용하지 마십시오! eval은 악의적이다이다. Mathworks는 공식 문서에서 이것을 실제로 경고합니다!

0

함수에 유연한 입력 인수를 허용하려면 varargin이 필요합니다.

최종 문자열을 작업 공간 에서처럼 변수 이름으로 구성하려는 경우 varargin이 필요하므로 불가능합니다. 따라서 불가능합니다. 당신이 당신의 문자열에 var1, var2을 갖는 좋은 경우, 당신은이 함수를 정의하고 사용할 수 있습니다 : 그것은 또한 스트링과 호환되는

function str = strgen(varargin) 
str = ''; 
for ii = 1:numel(varargin); 
    str = sprintf('%s var%d = %s', str, ii, num2str(varargin{ii})); 
end 
str = str(2:end); % to remove the initial blank space 

. 테스트 :

% A = pi; 
% B = 'Hello!'; 

strgen(A, B) 

ans = 

var1 = 3.1416 var2 = Hello! 
0

매개 변수의 수만큼 함수를 호출하는 방법은 어떻습니까? 필자는 함수가 반환하는 문자열의 특정 형식을 고려하여 이것을 작성했습니다. 여기서 k는 입력 할 'kth'변수의 인덱스로 가정합니다. 배열 var는 숫자 매개 변수 목록 일 수 있습니다. 이것에 대한 varargin

[email protected](var,i)[strcat('var',num2str(i),'=') num2str(var) ]; 

var=[2,3,4,5]; 

str=''; 

for i=1:length(var); 

str=strcat(str,file(var(i),i)); 

end 
관련 문제