아래 포스팅에서 C/C++ 에서의 static 키워드와 유사한 기능을 하는 persistent 에 대해 설명 드렸었는데요.

 

2011/03/27 - [MATLAB] - MATLAB persistent


오늘은 persistent 사용시의 유의 사항에 대해 설명 드리려 합니다.

 

persistent 를 사용하는 반복적인 simulation 을 할 때 command 창에서 단순히 clear 를 하면 persistent 로 설정된 keyword 의 경우에는 clear 되지 않습니다.

clear 는 workspace 의 변수만 memory 상에서 해제를 하므로 function 안에서 persistent 로 설정된 변수의 경우에는 해제가 되지 않는 것 입니다.

 

위 링크의 이전 포스팅에서 사용한 함수 persistent_func() 를 이용하여 예를 들어 보죠.

  

위 예에서 clear 를 했음에도 c 값이 이전 값 12에서 연속적으로 증가하는 것을 보실 수 있습니다.

 

함수 내에서 persistent로 설정된 변수를 정상적으로 clear 하기 위해서는 함수를 메모리 내에서 해제 해 줘야 합니다.

  


다음과 같이 clear functions 를 사용하거나 clear all 을 사용하는 경우 함수 내에서 persistent 로 설정된 변수도 정상적으로 clear 되는 것을 확인 할 수 있습니다.

 

안정적인 코드 실행을 위해서는 MATLAB script 의 시작에 항상 clear all 을 해주는 게 좋은 습관 일 것 같습니다.


  1. kal 2016.12.06 00:49

    칼만필터에 persistant 선언이 있어 해제할때마다 컴퓨터 재시작을 했습니다.
    덕분에 메모리 해제하는 방법을 알게됬습니다.
    좋은정보 감사합니다.

    • 남성 2016.12.06 00:55 신고

      도움 되었다니 다행입니다. 방문 해 주셔서 감사합니다.

MATLAB 함수 내부의 변수는 함수 사용 후에는 메모리 상에서 지워지게 됩니다.

 

하지만 경우에 따라 함수 내부에서 변수가 계속 유지 되게 할 필요가 있는 경우가 있습니다. 이러한 경우에 persistent keyword 를 사용합니다.

 

다음 예를 통해 persistent 에 대해 알아보죠.

 

아래 그림의 y=persistent_func(a,b) 함수는 a, b 값 입력을 받아서 a+b+c 값을 출력하는 함수 입니다.

 

 

c 값에는 함수 내부에서 메모리상에 계속 남아 있도록 하기 위하여 persistent 로 설정했습니다.

 

그리고 초기값 설정을 위하여 isempty() 함수를 써서 c 값이 비어 있으면 초기값을 설정하도록 하였습니다.

 

위 함수에 대하여 다음과 같이 사용해 보도록 하겠습니다.

 

 

함수 내부에서 c 값이 계속 유지가 되는 것을 확인 할 수 있습니다.

 

 

연관 글: 2011/03/26 - [MATLAB] - MATLAB global keyword



  1. 박지연 2011.10.20 11:28

    매틀랩 공부하다가 우연찮게 이곳에 오게되었는데요 설명 너무잘해주셔서 감사해요
    c값 출력할때
    c:%d\n' 이건 어떤 표현인가요?
    답변 부탁드릴게용 ^^

    • 남성 2011.10.20 23:33 신고

      방문해 주셔서 감사합니다.

      c: 는 그대로 화면에 출력하는 부분이구요.

      %d 는 decimal 값 즉 10진수 정수로 표현하라는 거구

      \n 은 줄 바꿈 하라는 겁니다.

+ Recent posts