본문으로 바로가기

만약 필요에 의해서

 

 

와 같이 코딩해야한다고 생각하자.

물론 예제니까 간단하게 잡았지만, 100번째정도까지만 가도 기절할 지도 모를일이다

물론 구조체나 배열 등등을 적절히 쓰면 잘 해결되는 경우도 있다.

그러나 어쩔 수 없는 경우라는 것도 있고, 또 속도에 큰 문제가 없다면

'eval '명령어로 간단히 해결할 방법이 있는데, 머리를 싸매고 앉아있을 필요는 없지 않겠나...

 

먼저 이해해야할 명령어가

 

num2str 이라는 명령어다. 이 명령어는 당연히 발음나는데로 읽어도 그 뜻을 대강 짐작할 수 있는데

 

num2str(i)

 


이렇게 입력하면 숫자를 문자처럼 인식하게 하는 명령어다

 

이제 아래 코드를 보자.

 

 

 

 아까 의도가 A1어쩌고 부터 A9어쩌고까지 직접 코드를 편집하기는 꽤나 귀찮다는데서 출발했다.

이제 eval 명령어를 직접 코딩했는데...

 

for 문 이야 당연히 1부터 9까지 돌아줘야 할 것이고, 곳곳에 보이는

 

 

' num2str(i) '

 

 

이 명령어가 1-9라는 것을 인식하게 해준다. 이때 조심해야할 것은 MATLAB 6버젼 이후부터는 num2str(i) 앞 뒤로 꼭 한 칸씩 띄어주어야 한다.

  

 

eval(['             '])

 

 

이것이 eval의 기본 형이며, 그 안에 문장을 넣어주면 된다. 본래  "eval"명령은 위의 형식에서 ' ' 사이에 들어가 있는 문장을 MATLAB Command Window에서 입력한것처럼 실행해 주는 명령이다. 그러므로 ' num2str '이랑 적절히 만나서 수십번을 타이핑해야할지도 모르는 프로그램 코드를 간단히 줄여줄 수 있다.

 

아참,  Transpose A를 의미하는 MATLAB 명령어인 A' 같이 "  '  " 기호를 eval안에서 쓰고 싶다면 연달아 두면 쓰면 된다.

 

예전에 가끔은 C 코드를 짤때, 숫자만 바뀌면서 꽤 길게 프로그램을 짜야하는 경우

MATLAB에서 for 문과 저 eval 명령어로 간단하게 C 코드를 display  하게 해서

긁어서 사용했던적이 있었는데... 그럴때도 꽤나 유용했다.(뭐 본래 목적은 아니지만^^)

이 글은 제 이전 홈페이지에 2008년 6월 16일 올렸던 내용입니다.
티스토리로 이전하면서 몇몇 글들을 이렇게 옮기고 있습니다.



댓글을 달아 주세요

  1. 류야 2011.07.21 00:38 신고

    똑같이 해보는데

    Undefined function or variable 'B1'.

    이런 오류가 나는데 왜 그런지 모르겠습니다.

    • BlogIcon PinkWink 2011.07.21 07:55 신고

      이건 일종의 제안이었습니다. 이 자체로는 A1이나 B1부터 B9까지 선언되어있다는 가정하에.. 제일 위와같이 코드를 짤 필요가 있다면, eval로 간단히 해결할 수 있을거라는 이야기를 했을 뿐, 그 자체의 코드가 어떻게 동작한다는 것은 아닙니다^^

  2. 우웅b 2012.02.10 02:42 신고

    eval 함수에 대해 질문이 있습니다.

    예를 들어

    D=[D(i) , D(i+1)];

    이런식으로 행렬안에 행렬을 넣고싶습니다.

    그래서 제가 코드를 작성해 보았습니다.

    k=2;
    i=1;
    c=1;
    whlie c
    data=[ 1 2 3 4 5];

    eval([ 'D' num2srt(i) '= data' ';']);

    if i==2
    eval([ 'sumdata' ' = ' '[ D' num2str(i) ',' 'D' num2str(k) ']' ]);
    end

    i=i+1;
    k=k+1;
    end

    에러가 나네요. 제가 문법을 어디에 잘못한건지
    아무리 찾아봐도 잘모르겠습니다.
    조언해주시면 감사하겠습니다 꾸벅 ㅇ.ㅇ...