Main Content

MATLAB 함수에서 영속 변수 초기화하기

영속 변수는 MATLAB® 함수의 지역 변수로 함수에 대한 호출 간에 변수 값이 메모리에 유지됩니다. 모델에서 코드를 생성하면 MATLAB 함수에 영속 변수를 초기화해야 합니다. 자세한 내용은 persistent 항목을 참조하십시오.

Simulink® 모델에서 영속 변수를 포함하는 MATLAB 함수를 사용하는 경우 다음 지침을 따라야 합니다.

  • 상수에 액세스하는 방법으로만 함수의 영속 변수를 초기화합니다.

  • 초기화 실행 여부에 따라 함수의 제어 흐름이 달라지지 않아야 합니다.

이러한 지침을 따르지 않으면 여러 조건에서 초기화 오류가 발생합니다.

  • 직접 피드스루 허용 속성이 선택 해제된 영속 변수가 있는 MATLAB Function 블록

  • 상태 제어동기식으로 설정된 State Control 블록을 사용하는 모델에 영속 변수가 있는 MATLAB Function 블록

  • 무어 머신 의미 체계를 구현하고 영속 변수가 있는 MATLAB 함수를 사용하는Stateflow® 차트

예를 들면, 아래 영속 변수 n을 사용하는 fcn 함수입니다. fcn은 두 지침을 모두 위반합니다. n의 초기값은 입력 u에 따라 다르고 return 명령문은 함수의 일반 제어 흐름을 방해합니다. 결과적으로 이 코드는 위에 설명된 조건 중 하나라도 해당하는 모델에서 사용하면 오류가 발생합니다.

function y = fcn(u)
    persistent n
        
    if isempty(n)
        n = u;
        y = 1;
        return
    end
    
    y = n;
    n = n + u; 
end

이 오류를 방지하려면 영속 변수에 상수 값을 설정하고 return 명령문을 제거하여 영속 변수를 초기화하십시오. 아래 수정된 버전의 fcn은 오류 없이 영속 변수를 초기화합니다.

function y = fcn(u)
    persistent n
        
    if isempty(n)
        n = 1;
    end
    
    y = n;
    n = n + u; 
end

직접 피드스루가 없는 MATLAB Function 블록

이 모델에는 앞서 설명한 fcn의 첫 번째 버전을 사용하는 MATLAB Function 블록이 포함되어 있습니다. MATLAB Function 블록 입력은 구형파이며 Sign 블록과 Sine Wave 블록에서 제공합니다. MATLAB Function 블록은 시간 스텝마다 u 값을 영속 변수 n에 추가합니다.

모델을 시뮬레이션합니다. 시뮬레이션은 다음과 같은 이유로 오류를 반환합니다.

  • 영속 변수 n의 초기값이 입력 u에 따라 다릅니다.

  • return 명령문이 함수의 일반 제어 흐름을 방해합니다.

  • MATLAB Function 블록의 직접 피드스루 허용이 선택 해제되어 있습니다.

fcn의 수정된 버전과 같이 MATLAB Function 블록 코드를 수정합니다. 모델을 다시 시뮬레이션합니다.

동기식 모드의 State Control 블록

이 모델에는 앞서 설명한 fcn의 첫 번째 버전을 사용하는 MATLAB Function 블록이 포함되어 있습니다. MATLAB Function 블록 입력은 구형파이며 Sign 블록과 Sine Wave 블록에서 제공합니다. MATLAB Function 블록은 시간 스텝마다 u 값을 영속 변수 n에 추가합니다. 이 모델에는 상태 제어Synchronous로 설정된 State Control 블록이 포함되어 있습니다.

모델을 시뮬레이션합니다. 시뮬레이션은 다음과 같은 이유로 오류를 반환합니다.

  • 영속 변수 n의 초기값이 입력 u에 따라 다릅니다.

  • return 명령문이 함수의 일반 제어 흐름을 방해합니다.

  • 이 모델에는 상태 제어Synchronous로 설정된 State Control 블록이 포함되어 있습니다.

fcn의 수정된 버전과 같이 MATLAB Function 블록 코드를 수정합니다. 모델을 다시 시뮬레이션합니다.

무어 의미 체계를 구현하는 Stateflow 차트

이 모델에는 앞서 설명한 fcn의 첫 번째 버전을 사용하는 MATLAB 함수가 있는 Stateflow 차트가 포함되어 있습니다. MATLAB 함수는 시간 스텝마다 영속 변수 n에 대한 활성 상태로 결정되는 값(1 또는 -1)을 추가합니다.

모델을 시뮬레이션합니다. 시뮬레이션은 다음과 같은 이유로 오류를 반환합니다.

  • 영속 변수 n의 초기값이 입력 u에 따라 다릅니다.

  • return 명령문이 함수의 일반 제어 흐름을 방해합니다.

  • 차트가 무어 의미 체계를 구현합니다.

fcn의 수정된 버전과 같이 MATLAB 함수를 수정합니다. 모델을 다시 시뮬레이션합니다.

참고 항목

블록

함수

관련 항목