Location | Tag | Media  ||  A | P
MATLAB(1) 주요명령과 행렬입력방법  
1. 주요 명령어
▶ who, whos : 작업공간에 기억된 변수의 목록을 보여줌
▶ file ->show graphic property editor : 그래프 세팅
▶ set path : 경로지정. >>path 치면 경로가 나온다.
  MATLAB에서 파일의 경로등록/삭제에 쓰임. save path를 해 줘야한다.
▶ help : 도움말 명령. 예를들어 >>help fft 하면 FFT 함수에 대해서 도움말 제공. 매트랩 내장함수의 사용법을 잘 모를때 쓰면 도움이 된다.
▶ ! : >>!dir 하면 도스창에서 dir한것과 같은 효과. >>!dir&하면 새로운 창 생성
▶ lookfor : help함수처럼 MATLAB 함수나 명령어를 찾음. 많이 쓰인다.
▶ clear : workspace나 메모리에서 특정 항목을 지우는 데 사용한다.
▶ clc : clear_screen. 작업화면을 지우는 데 쓰인다. 도스에서 cls와 기능같음.


2. 행렬의 입력 : 매트랩에서 데이터  처리의 기본이 되는 단위는 행렬이다.
>>a=[1 2 3; 4 5 6; 7 8 9]
a =
     1  2  3
     4  5  6
     7  8  9
(행 구분은 세미콜론(;) 혹은 개행(new line)을 사용. 열 구분은 콤마 혹은 공백)
▶ a(시작행:끝행,시작열:끝열) : 시작행~끝행과 시작열~끝열을 동시에 포함하는 행렬의 부분만 출력시켜 준다. a(i:j,k:l)
▶ load : file로부터 값을 불러온다.
          >>load a.txt 하면 a라는 변수를 가진 행렬이 생기게 된다.
▶ 이미 존재하는 행렬에 다른 행렬을 추가해서 새 행렬을 만들수도 있다.
  D=[A;C] 는 A 행렬부분 밑에 C행렬이 추가되어 D행렬이 생긴다.
  D=[A,C] 는 A 행렬부분 옆에(오른쪽)에 C행렬이 추가돼 D행렬.
▶ 특별한 행렬
   a=[] : 빈 행렬이다. 행렬은 존재하나 요소가 없다.
   zeros(k) : k by k의 0의 원소를 갖는 정방행렬이 생긴다.
   zeros(m,n) : m by n의 0의 원소를 갖는 정방행렬.
   zeros(size(A)) : 행렬 A와 크기가 같은 영행렬이 생긴다.
   ones() : zeros와 사용법이 같음. 대신 원소값이 1이다.
   eys(n) : n by n 의 단위행렬이 생긴다.
   rand() : 0~1 사이의 값으로 균등분포된 난수들로 이루어진 행렬
   randn() : 0~1 사이의 값으로 정규분포된 난수들로 이루어진 행렬
▶ 벡터의 입력 : 벡터는 행벡터와 열벡터가 있으며 이들은 서로 전치(Transpose)를 통해 바꿀 수 있다. 전치를 할때 주의할 것은 벡터가 복소수일 경우 전치를 하면 켤레화되어 전치가 되어 버린다는 것.
>>a=[1 2 3 4 5] : 행벡터
>>a=[1;2;3;4;5] : 열벡터
a=1:1:5   콜론을 이용한 벡터입력 a=시작값:증분값:최종값
▶ 10의 거듭제곱 : a=4e5 = 4*10^5와 같다.

<행렬의 연산>
덧셈 : C = A + B;
뺄셈 : C = A - B;
곱셈 : C = A * B;           C = AB와 같다.
나눗셈 : C = A \ B; 혹은 C = A / B;
           A\B는 inv(A)B와 같은 기능, A/B는 Ainv(B)와 같다.
행렬의 나눗셈을 통해서 연립방정식의 해를 쉽게 구할 수 있다.
거듭제곱 : A^5 행렬 A를 5번 곱한거랑 같다.

▶ 행렬 조작
  rot90(A) : CCW(반시계방향)으로 90도 회전
  rot90(A,k) : k는 정수. k가 양이면 반시계, 음이면 시계방향으로 90*k만큼회전
  flipus(A) : 상하방향. fliplr(A) : 좌우방향
