2008년 12월 23일
01강 - MATLAB 때려잡기 - Matrix

안녕하세요? 오늘부터 'MATLAB 때려잡기'를 진행할 'lgs'입니다.
강의의 중요한 부분은 노란색으로 강조해 두었습니다.
그럼 바로 강의를 진행하겠습니다.
MATLAB은 저 코쟁이나라 쌀국 아메리카의 Math Works라는 회사에서 개발했다는니
스크립트 기반이기 때문에 C보다 실행 속도가 느리다느니...
뭐 알면 좋겠지만 알아봤자 그닥... -,.- 나는 이런것도 안다 이럴때나 쓰일 것 같군요..
그것보다 MATLAB = MATrix + LABoratory 이건 기억해둘만 합니다.
여기서 중요한 키워드는 바로 바로 바로 바로~ Matrix (행렬)이 되시겠습니다.
MATLAB에서는 모든 것을 행렬을 기본으로 처리합니다.
MATLAB에서는 심지어 상수조차 1x1 행렬입니다.
행렬을 잘 다루기 위해서는 Linear Algebra(선형대수)에 대한 이해가 필수 입니다.
선형대수가 약하신 분들은 MIT OCW의 재미있는 스트랑 아저씨의 강의를 추천합니다.
(영어가 부담스러운 분들은 한국어 강의를 참조하세요. ^^ 서울대학교 선형대수 동영상 강의 )
행렬? 아놔 나는 행렬이 뭔지도 모르는데~
선형대수? 아~ 왠지 어려워 보인다 라고 생각하시는 분
그러나 걱정할 필요가 없슙니다. 바로 여러분의 교주 lgs가 있기 때문입니다.
면식수행 주침야활로 무한내공을 쌓은 lgs 교주만 믿고 따라오시면 여러분들은 자신도 모르는 사이에 어느덧 MATLAB의 고수가 되어있을 것입니다. 쿨럭

행렬을 한자로 쓰면 가로행 行 세로렬 列 이 되겠습니다.
즉 행렬에서 '행'은 가로를 뜻하고 '렬'은 세로를 뜻합니다.
행렬을 한마디로 말하자면 숫자들이 가로 세로 줄을 맞추어 정렬되어있는 것입니다.
예를 들어 볼까요?
초등학교 교실에 줄을 맞추어 앉아 있은 애들도 행렬입니다.
저는 3분단 10번째 줄에 앉아서 공부했어요
여기서 3분단은 열(세로) 입니다. 10번째 줄은 행(가로)입니다.
아파트도 행렬이겠군요. 저는 104동 503호에 살고 있습니다.
104동은 세로(렬)입니다. 503호는 행(가로)입니다.
지도도 행렬이죠. 위도, 경도...
위도= 열(row), 경도 = 행(column)
시간표? 행렬이죠
요일 = column(세로), 교시 = row(가로)
바코드? 역시 1행 40렬 짜리 행렬입니다.
우리 주위의 무수한 것들이 행렬입니다.
이제 행렬이 무엇인지 감을 잡으셨나요?
이 행렬이라는 것이 공학, 수학, 물리학에서 굉장히 널리 쓰이며 유용하게 쓰입니다.
MATLAB은 이러한 행렬을 다루는데 최적화 되어 있습니다.
행렬의 크기를 말할 때는 3 x 3 ( '삼 바이 삼'으로 읽습니다) 이런 식으로 표현합니다.
기억해두셔야 할 것은 행렬의 크기를 말할때 반드시 가로 크기가 먼져 온다는 것입니다.
행렬이라고 말할 때 행이 먼져 나오죠? 그래서 가로가 먼저입니다.
위의 3 x 3 행렬에서 첫번째 3은 행렬의 행의 수(가로줄의 수)를 말 합니다.
그러면 뒤의 3은? 오~ 역시 똑똑하시군요 제 신도들 답습니다. 맞습니다~
바로 세로줄의 수를 말하는 거죠~
3 x 3 행렬이라고 하면 가로 세로의 크기가 3,3인 행렬을 말 하는거죠.

