1 / 19

MATLAB Programming

MATLAB Programming. Young-Ho Kim Department of Physics Kangwon National University. • Branching • More about Loops • Other Programming Commands • Interacting with the Operating System. • 매트랩에서 M-files 출력하거나 편집하기 type absval  absval 파일명을 갖는 M-file 의 내용을 출력한다 .

zarita
Download Presentation

MATLAB Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MATLAB Programming Young-Ho Kim Department of Physics Kangwon National University • Branching • More about Loops • Other Programming Commands • Interacting with the Operating System

  2. • 매트랩에서 M-files 출력하거나 편집하기 type absval  absval 파일명을 갖는 M-file의 내용을 출력한다. edit absval  absval 파일명을 갖는 M-file을 편집할 수 있다.

  3. • 비교연산자 [ < , <= , > , >= , == , ~= ] • 논리연산자 [ 1 (TRUE) , 0 (FALSE)] [&(AND) , |(OR) , ~ (NOT) ] >> 2 > 3 ans = 0 >> [1 2 3] < [2 2 2] ans = 1 0 0 >> x = -2:2; x >= 0  x = [-2 –1 0 1 2]; x 는 0 이상이다 ans = 0 0 1 1 1 • and 나 or 에 따른 참 거짓 예)>> 0 & 0 >> 0 & 1 >> 1 & 0 >> 1 & 1 ans = ans = ans = ans = 0 0 0 1 >> 0 | 0 >> 0 | 1 >> 1 | 0 >> 1 | 1 ans = ans = ans = ans = 0 1 1 1

  4. Branching Branching with if • y = |x| function y = adsval(x) if x >= 0  x 가 0 이상이면 y = x;  y = x 로 한다. else  그렇지않으면 (x가 0 이상이 아니면) y = -x;  y = -x 로 한다. end • sgn(x) = 1 x>0 0 x=0 -1 x<0 function y = signum(x)  y = x / |x| if x > 0  x 가 0 보다 크면 y = 1;  y 는 1 이다. elseif x == 0  x 가 0 이면 y = 0;  y 는 0 이다. else  그렇지않으면 (x가 0 보다 크지 않고 0 이 아니면) y = -1;  y 는 –1 이다. end

  5. Branching with switch • switch문은 여러 개의 if-elseif 를 사용하는 경우와 비슷하다. 예) Function y = count(x) Switch x Case 1  x 값이 1이면 y = ‘one’; Case 2  x 값이 2이면 y = ‘two’; Otherwise  그렇지 않으면 y = ‘many’; end X 의 값에 따라 다른 문장을 실행시켜준다. Function y = count(x) If x == 1 y = ‘one’; Elseif x == 2 y = ‘two’; Else y = ‘many’; end

  6. More about Loops • While - 조건에 맞을 때까지 명령문들을 수행한다. >> n=0; sum=0; while n < 100  조건 ( n이 100 미만까지 ) n=n+1;  n은 1씩 늘려준다 (결과적으로 100까지) sum=sum+n;  sum은 sum+n 을 해준다.(마지막은 1~99까지의 합에 +100) end >> disp([n sum]); 100 5050  결과값을 출력 • For – 범위를 지정해주어서 좀더 직관적으로 반복제어를 할 수 있다. >> for i=1:10  1:10 ( 1:1:10 과 같다. 1씩 증가한다는 것은 생략가능 ) j=i^2; disp ([i j]); end 1 1 2 4 3 9  i를 1부터 10까지 증가하면서 재곱을 계산한다. : : 10 100

  7. • Breaking from a loop >> for i=1:10 j=i^2; if(i==7), break ,end  여기서 end 는 if문의 end이다. disp([i j]); end  end 는 for문의 end 이다. 1 1 2 4 3 9 4 16  i 가 7이 되면 연산을 멈춘다. 5 25 결과값은 i 가 6 일 때까지의 값이 나온다. 6 36

  8. Other Programming Commands •Subfunctions function y=sumabs(x) y=sum(abs(x)); % ---- subfunction starts here. function z=abs(x)  subfunction z=abs(x); end >> sumabs([-3 4 5 -7]) ans = 19 Subfunction 은 function M-file 에서만 사용된다.

  9. • 입출력인자 숫자 정하기(nargin, varagin, nargout, varagout) 1.nargin function s=add1(x,y,z) if nargin < 2  입력인자를 1개 준다면 error('At least two input arguments are required.') end if nargin == 2 s = x + y; else s= x + y + z; end >>add1(1) ??? Error using ==> add1 At least two input arguments are required. >>add1(2,3) >>add1(-100,4,6) ans = ans = 5 -90

  10. 2.varargin function s=add2(varargin) s = sum([varargin{:}]); >>add2(10,3,4,5,10) >>add2(1:10) ans = ans = 32 55 function s=add3(varargin) if ~isnumeric([varargin{:}])  isnumeric 은 뒤에 숫자가 오면 1(참) 이 된다. error('Inputs must be floating point number.') end s = sum([varargin{:}]); >>add3([1,2,3,’a’]) >>add([1,2,3]) ??? Error using ==> add3 ans= Inputs must be floating point number. 6

  11. 3.nargout function [x, y] = rectangular1(r, theta) x = r.*cos(theta); y = r.*sin(theta); >>z = rectangular1(3,pi) >>[x, y] = rectangular1(3,pi) z = x = -3 -3 인자를 하나로 하면 천번째 인자(x) y = 만 출력한다. 3.6739e-016 function [x, y] = rectangular2(r, theta) x = r.*cos(theta); y = r.*sin(theta); if nargout < 2 x = x + i*y; end >>z = rectangular2(3,pi) >>[x, y] = rectangular2(3,pi) x = z = -3 -3.0000 + 0.0000i y = 3.6739e-016

  12. •User Input and Screen Output <화면에 출력되는 명령> 1. error 가 나면 error 가 출력된다. Error: Missing operator, comma, or semicolon. 2.warning 은 주의해야 할 일이 일어났을 때 정해진 message를 화면에 출력한다. Warning off 를 하면 warning를 나타내지 않을 수 있다. 3. Disp >> x= 2+2; disp(['The answer is ' num2str(x) ' '.']) The answer is 4 disp는 인자를 문자로 해야 한다. num2str(x) – num 을 str 로 바꿔준다.

  13. Input 명령을 써서 계산을 계속할 것인지 묻는다. no를 입력하면 종료된다. <pause 인 경우> >> absval(0) absval ;continue(yes/no)?yes 아무 키나 누르면 계속 진행된다. ans = 0 <keyboard 인 경우> >> absval(-1) absval ;continue(yes/no)?yes K>> return  return을 누르면 ans = 계속 진행된다. 1 <키보드로 쓰는 명령>(input,pause,keyboard) function y = absval(x) answer = input([‘absval;’,… ‘continue(yes/no)?,’s’); if isequal(answer,’no’) return end if x > 0 y = x; elseif x == 0 pause  정지시켜준다. y = 0; else keyboard  k>>가 생긴다. y = -x; End

  14. <마우스로 찍은 point> ginput function xmarksthespot if isempty(get(0,'CurrentFigure'))  그래프가 없으면 error('No current figure.')  error 메시지가 뜬다. end flag = ~ishold;  flag. Hold on -> false(0) Hold off -> true (1) if flaq hold on  hold on 을 하는 것 end disp('Click on the point where you want to plot an X.') [x, y] = ginput;  마우스로 찍은 여러 점의 위치가 저장된다. ginput(1)은 한 점의 위치가 저장된다. plot(x,y, 'xk')  찍은점은 x 모양 검정색(k)으로 찍힌다. if flag hold off  그렸으면 hold off 한다. End

  15. >> xmarksthespot  그래프가 없으면 error 가 된다. ??? Error using ==> xmarksthespot No current figure. 앞에서 주어진 error 가 뜬다. >> ezplot y=x  y = x 그래프를 그린다. >> xmarksthespot Click on the point where you want to plot an X. (point를 찍고서 enter을 치면 그래프에 검정 x 가 표시된다.)

  16. • Evaluation (값 구하기) 1. eval – eval(str)형식으로 쓴다. eval(‘sin(1)’) = sin(1) >> eval('sin(pi/2)') >>sin(pi/2) ans = ans = 1 1 2. feval – feval(‘func’,인자) 형식으로 쓴다. function final = iterate(func,init,num) final = init; for n = 1:num  loop 1부터 num 번 돌린다. final = feval(func,final); end >> iterate(‘sum',1:10,1) ans = 55

  17. 1.dbstop - 원하는 위치에서 멈춘다 (형식은 >>dbstop in 함수 at 줄 ) >> dbstop in absval at 5 >> absval(-3) K>> return ans = 3 2.dbclear - 멈춘것을 지운다. (형식은 >>dbclear in 함수 ) >> dbclear in absval • Debugging function y = absval(x) if x >= 0 y = x; else y = -x; end

  18. Interacting with the Operating System •외부 program 실행하기 1. ! 표 이용하기 !dir  도스에서 dir 한다. ex) cd,delete,type 등 2. Dos 명령 [stat, data]=dos(‘프로그램 인자’) >> [stat,data]=dos(‘프로그램 인자') stat = 상황을 나태낸다. (0이면 정상적으로 처리된 것임) 0 data =  string으로 화면에 출력한다. (standard output)

  19. •File Input and Output <Ascii text file – binary file> Workspace 와 disk file 사이에 변수 값을 변환하는데 save 와 load 를 사용한다. 파일확장자가 .mat 로 표시되어진 것은 MATLAB binary format에 쓰거나 읽을 수 있다. 줄의 끝에 ascii 를 써서 유효숫자 8자리로되어진 text를 save 명령으로 저장한다. ascii double 을 쓰면 유효숫자 16자리 text로 저장된다. 파일명 끝에 .mat 아니면 문서형식으로 가정하고 load 한다. < fopen – fout > X=0:.1:1; y=[x; exp(x)]; fout = fopen (‘exp.txt’,’w’);  r =읽기 w =쓰기 a=추가 fprintf(fout, ’%6.2f %12.8f\n’, y)  \n은 줄넘김 fclose(fout) %6.2f = 6은 전체 자리수, 2는 소수점 이하 자리수를 나타낸다. C:\MATLAB6p5\work 에 exp.txt 파일을 만들어 결과값을 저장한다.

More Related