▶ 행렬의 배열 연산 : (.*)   (./)  (.\)  (.^)와 같이 도트를 첨가해 준다.
   그리고 연산되는 행렬의 차원이 서로 같아야 한다.
▶ 벡터의 내적(inner product)
   >>dot(A,B) 또는 sum(A.*B)
▶ 벡터의 외적(cross product)
  >>cross(A,B)



MATLAB(2) 그래픽 기능 I  
3. 그래픽(그래프그리기) 기능
▶ figure(n) 그림창 n을 호출한다. n은 정수인데 수를 굳이 쓰지 않아도 됨.
▶ set() 선의 종류 및 마커(marker)의 성질을 선택
   set(plot(x,y),'LineStyle','--') : 선의 모양이 실선에서 파선으로 그려짐
▶ axis([x축시작 x축끝 y축시작 y축끝]) : x축과 y축의 범위를 결정해 준다.
▶ grid on, grid off : 격자를 생성/없애줌
▶ xlabel('This is X axis') : x축을 라벨링함. y축, z축도 비슷하게 사용
▶ title('제목') : 그 그래프에 제목을 입력하고자 할때 사용

● figure() : (1)새로운 그림창 생성 (2) 이미 띄워진 그림창을 활성화
            즉, 여러개의 그래프를 출력하고자 할때 figure명령 사용하면 유용
● subplot(abc) : a by b 모양의 a*b개의 구역을 만들고 c번째를 선택.
   >>subplot(22k)는 아래처럼 4개 구역이 나뉘어지게 되는 것이다.
                                  221          222
                                  223          224

4. 선도(line plot)의 종류
★ plot() : x-y축이 모두 선형 배율을 가진다.
★ loglog() : x-y축 모두가 로그 배율을 가진다.
★ semilogx() : x축에는 로그배율, y축에는 선형 배율
★ semilogy() : y축에는 로그배율, x축에는 선형 배율
★ plotyy() : 2개의 그래프가 하나의 그림 창에 그려진다
                 이때 y는 서로 다르게 스케일링 된 것이 좌우 라벨창에 표시됨
*******************************************************************
>>plot(x좌표행렬,y좌표행렬,'Color+LineStyle+Marker')
선색깔 : 사이안(c)   마그네타(m)   노랑(y)     빨강(r)    녹색(g)
           파랑(b)      흰색(w)          검정(k)
선모양 : 기본(-)    파선(--)      없음(none)      점선(:)     -.-.-형태(-.)
마커 : +     ^(△)   O   *   .  x     square(□)    diamond(◇)    v(▽)
        >(▷)      <(◁)        pentagram(☆)      none(기본값)

>>plot(x1,y1,x2,y2,x3,y3,...) 여러쌍의 데이터를 그림창에 한꺼번에 표현
   선의 색을 지정하지 않아도 알아서 식별되도록 처리해준다.
*******************************************************************

<이미 존재하는 그래프에 새로운 그래프 추가>
>>hold (=hold on)
>>hold (=hold off)
보통, 이미 열려있는 그림창에 hold on을 시켜 원하는 선도를 삽입한 후
hold off로 닫아준다.

<복소수 관련 함수>
§ isreal(A) : 입력값이 복수수이면 0, 실수이면 1
§ real(A) : 실수부만 호출
§ imag(A) : 허수부만 호출
§ abs(A) :  복소수의 크기 계산 a+bi => sqrt(a^2+b^2)
§ angle(A) : 각도를 계산 (-파이~파이의 범위)