Element : A matrix는 9개의 element가 있습니다. 8, 3, 4, 1, 5, 9, 6, 7, 2 이렇게 9개의 element가 있군요.
Row vector : 1행으로 만들어진 행렬에 특별한 이름을 붙였으니 그 이름은 바로 바로 바로
row vector가 되겠습니다.
첫번째 행인 [8 1 6] 은 크기가 1 x 3인 row vector가 되겠군요.
Column vector : 1렬로 만들어진 행렬에 특별한 이름을 붙였으니 그 이름은 바로 바로 바로
column vector가 되겠습니다.
두번째 열인[1; 5; 9] 는 크기가 3 x1인 column vector가 되겠군요.
element(무차원: 점) < vector(1차원:선) < matrix(2차원:평면) < array(3차원이상: 공간) 이라고 이해하시면 되겠습니다.

A라는 matrix의 2행 3열에 있는 7이라는 element를 참조하고 싶다고 합시다.
MATLAB에서는 어떻게 해야할 까요?
우리가 알고 있는 것은 ① matrix의 이름, ② 몇번째 행, ③ 몇번째 열 이 3가지입니다.
MATLAB에서도 이 3가지의 정보를 가지고 element를 참조 합니다.
A(2,3) 라고 쓴것은 풀어서 말하면 "A라는 matrix의 2행 3열에 있는 숫자" 라는 말과 똑같습니다.
그럼 A(3,2)는 어떤 수를 가르키는 걸까요?
예 맞습니다."A라는 matrix의 3행 2열에 있는 숫자" '9'를 가르키는 군요.
MATLAB에서는 위의 방법과는 다른 방법으로 element를 참조하는 방법을 제공합니다.
그냥 처음부터 번호를 죽~ 매기는 거죠.
프리젠테이션 자료를 잘 보세요. 어떤식으로 번호를 부여하는지 잘 보시기 바랍니다.
A(4) 라고 쓴것은 "A matrix의 4번째 element"라는 말과 똑같습니다.
자 그럼 MATLAB을 직접 실행시켜 봅시다.
(참고: 저는 MATLAB 2008b 버전으로 강으를 진행하겠습니다. 버전이 낮아도 상관 없습니다.)


그냥 한번 둘러 볼까요? 음..
Command Window라는 것도 보이고 Command History라는 것도 보이고 Workspace라는 것도 보이는 군요.
왼쪽아래 Start 버튼도 보이구요 그 옆에 Ready라는 글자도 보입니다.
각각에 대해서는 지금 바로 여기서 설명을 하지 않고 차차 같이 실습을 하면서 설명드리겠습니다.
우리가 주로 놀 곳은 바로 바로 바로 Command Window 가 되겠습니다.
보이시나요? Command Window의 ">>"표시와 깜박이는 커서가!!
커서가 깜박이는 것은 MATLAB이 명령을 받아들일 준비가 되었다는 것을 말합니다.
자 그럼 위에서 말했던 A라는 행렬(matrix)를 하나 만들어 봅시다.

A라는 matrix를 입력하게 위해서 command window에서
>> A = [8 1 6 ; 3 5 7 ; 4 9 2]
라고 입력했습니다. 행렬을 입력하는 방법은 다음과 같습니다.
① 각각의 element들은 공백 이나 , 쉼표로 구분한다.
② 행과 행을 구분하기 위해 각 행의 끝에 세미콜론을 붙여 준다.
③ 행렬을 []로 묶어 준다
여기서 a = b 라는 것은 b의 값을 a에 대입하라라는 말과 같습니다.
( '=' 를 대입연산자라고 부릅니다. a=b는 a와 b가 같다는 말이 아닙니다.
a와 b가 같다는 표현은 'a==b' 입니다)
방금 A라는 matrix를 만들었더니 몇가지가 바뀐것을 눈치 채셨을 겁니다
우선 Command History에 우리가 입력했던 것이 그대로 기록되는 군요.
그리고 Workspace에 A라는 이름의 martix가 하나 생긴것을 볼 수 있습니다.
workspace의 A를 더블 클릭해 보세요.

