2014-05-19 2 views
0

동일한 변수를 많이 생성하는 코드가 있는데 모든 값을 저장하고 싶습니다. 일반적으로 나는 이것을 위해 for loops을 사용하고 그것들 모두를 저장할 것이지만, 약간의 합병증 때문에 그것은 현재 불가능합니다.변수를 matlab에 배열로 저장

변수 x을 계산해야하고 x1으로 저장해야합니다. x을 다른 조건으로 계산하고 x2 등으로 저장하십시오. 문제는 내가 x2, , x4 등으로 코드 내에서 수동으로 모든 x을 변경해야한다는 것입니다. 그리고 그 중 많은 것이 있습니다. 더 효율적인 방법이 있습니까?

더 설명하기 :

x1 = 5*y(1); 

%some calculations with y 

x2 = 5*y(2); 

% some claculations with y 

x3=5*y(3); 
+2

당신이 실제로 무엇인지에 가까운 뭔가 설명 할 수의 교체를 모두 처리 할 붐 사용 하시겠습니까? 내가 '5'로 스케일링하는 것만 큼 간단하지 않겠습니까? 벡터화 된 메서드를 제안 할 때 내 포인터가 여전히 움직이고 있습니다. – Divakar

+2

그래서'x (1) = 5 * y (1)'처럼 저장할 수 없습니까? – MZimmerman6

+0

예, 할 수는 있지만 코드를 x (1) 및 x (2) 등으로 수정해야합니다. 많은 시간이 걸릴 것입니다. – user3200392

답변

2

당신이 당신의 변수 이름의 모든 통해 eval 및 루프를 사용할 수있는 정말 필사적 경우, 그들은 n을 통해 1 번호가 가정.

count = 1; 
while exist(['x',num2str(count)],'var') 
    eval(['x(count)=x',num2str(count),';']) 
    count = count + 1; 
end 

이 코드는 모든 그것은이 "연속"x가 더 이상 옆에 존재 때까지 반복되지 것 등 x1, x2, 을, 번호가 가정합니다. 이것은 모든 선언이 발생한 후에 실행중인 스크립트 나 함수의 끝 부분에 있습니다.

처음에했던 것처럼 모든 것을 저장하는 것은 매우 싫은 일입니다. 코드를 읽기가 어렵고 성가 시게 만들지 만 역동적이지는 않습니다.

어느 쪽이든, 위의 코드는 트릭을 수행해야합니다.

모든 xn 및 모든 인스턴스를 x(n)으로 바꿀 수있는 정규식을 작성할 수도 있습니다.

은 그냥 당신이 변환하고자하는 파일 이름을 지정, 다음 코드 줄을 실행하고 당신

fileName = 'findReplace.m'; 
replaced = regexprep(fileread(fileName),'x([0-9]+)','x($1)'); 
fh = fopen(fileName,'w'); 
    fprintf(fh,replaced); 
fclose(fh); 
+0

완성을 위해 vectorised 버전의 계산을 추가해야할까요? – kkuilla

+0

@kkuilla 이것을 벡터화하는 간단한 방법이 있는지 나는 모른다. – MZimmerman6

+0

질문을 잘못 읽었습니다. 사과. 문제는 변수 이름을 변경하는 방법이었습니다. 나의 두뇌는 자동적으로 질문이 더 효율적으로'x1','x2'를 저장하는 방법에 관한 것이라고 생각했다. +1하지만 ... – kkuilla