본문 바로가기

Programming/matlab

Matlab에서 변수 초기화 및 관련 함수

일단 메트랩 함수에 대해 알아야 합니다.

참조: http://www.mathworks.com/help/techdoc/matlab_prog/f0-38052.html

• 함수 파일
– function 이라는 단어로 시작. M-파일로 저장됨
– 입력 인수를 받고 출력을 반환. 사용자-정의 함수와 비슷(Fortran, Visual Basic, C 등)
– 일반적인 구문
function [outvar] = funcname(arglist)
outvar=value;
– 저장: funcname.m으로 저장
– 실행: 명령창에서 funcname 입력. current folder가 현재 파일 저장된 위치에 있어야함.
– MATLAB MATLAB은은 대소문자 대소문자 구별함 구별함
- 스크립트 안에서의 변수들은 스크립트가 실행된 후에도 존재함 
- 매트랩 회사의 문서를 읽어보면 
The variables within the body of the function are all local variables.
  라고 되어 있으나 시언어와는 다르게 시언어에서의 지역변수와는 다르게 가끔 충돌이 일어나는거 같습니다.
  따라서 함수에 사용되는 변수명은 최대한 다른이름으로 해주는게 좋은거 같습니다.(아직 이유를 모르겠습니다. ㅠㅠ)

• 변수 타입
메트랩에는 기본적으로 제공하는 세 가지의 변수가 있습니다.
  • Local Variables

  • Global Variables

  • Persistent Variables



    지역변수 

    a =0;

    일반적으로 씨언어에서 사용하는 지역변수와 같습니다.
    하지만,  
    Note If you run a script that alters a variable that already exists in the caller's workspace, that variable is overwritten by the script.

    위의 설명처럼 이전의 스크립 파일에서 사용되던 변수들이 남아 있으면 그 같은 변수명에다 덮어쓴다는 것을 유의해야 합니다.


     
    전역변수


    global MAXLEN;

    C언어에서 사용되는 전역변수와 같은 개념입니다. 


    Persistent variables

    persistent SUM_X

    이 변수는 단지 함수 내에서만 선언하여 사용할 수 있습니다.
    선언된 함 수 내에서만 변수에 접근할 권한을 가집니다.
    또한 함수의 사용이 끝나도 메트랩은 이 변수를 초기화 시키지 않습니다.



    •변수 초기화 하기

    변수 최대 길이 구하는법: namelengthmax 라는 명령어를 입력하면 최대 변수 길이 값을 리턴해 줍니다.

    N = namelengthmax
     N =
         63 


    사용가능한 변수 명 확인하기: 메트랩은 기본적으로 변수 명 시작을 무조건 영어로 해야 합니다. 
                                           isvarname 라는 명령어를 통해 메트랩에서 사용가능한 변수 명인 지를 알아 낼 수 있습니다.
                                           1이면 사용할 수 있는 변수 명이고 0이면 사용할 수 없다라는것을 나타냅니다.
                                     
             persistent SUM_X
    
     if isempty(SUM_X)
        SUM_X = 0;
     end
     SUM_X = SUM_X + inputvalue 


    개인 적인 의견이지만 전역변수, persistent 변수 즉 루프가 한번 끝나도 다시 사용되는 모든 변수는 위와같이 선언되어야 한다고 봅니다.
    C언어에서는 초기값 선언만 하면 되지만 메트랩에서는 초기값 선언이 다음에 다시 그 함수를 불러 오면 다시 초기화 시키는 결과를
    만들어 냅니다. 따라서 위에서 처럼 최초에 변수가 비어있을 때만 0으로 초기화 시켜주면 C언어처럼 프로그램 루프 최초에만 0의 값으로
    초기화 시킬 수 있습니다.

    if ~exist('newvar', 'var')
         newvar = 10
     else
         disp 'Variable already exists'
     end
    위와 같은 방법을 통해 초기화를 시켜줄 수도 있습니다. 이미 사용한 변수 명을 체크해줘서 다른 변수로 선언할 수 있게끔 하는 것이죠.
    물로 이 구문은 소스 보다는 명령어로 바로 사용해서 코딩하기 전에 체크해주는 정도로 사용하면 될거 같습니다.