Excel과 똑같죠? 숫자를 입력하거나 변경할 수 있습니다.
Variable Editor를 닫고 Command Window에서 위에서 배웠던 A(2,3)을 입력해보죠
>>A(2,3)
ans =
7
이라고 나오셨나요?
ans는 아무런 대입연산자가 없을때 기본적으로 계산 값이 저장되는 곳입니다.
행렬의 크기도 한번 보고 넘어 갈까요?
>> size(A)
ans =
3 3
예상한 것 처럼 3 x 3 의 값을 돌려주는 군요.
>> clc
>> clear
라고 입력해 보세요. 화면이 깨끗해지고 workspace의 변수도 없어 졌을 것입니다.
clc : command window를 깨끗이 지웁니다. (clc: clear command window의 약자입니다)
clear : workspace의 모든 변수를 지웁니다.(특정 변수만을 지우고자 할 때는 clear 다음에 변수명을 적습니다)
(중요!! matlab은 대문자와 소문자를 구분합니다)
clc 라는 명령어에 대해서 더 알고 싶다고요?
>> help clc
라고 입력해보세요. matlab에서 가장 많이 쓰이는 명령어가 아마 help인것 같습니다.
모든 명령어를 외울 수도 없고 help만 잘 써도 반은 먹고 들어가는 겁니다.
lookfor 명령어는 다음에 설명 드리죠
이번에는 Command History에서 A=[8 1 ...] 이 항목을 Command Window로 drag & drop 그리고 enter. 또는 History에서 A=[8 1 ...] 항목을 더블클릭 해보세요.
이해가 가시나요? Command History의 항목을 다시 쓸수 있습니다.
command window에선 윗쪽 화살표(↑)를 누르면 여러분이 입력했던 항목이 차례로 다시 나오는 것을 보실 수 있습니다.
>>exit
exit : matlab을 종료합니다.
자 오늘은 여기까지 입니다.
쉽게 쉽게 풀어쓴다고 썼는데 참.. 제가 다시 읽어봐도... 흠.. -_-;;
호응이 좋다면 다음 강의도 진행하겠습니다. 아니면 쿨럭 소리없이 내리겠죠? ㅋ
그럼 다음 시간에 뵙겠습니다.
# by | 2008/12/23 21:47 | Study | 트랙백 | 덧글(106)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
질문이 있는데요 >> 뒤쪽으로 쭉 쓰고 엔터를 누르면
아래쪽에 >>가 생기면서 또 입력할 수 있잖아요 근데 바로 위에 쓴걸
수정하고 싶은데 수정이 안되네요. 수정 어떻게 해야 할 수 있나요?
예를들어
>> a=b
>>
이런 상태에서 a=c인데 b로 잘못써서 b쪽에 클릭하고 수정하려고 하면 수정을
못하게 되있더라구요
너무 추상적이지만 부탁드립니다. 버전은 2006r입니다.
또는 Command History 창에서 a=b를 더블클릭 후 수정하세요~ ^^
처음 matlab을 공부하는 학생이라 너무 막막한데..쉽게 쉽게 강의해 주시니 정말 많은 도움이 되는 것 같습니다.
감사합니다~~
쉽게 쓴다고 썼는데.. 어떨지 모르겠습니다.
칭찬 감사합니당~~
강의 써놓으신거 보고 많은 도움이되었습니다 ^^
매트랩의 고수가 되는 그날까지 힘써주시면 감사하겠습니다!!
앞으로도 좋은 강의 부탁드릴게요^^
2008b를 깔았는데 rand만 봐도 이전 버젼이랑 달라졌다느니 해서 당황했는데
2008b로 해주신다니 감사합니다. 이전 버젼과의 차이점들도 설명해주시면 무한 감사하겠습니다.
번성하는 블로그가 되시길!!!ㅎㅎㅎ
이전 버젼과의 차이점을 설명할 정도의 내공이 안되므로 -_- 쿨럭 죄송합니다.
가장 기본적인 내용으로 강의를 진행하고 있습니다.
예를 들어 최근에 추가된 Editor의 Cell 기능 등은 강의에서 뺐습니다.
질문있으시면 언제든지 해주세요~
계속 강의보고 싶습니다! 감사합니다~
계속 업뎃 부탁 드려요
시간이 나는데로 강의 계속 올릴께요~
오늘 3강까지봤는데 머리에 쏙쏙
혹시 교수님???
아니 교수님보다 나은데요??ㅋ
다 공부하신다음에 10강 퀴즈 풀어보세요~ ^^
나름 야심차게 퀴즈 준비했는데 일주일 째 답을 올리시는 분이 아무도 없어요 ㅜㅜ
퍼가도 될까요 ^^? 두고두고 보게요 ㅋ
출처 딱! 찍어놓고 잘 볼께요 ^^
칭찬은 나의 힘!!! ㅋ
이해하기 쉬운거 같아요 ><
요즘은 바빠서 업데이트가 느리네요~
이해가 가지 않는 부분은 질문해주세요 ^^
여기 저기 돌아다니다가 여기왔어용 ~ 즐겨찾기 추가 완료~ 꺄오~
A+ 아 거기 섯거라
학과 공부 하는데 있어서 정말 좋은 소스가 될것 같습니다.
열공하세요 파이팅입니다요 ^^
좋은 강좌 찾고있었는데 이런데가 있었네요 ^^
잘 배우겠습니다! 정말로 감사해요ㅋ
한번 쭉 보니 어떤 프로그램인지 감이 오내요 ㅎ
도움 많이 됬습니다~감사해요
쉽게 쓴다고 썼는데 어떨지 모르겠습니다.
도움이 되었다니 다행이네요 ^^
학교에서 배울것 예습차원에서 보려고 하는데
이해하기가 참 쉽네요
초보인 저에게 아주 도움이 많이 됩니다.
강의 계속 올려주세요 'ㅁ'/
열공하세요
믿습니다!
감사드립니다.
근데 옥의 티를 하나 찾아보자면..
"행렬의 크기를 말할 때는 3 x 3 ( '삼 바이 삼'으로 읽습니다) "
by 를 영어단어 그대로 바이라고 하기 보다는
3의 3이라던가 3곱하기 3이라고 쓰는 것도 괜찮지 않을까 해서 써봅니다.
걍 by 를 우리말로 바꾸면 어떻게 될까 하고 생각해보다 떠오른 것이니 신경쓰시지 않으셔도 됩니다 ^^
sr님의 말처럼 '삼 곱하기 삼'이라고 해도 좋겠네요.
제가 지식이 부족해서 어떻게 읽는다는 표준안이 있는지는 모르겠습니다.
매틀랩의 매자도 모르는데 교수님이 매틀랩 과제를 막 내주셔서..
선배들한테 신세져야하나 했는데,
이렇게 좋은 강좌가 있었다니요!!!!!
혼자 매틀랩 창만 처다보면서 library를 써야하나..
이거 어떻게 지우지.. 파일은 새로 열어야하나.. 이러고 있었는데..
강좌 하나만 들었는데 벌써 머리속이 말끔해졌어요^^
도움이 되었다니 다행입니다. ^^
열공하세요~
즐겨찾기 해놓고 자주 공부하러 와야겠어요
감사합니다 ^^
자주 뵙게 되었으면 좋겠네요~~
좋은 강좌 잘 보고 가겠습니다.
정말 감사합니다^^
sin 100은 그냥 command window에서
>>sin(100) %100은 라디안 값입니다
하시면되요~
degree값으로 하시려면 sind함수를 쓰시면 됩니다.
미적책을 놓은지 오래되서 냠...-_-;;;
function 하나 만들어 줍시다. editor창에
function result = mtaylor(x,n)
result = 0;
for i=1:2:n
result = result + (-1)^floor(i/2)*x^i/factorial(i)
end
mtaylor.m으로 함수 하나 만들어 주세요
x는 100이 되겠구요~ m은 님이 원하는 항까지의 개수입니다.
symbolic하게 구하시려면 taylor함수를 사용하시면 됩니다.
단 symbolic mah toolbox 설치되어있어야 합니다.
>>f=sym('sin(x)')
>>taylor(f,20) %20은 님이 원하시는 항의 개수입니다.
옛날 복습으로 최고임다.
정말 보기 쉽게 잘 되어있는 것 같습니다
많이 배워갑니다
감사합니다 ^^
hex2dec
dec2bin
bin2dec
를 참조하시기 바랍니다.
>>open dec2hex 하시면 code를 보실 수 있을 겁니다.
쉽고 자세한 강의 감사드립니다.
덧글로 감사를 안들릴수가 없게 만드시는 매력이 있습니다.
다시한번 감사드립니다. 자주 방문하여 많이 배우도록 하겠습니다. 즐겨찾기 필수 ^^
도움이 되었다니 정말 다행입니다
열공하세요~ ^^
앞으로도 자주 들러 더 많은 공부하고 가겠습니다.
이렇게 좋은 강의 올려주셔서 너무 감사하고 고맙습니다.
command history 항목은 지울수 없나요?
커맨드 윈도우랑 워크 스페이스는 화면상에서 지웠는데 ㅋ
clear history를 하시면 됩니다. ^^
너무 감사합니다. 잘보았습니다.
매일매일 열심히 공부하겠습니다.
이렇게 좋은 강좌를 발견하게 되어 기쁩니다!!
큰 도움 정말 감사합니다^^
방문해주셔서 감사합니다. ^^
강의가 있으면 좋겠어요 ㅜ 앞으로도 좋은 강의 올려주시면, 감사하겠습니다.
최고에요~!
COLEA란 matlab software tool도 혹시 아시면 알랴주시면 감사^^
전 청각학쪽으로 공부하고 있는대학원생인데 요즘 이쪽에 필이 꽂혔네요~
행렬을 특정 행렬값을 출력하려면 A(2,3)이런식으로 하는데
그려면 txt파일에 저장되어있는 데이터의 특정 행렬값을 출력하려면
어떻게 입력해야하나요?
저도 매틀랩 배워야하는데 어디서 시작해야할지 몰라서 인터넷 검색하다가
님의 블로그를 보았어요. 이렇게 쉽고 자세하게 그리고 재미나면서도 기초부터
탄탄하게 설명해주셔서 얼마나 유익한지 몰라요. 정말 감사해요
제발 계속 강의해주세요 ~~
이해가 잘 되네요. 좋은 강의 감사드립니다.
외국에서 Matlab에 대해서 배우고 있는데...힘들었거든요.
저는 공학도가 아니고, data의 분석을 목표로 배우려합니다.
친절한 설명과 자료에 감사드리고...
혹시나, 제가 질문을 드려도 될런지요....지금은 아니구요..
좀 알아가고 나서요....그럼 수고하세요
도움이 되었다니 다행입니다.
이해가 가지 않는 부분은 질문해주세요~
정말 막막했는데 너무나 감사합니다!!!
복받으실꺼에요!!! :)
열심히 공부하겠습니다~~
여기서 많은 지식 얻고 갑니다!
과제 잘 할 수 있을 거 같아요 감사해요 ^ ^
공대생에게 MATLAB은 정말 강력한 '도구' 죠~
익혀 두시면 매우 큰 힘이 되실 겁니다
MATLAB은 왠만한 공학 수학 함수는 모두 정의되어 있습니다.
물론 Laplacian도 정의되어 있구요 ^^
del2 함수를 사용하세요
del2 함수의 자세한 사용법은 help browser를 참조하시기 바랍니다.
>>docsearch del2
직접 작성하시려고 하신다면 while 보다는 for를 쓰는 것이 훨씬 쉽겠죠? ^^