- MATLAB
- 1. MATLAB 각 Window 사용법
- MATLAB
- 3. 데이터의 3D 출력
- MATLAB
- 4. 조건문 및 반복문의 사용. 에러대비
- MATLAB
- 5. Simulink의 기초
- MATLAB
- 6. Simulink의 기초 2
- MATLAB
- 7. Function 문의 사용
- MATLAB
- 8. 동역학 시뮬레이션하기
- MATLAB
- 9. 애니메이션 구현하기
- MATLAB
- 13. GUI - Slider 사용하기
- MATLAB
- 16. GUI - 종합 예제
소수(prime number) 확인하기 !
먼저 아래 <코드1>을 먼저 보죠
<코드1: test1.m>
testVal = 141; count = 0; for i=2:testVal if mod(testVal, i) == 0 count = count + 1; end end if count == 1 disp('Prime number'); else disp('NOT prime number'); end
위 코드는 testVal이라는 변수에 저장된 숫자가 소수인지 아닌지를 판단합니다. 소수의 정의는 약수가 1과 자기자신뿐인 숫자를 의미하므로 for문을 이용해서 2부터 자기자신까지 나누어서 나머지(mod)가 0인 경우가 1번뿐이라면 소수라고 판단하는 것입니다. 저 상태로 그대로 실행하면
이라는 결과를 얻을 수 있습니다.
Funtion 사용!
<코드1>에서 만들었던 부분 중 소수인지 아닌지를 판단하는 구문을 함수화시켜보도록 하겠습니다. 새로운 창을 열고 다음 <코드2>를 작성하면 됩니다.
<코드2: isPrimeNum.m>
function y = isPrimeNum(val) count = 0; for i=2:val if mod(val, i) == 0 count = count + 1; end end if count == 1 y = 1; else y = 0; end
그리고 화일이름은 isPrimeNum.m으로 저장합니다. 이때, 이 화일은 MATLAB이 실행된 current directory에 저장되어있거나 path로 지정되어있어야합니다. 그리고, 다시
<코드3: test2.m>
testVal = 13; temp = isPrimeNum(testVal); if temp == 1 re = sprintf('%d is prime number', testVal); else re = sprintf('%d is NOT prime number', testVal); end disp(re)
이라고 작성하면 됩니다. 즉,
Current Folder에 위와 같이 화일이 나타납니다.
<코드2>에서 보면
function y = isPrimeNum(val)
이렇게 사용하는 것이 function문의 기본 문법입니다. 입력변수는 val, 출력변수는 y라고 지정되어 있습니다. 그리고, 소수이면 1을 반환하고, 아니면 0을 반환하도록 했기때문에 <코드3>과 같이 작성된 것입니다.
Function에서 help 명령에 반응하기 !
matlab에서 help 명령어 라고 command window에서 입력하면 해당 명령어의 사용법을 알려주는데요. 우리가 작성한 function문도 그렇게 되면 좋겠네요. 시간이 흘렀을때, 기억을 더듬거릴 필요도 없을 것이구요^^ 그 방법은 아래 <코드4>와 같이 하시면 됩니다.
<코드4>
function y = isPrimeNum(val) % y = isPrimeNum(val) % if val is a prime number, y has 1 % if not, y has 0 count = 0; for i=2:val if mod(val, i) == 0 count = count + 1; end end if count == 1 y = 1; else y = 0; end
이렇게 funtion문 아래에 주석(%)으로 문장을 적어두시면,
command window에서 help명령으로 호출했을때 나타납니다. (영어 울렁증이 있으니, 영어가지고는 뭐라 하지 마시길...ㅜ.ㅜ)
Funtion에서 에러 대비하기 !
소수를 찾는 프로그램을 만들긴 했는데요^^. 이제 기능을 하나더 넣어보도록 하죠. 소수라는건 자연수세계에서만 통하는 이야기니까. 사용자가 잘못된 입력을 사용한 경우 에러메세지를 주도록 한번 해보죠^^
<코드5>
function y = isPrimeNum(val) % y = isPrimeNum(val) % if val is a prime number, y has 1 % if not, y has 0 if (val < 0) error('Negative input value') elseif (val ~= fix(val)) error('Not interger') end count = 0; for i=2:val if mod(val, i) == 0 count = count + 1; end end if count == 1 y = 1; else y = 0; end
바로 error라는 명령어입니다. 주어진 메세지를 반환하고 프로그램이 중단되는 것입니다. 딴건 문제가 없으실거고, val~=fix(val)이라고 한 부분은 만약 사용자가 4.3을 입력으로 주었다면, fix(4.3)=4가 되거든요. 그러면, val과 다르다는 것을 알수 있죠. 그래서 사용자의 입력이 정수인지 아닌지를 알게됩니다.
위와 같은 결과를 얻을 수 있는 것이지요^^
nargout을 이용한 출력변수 갯수에 따른 출력형태 변환하기 !
nargout이라는 명령어가 있습니다. 사용자가 함수를 호출할때 출력변수의 갯수를 알려주는 명령어입니다. 마찬가지로 입력변수의 갯수를 알려주는 명령어는 nargin입니다. 이번에는 이 nargout을 이용해서 사용자가 출력변수없이, 즉, 출력변수의 개수가 '0'개이면, 문장으로 이야기하고, '1'개면 '1'혹은'0'을 반환하고, '2'개면, 앞변수에는 숫자를 뒷변수에는 문장을 저장하도록 해 보겠습니다.
<코드6>
function [y, mess] = isPrimeNum(val) % y = isPrimeNum(val) % if val is a prime number, y has 1 % if not, y has 0 if (val < 0) error('Negative input value') elseif (val ~= fix(val)) error('Not interger') end count = 0; for i=2:val if mod(val, i) == 0 count = count + 1; end end if nargout==0 if count == 1 disp('Prime Number') else disp('NOT Prime Number') end elseif nargout==1 if count == 1 y = 1; else y = 0; end elseif nargout==2 if count == 1 y = 1; mess = 'Prime Number'; else y = 0; mess = 'NOT Prime Number'; end end
이렇게 출력부분을 조건문으로 만져주면 되겠네요. (단지 nargout을 이야기하는 코드이니 코드가 쓸데없이 비효율적이다고는 말하지 말아주세요^^)
출력 결과입니다. 그냥 isPrimeNum을 사용한 경우와, 변수하나를 두고 사용한경우 2개인 경우에 따라 그 결과가 다르다는 것을 확인할 수 있습니다.^^
'Software > MATLAB' 카테고리의 다른 글
[MATLAB 연재] 10. 애니메이션을 이용한 동역학 시뮬레이션하기 (26) | 2010.04.07 |
---|---|
[MATLAB 연재] 9. 애니메이션 구현하기 (42) | 2010.04.07 |
[MATLAB 연재] 8. 동역학 시뮬레이션 하기 (36) | 2010.04.07 |
RAND 함수를 이용하여 오차 생성하기 (24) | 2010.03.19 |
[MATLAB 연재] 6. Simulink의 기초 2 (64) | 2010.03.17 |
[MATLAB 연재] 5. Simulink의 기초 (78) | 2010.03.16 |
[MATLAB 연재] 4. 조건문과 반복문, 에러대비 (36) | 2010.03.10 |