MATLAB(3) 그래픽 기능 II  
<객체의 라벨링>
▶ title(제목) xlabel, ylabel, zlabel(xyz라벨링) grid(격자)
▶ legend : 그래프에 범례를 더한다.
   legend('str1','str2',...,'strN'',정수)
    정수가 0(MATLAB에서 고려한 최적위치), 1(오른쪽 위,기본치)
    2(왼쪽 위), 3(왼쪽 아래), 4(오른쪽 아래) -1(그래프 영역 오른쪽 밖)
▶ text(x좌표,y좌표,'String') : 그래프 좌표의 어떤 지점에 marker를 지정하고
   그곳을 라벨링할 때-예를 들면 그 그래프가 어떤 함수인지를 표시할 때
▶ gtext('String') : 그림창이 열리면 좌표(십자표시)가 나타나는데 적당한
   곳을 선택해서 입력한다. 마우스를 이용한 좌표의 입력이다.
▶ 특수문자 : MATLAB 책 134 페이지 참조.


<극 좌표계 polar coordinate system>
크기(반지름)와 각도(방위각)으로 좌표가 결정된다.
▶ polar(각도, 반지름, '컬러,스타일,마커')
plot 명령과는 달리 한 figure에 다중 입력은 되지 않는다.


<막대, 면적 그래프> - 2D & 3D
▶ bar(x축,y축,'색깔') : 2차원    barh(x,y,'color') : 수평방향
▶ bar3(), barh3() : 3차원 표현이다.
▶ y가 행렬일 경우 -> bar 그룹이 생성된다. 마치 히스토그램처럼
▶ 기냥 y만 입력 -> x좌표는 1,2,3... 이렇게 차례로 할당된다.
▶ 기타 형태의 막대 그래프
   bar3(x,y,'group') : 그룹지어진 그래프
   bar3(x,y,'stack') : 적층된 그래프, 스택 형태로 쌓여진 그래프

<면적 그래프>
▶ area(x,y)
   y가 행렬일 경우에는 적층된 형태로 면적 그래프가 그려진다.

<파이 차트 pie chart>
▶ pie(y) : 벡터 y의 각 요소의 퍼센트를 계산해서 차트로 표시(반시계방향할당)
▶ pie(y, explode) : 파이 차트에서 어떤 부분을 차트로부터 분리하고자 할때
   이때 explode는 y와 같은 크기의 행렬인데, 0이면 그 부분은 분리되지 않고
   0이 아니면 파이에서 분리된 모양으로 표시가 된다.
▶ pie(y, explode, {'data1','data2',...,'dataN'}) : 라벨링은 이와 같이 한다.

<히스토그램>
▶ hist() : 직각 좌표계에서의 히스토그램이다.
   히스토르갬은 행렬 형태의 data를 bar 형태로 만든 것과 비슷하다.

<이산 데이터 그래프>
▶ bar(x,y) : 막대 모양의 그래프를 그린다.
▶ stem(x,y) :  가지 모양으로 수직으로 뻗은 그래프를 그림
   stem(x,y,'색,선모양,마커')
   stem(x,y,'~~~','fill') : 선의 끝의 원을 색으로 채울 때 사용
   stem3(x,y) : 3차원 이산 그래프
▶ stairs(x,y) : 계단 그래프를 그린다.

<선 그리기>
▶ line(Ax,Ay) 또는 line3(Ax,Ay,Az)
   Ax=[x1,x2]   Ay=[y1,y2]   Az=[z1,z2]



MATLAB(4) 제어의 흐름  
<관계, 동등연산자>
▶ 동등(==), 다름(~=), 논리곱(&), 논리합(|), 부정(~)
   <(작음), >(큼), <=(작거나 같음), >=(크거나 같음)
   xor(A,B) 배타적 논리합
▶ 복소수 데이터의 관계 연산 : 허수부를 무시하고 연산된다.
▶ 복소수 데이터의 동등 연산 : 허수부를 고려한다.

<기타 관계를 나타내는 함수>
▶ isfinte() : 입력이 유한(1), 무한 또는 not a number(0)으로 반환
▶ isinf() : 위와 반대의 경우
▶ isnan() : 입력이 숫자인지 아닌지를 조사(Not A Number)
▶ isequal() : 복수의 입력 변수들이 수치적으로 같으면 1, 그외 0
▶ isnumeric() : 입력값이 수(1), 그 외의 경우 0
▶ isreal() : 입력값의 모든 요소가 실수이면 1, 복수수이면 0 반환
▶ ~isreal() : 입력값의 하나 이상의 복소수 존재시 1
▶ isglobal() : 입력 변수가 전역 변수일 경우 1.


<< 조 건 문 >>
▶ if 와 elseif : if로 시작해서 end로 끝을 맺어준다.
a. if 단독으로 사용된 경우
b. if와 else가 사용된 경우 => if에서 의 조건이 아닌 모든 것은 else가 된다.
c. if와 elseif와 else가 다 사용된 경우
  => if에서 조건이 아닌 나머지 경우가 elseif에서 검색되고 이것 역시 만족
  하지 않는 조건이 그 다음의 elseif, 또 그 다음..., 이렇게 되고 이 모든 조건
  을 만족하지 않는 조건이 바로 else가 된다.
★ 각각의 쓰임새가 다르기 때문에 이를 숙지하고 있어야 한다.

<< switch 문 >>
여러가지 경우를 평가할 때 유용하다.
C언어에서는 (,)대신 (:)가 사용, otherwise대신 default, end대신 {~~}사용
▶ switch(a)
        case 수식 1,
                문장 1;
        case 수식 2,
                문장 2;
        case 수식 3,
                문장 3,
             ......
        otherwise,
                문장 xx;
   end

<< 반 복 문 >>
● while (n<=100)
       s=s+n;
       n=n+1;
   end
● while(1)
   ....
   end           % 이 경우엔 무한 반복하게 된다(Ctrl + C로 정지시킬 수 있음)
● MATLAB에는 C언어의 증가 연산자와 감소연산자(++, --)가 없다.

★ for k=k의촉값 : k의증분값 : k의 최종값
        문장
   end

~!~ TIP ~!~
o C언어에서는 배열의 인덱스로서 i j를 사용하지만
  MATLAB에서는 i j가 허수로 최급되므로 인덱스로의 사용을 삼가는 게 좋다.
o error('message') : 메시지 문자열을 명령 프롬프트에 출력 후 종료.
o warning('message') : 오류 메시지만 출력. 종료 안하고 계속 진행.
o disp() : 변수명을 출려가지 않고 그 변수의 값만 출력
o input() : 키보드로부터 어떤 값을 입력받을 때 사용
  R = input('Input the Value = ');
  문자를 입력받고자 할 때 R = input('출력메시지','s');
o for나 while을 행렬로 대체할 수 있다면 실행속도가 상대적으로 느린
  for, while문 대신 행렬식 연산을 이용하는게 더 좋다.

<< 분 기 문 >>
:: 어떤 특수한 상황에서 for나 while같은 반복문을 탈출하기 위해 사용
▶ break : 例를 들어 while의 논리식이 영원한 참이라면? 무한루프를 돌게 된다.
  이때 if와 break를 적절히 사용해서 원하는바 대로 루프를 빠져나올수 있다.
▶ return : break는 break가 존재하는 그 루프만을 빠져나가지만 return은
   그 루프를 바져나감과 동시에 현재의 값을 m-file로 작성된 MATLAB 함수의
   반환값으로 반환시켜 버린다. C언어의 return문과 같은 역할



MATLAB(5) M-file사용  
(1) 스크립트로서의 사용
◎ 명령어 또는 함수들의 "일괄처리가 주 목적이다.
◎ workspace에서의 변수들과 m-file 내의 변수들이 서로 영향을 끼친다.
   (함수와의 가장 큰 차이라고 볼 수 있다)

(2) 함수로서의 사용
◎ 외부로부터 값을 입력받아서 연산을 수행한 후 다시 외부로 값을 반환해줌
◎ 파일명은 가급적 함수명과 동일하도록 사용한다.
◎ 변수의 범위 : global 변수 => 스크립트 경우처럼 workspace와 m-file 서로영향
                 local 변수 => m-file과 workspace에서의 변수 서로 영향 안 끼침

★ function 출력인자 = 함수이름(입력인자)

● function [out1,out2, ... ,outN] = function_name(input1,input2, ... ,inputM)
   다중입력, 다중 출력방식
● function out = function_name(input1,input2, ... ,inputM)
   다중입력, 단일 출력방식
● function function_name(input1,input2, ... ,inputM)
   다중입력, 출력은 없음. 주로 그래프 그리기처럼 출력인자가 필요없을 경우 사용
● function function_name()
   입력, 출력이 없음. m-file과 workspace간의 변수가 영향 안미침을 제외하고는
   스크립트와 그 기능이 거의 같다.



MATLAB(6) 문자열 취급 & 메뉴윈도우  
문자열을 취급할 때에는 C언어와는 달리 작은 따옴표(' ')를 사용한다.
▶abs(str)  : str이 수이면 절대값계산, 문자열이면 ASCII값으로 반환
▶isstr(str) : str이 문자열이면 1, 그 외에는 0
▶strcmp(str1,str2) : 두 문자열을 비교해서 일치하면 1, 그 외 0 (대소문자구분)
▶upper(str) : 문자열을 대문자(uppercase)로 변환
▶lower(str) : 문자열을 소문자로 변환
▶char(str) : ASCII형태의 문자열을 실제 문자열로 변환
▶str2double(str) : 문자열이 숫자(실수)일 경우 숫자로 변환해 준다.


Dialog 및 메뉴 윈도우
▶menu('제목','아이템1','아이템2',...'아이템n')
  화면에 메뉴가 뜨며, 아이템 k를 선택하면 결과로 k값이 반환된다.
(예) choice=menu('음식','닭고기','김치','찌게'); 한 상태에서 김치를
      선택하면 choice값은 2가 되는 것이다.
▶inputdlg('프롬프트','타이틀') : 프롬프트는 문자열 포함 cell array이고
  이 cell array가 2개 이상일 경우 값을 입력받는 부분이 그 수만큼 생성
->값을 입력받으면 이는 문자열의 cell array가 되며 숫자로 변환하고자 할때
  str2double(str)과 같은 함수를 이용한다.



MATLAB(7) 파일의 입출력  
<<파일의 입출력>>
(1) save와 load를 사용한 파일의 입출력
→MATLAB의 save에 의해 저장된 2진 파일(MAT파일)
→ASCII파일. 텍스트 편집기 등을 사용해 저장된 문자없이 숫자만 이뤄진 것.

▶ save
save 파일명 : workspace에 있는 모든 변수를 한 파일로 저장
save 파일명 변수1, 변수2, ... ,변수n : 임의의 변수를 한 파일로 저장
save 파일명 -ascii : 기본 파일저장형식인 2진파일(MAT파일)을 ASCII파일로 저장

(!!중요!!)ASCII 파일로 저장할 경우
→ cell array는 ASCII로 저장되지 않는다.
→ 변수를 ASCII파일로 저장하면 변수명은 저장안되고 변수값만 저장된다.
→ 복소수 데이터를 ASCII 파일 저장시 실수부만 저장이 된다.

▶ load 파일명
→ MAT 파일로 저장된 경우 변수의 이름과 같이 정확히 로딩됨
→ 일반 ASCII로 저장된 형식의 경우 그 파일명이 그 데이터의 변수가 된다.


(2) I/O(입출력) 함수들을 사용하는 방법
절차 : 파일을 열기(fopen) → 정보를주고받기(읽기,쓰기) → 파일을 닫기(fclose)
▶ [FileID] = fopen('FileName','permission')
permission : a. 파일접근방식 'r'(읽기) 'w'(덮어쓰기) 'a'(이어쓰기)
                  b. 파일교환모드 b(2진모드) t(텍스트모드)
fpt = fopen('test.txt','rt')
파일 열기에 성공하면 3이 상의 값이 반환된다.
이제 변수 fpt는 C언어에서의 파일 포인터 역할을 하게 된다.

▶ FileClose = fclose(FileID)
파일 닫기에 성공하면 0의 값을 반환한다(FileClose변수를 굳이 쓸 필욘없음)
   fclose('all') : 현재 개방된 모든 파일을 닫고자 할 때


★ fscanf : 파일로부터 데이터를 읽어들이기 위해 사용
A = fscanf(FileID,'format',size)
[A count] = fscanf(FileID, 'format', size)
→size에서 결정된 크기만큼 읽어들인 후 A에 저장한다.
→count는 읽어들인 데이터의 개수를 나타낸다(n, inf, [m,n])
→포맷 %d %f %s %c %e(지수) %u(unsigned)

★ fprintf : 파일에 임의의 데이터를 쓰기 위해 사용된다.
count = fprintf(FileID,'format',인자1,인자2, ...)
파일에 성공적으로 data의 바이트 수가 count에 반환된다.
→ 포맷에 대해서는 328페이지 참조
→ \n(개행문자) \t(탭문자) \\(역슬래쉬) %%(퍼센트)
→ %-md
   -는 왼쪽 정렬맞추기. -가 없으면 오른쪽 맞추기
   m은 출력할 정수의 폭 (%-m.nf의 경우엔 소수점 이하 n자리까지의 부동소수)
   d는 파일 전환자정자 f u 등이 쓰이겠지?
(ex) fprintf(fpt,'%-5d',k)
Posted by Bestend
: