[matlab] 1.matlab의 기초 문법(1)
간단한 계산 명령어
명령어를 입력한 후 엔터를 누르면 MATLAM이 명령어를 실행합니다~
그리고 명령어가 실행되면 입력한 명령어 다음 줄부터 실행된 결과물이 표시됩니다.
그럼 먼저 변수에 숫자를 대입하는 것부터 해보겠습니다.
>>a=1 %a에 1대입
a=1 %실행된 결과물 표시
간단하죠?? 명령어를 적고 enter만 누르면 됩니다.
이번에는 행렬을 한 번 생성해보겠습니다.
%1행 3열(1*3) 행렬 생성
>>mat=[1 2 3]
mat = 1 2 3
%3행 1열(3*1) 행렬 생성
>>mat=[1; 2; 3]
mat =
1
2
3
%3행 3열(3*3) 행렬 생성
>>mat=[1 2 3; 4 5 6; 7 8 9]
mat =
1 2 3
4 5 6
7 8 9
위에 보시면 행을 ;로 구분짓는 것을 볼 수 있습니다.
다음은 matlab에서 행렬에 사용하는 연산입니다~
%3*1행렬 b
>>b=[1; 2; 3]
b =
1
2
3
%b행렬을 c에 대입
>>c=b
c =
1
2
3
%b의 전치행렬을 c에 대입
>>c=b'
c = 1 2 3
%b의 2행 1열의 원소 출력
>>b(2,1)
ans = 2
위에서 행렬 b의 2행 1열의 원소를 출력할 때 ans가 나옵니다.
ans은 계산된 가장 마지막의 결과 값이 저장됩니다.
예를 들어보겠습니다.
>>3*3
ans=9
>>5*3
ans = 15
>>4*2
ans = 8
>>ans
ans = 8 %가장 마지막 결과 값이 저장됩니다.
ans의 값은 계속 바뀌기에 ans를 이용해서 코드를 짜기보다는,
그 결과값을 다른 변수에 대입하는 것이 좋습니다.
그리고 명령어 다음 줄에 결과물이 출력되는데 출력하지 않게 하려면,
세미콜론(;)을 붙이면 됩니다.
>>a=1;b=2,c=3;
b = 2 %세미콜론을 붙이지 않은 b만 출력
다른 연산을 계속해서 알아보겠습니다.
%행렬 b
>>b=[1 2 3]; %세미콜론을 붙였기에 출력은 되지 않습니다.
%b의 각원소를 제곱한다.
>>b.^2
ans = 1 4 9
%a행렬의 각 원소와 b 행렬의 각 원소를 곱한다.
>>a=[7 8 9];
>>a.*b
ans = 7 16 27
%a벡터와 b벡터의 내적
>> a*b' %전치행렬을 이용합니다
ans= 50
다음은 유용한 행렬들을 생성하는 방법입니다.
%3*3 영행렬 생성
>>zeros(3)
ans =
0 0 0
0 0 0
0 0 0
%A라는 이름의 2*4 영행렬 생성
>>A=zeros(2,4)
A =
0 0 0 0
0 0 0 0
%행렬 A와 같은 크기의 영행렬을 생성
>>zeros(size(A));
ans =
0 0 0 0
0 0 0 0
%크기가 3인 단위행렬 생성
>>eye(3)
ans =
1 0 0
0 1 0
0 0 1
%각 원소 값들이 1인 3*3 행렬 생성
>>ones(3)
ans =
1 1 1
1 1 1
1 1 1
%각 원소 값들이 2인 3*3 행렬 생성
>>2*ones(3)
ans =
2 2 2
2 2 2
2 2 2
아 그리고 다른 언어와 마찬가지로 MATLAB은 대소문자를 구분합니다~
행렬의 연산을 더 알아보겠습니다!
%행렬 A,B
>>A=[1 2; 3 4]
A =
1 2
3 4
>>B=[5 6; 7 8]
B =
5 6
7 8
%A행렬의 각 열의 원소들의 합
>>sum(A) or sum(A,1)
ans = 4 6
%A행렬의 각 행의 원소들의 합
>>sum(A')
ans = 3 7
>>sum(A,2)
ans = 3
7
%sum(A)의 각 원소들의 합
>>sum(sum(A))
ans = 10
%A행렬의 각 열의 최댓값
>>max(A)
ans = 3 4
%A행렬의 각 열의 최솟값
>>min(A)
ans = 1 2
%max(A)의 최댓값
>>max(max(A))
ans = 4
%min(A)의 최솟값
>>min(min(A))
ans = 1
%A행렬과 B행렬의 각 원소들의 합
>>A+B
ans =
6 8
10 12
%A행렬과 B행렬의 각 원소들의 차
>>A-B
ans =
-4 -4
-4 -4
%A행렬의 각 원소에 2씩 더한 값
>>A+2
ans =
3 4
5 6
%size로 벡터 또는 행렬의 크기를 알 수 있습니다.
>>size(A)
ans = 2 2
%length로 벡터의 길이를 알 수 있습니다.
>>C=[1 2 3];
>>length(C)
ans = 3
%length는 행렬의 행과 열 중에 큰 값을 출력합니다.
>>C=[1 2 3; 4 5 6];
>>length(C)
ans = 3
%행렬 곱
>>A*B
ans =
19 22
43 50
%A와 B의 역행렬과의 행렬곱
>>A/B or A*inv(B);
%A의 역행렬과 B와의 행렬곱
>>A\B or inv(A)*B;
%A의 제곱
>>A^2 or A*A;
%A와 B의 원소를 대응시켜서 곱함
>>A.*B; %이 때 A와 B의 크기는 정확하게 일치해야합니다.
%A의 원소에 B의 원소를 대응시켜 제곱함
>>A.^B;
%연산자 앞에 .이 붙게 되면 행렬의 같은 위치에 있는 각각의 원소끼리 연산을 수행하라는 의미입니다.
이제 행령의 일부나 전체를 불러오는 표현을 배워보겠습니다.
>>A=[1 1 1 1; 2 2 2 2; 3 3 3 3; 4 4 4 4]
A =
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
>>A(2, 1:4) %2행과 1열~4열 겹치는 부분 출력
ans = 2 2 2 2
>>A(2,:) % :는 행렬에서 전체를 나타내는 표현입니다.
ans = 2 2 2 2
>>A(2:3,2:3) %2~3행과 2~3열 겹치는 부분 출력
ans =
2 2
3 3
그 다음은 숫자의 연산에 관한 함수입니다.
%절댓값
>>abs(-3)
ans = 3
%가장 가까운 정수(반올림)
>>round(1.24)
ans = 1
%올림
>>ceil(1.24)
ans = 2
%내림
>>floor(1.24)
ans = 1
%0 방향으로 반올림
>>fix(1.24)
ans = 1
%제곱 근
>>sqrt(2); %루트 2
%실수부, 허수부
>>real(3+2i),imag(3+2i)
ans = 3 ans = 2
%나머지 연산
>>mod(5,4)
ans = 1
>>mod([1,2,3,4,5],2)
ans = 1 0 1 0 1
>>A=[1 2 3; 4 5 6];
>>mod(A,2)
ans =
1 0 1
0 1 0
%단, 음수일 때는 조심하여야 합니다.
>>mod(10,-4)
ans = -2 %정수론에서 나머지는 음이 아니라고 했던 것과 다릅니다.
%나머지를 음수가 아니게 하려면 rem을 이용합니다.
>>rem(10,-4)
ans = 2
%rem와 mod는 양의 실수일 때는 동일하나 음의 실수일 때 mod는 나머지가 음수여도 되고,
%rem은 나머지가 음수이면 안됩니다.
마지막으로 유용한 명령어들을 알아보겠습니다.
%1~10까지의 수를 원소로 하는 배열
>>A=[1:10]
A = 1 2 3 4 5 6 7 8 9 10
1. 줄넘기기
명령어가 너무 길어 다음 줄로 넘어가고 싶을 때 ...을 사용합니다.
2. 명령어의 앞에 %를 입력하면 주석으로 처리됩니다.
3. command window에 표시되었던 모든 내용을 지우고 싶으면 clc라고 입력합니다.
4. Figure에 나타난 모든 그림을 지우고 싶을 때는 clf를 입력합니다.
5. 변수 및 배열에 할당된 값들을 모두 삭제할 때는 clear를 입력합니다.
모든 변수 삭제 : clear all
특정 변수만을 삭제 : clear 특정변수
6. 사용 중인 변수들의 이름을 알고 싶으면 who를 입력합니다.
사용 중인 변수들의 size를 알고 싶을 때는 whos를 입력합니다