ICIS 학부 연구생/MATLAB 기초

2장. 행렬 연산(Matrix Operation)

hanol02 2023. 7. 3. 23:35

MATLAB에서 행렬은 배열을 의미하며 넓은 의미로 벡터도 행렬로 간주한다.

 

 

2.1 행렬의 생성

# 행 구분자: 세미콜론 (;)

# 열 구분자: 빈 칸, 컴마(,)

 

# 콜론(:)을 이용한 벡터의 생성

# 다양한 함수를 이용한 행렬 생성

 

  ① 파스칼 행렬

 

 

 

rand() = 균일하게 분포된 난수 생성 함수


rand(a)

0~1 사이의 난수로 구성된 행렬


rand(a,b)

지정된 구간 내의 난수로 구성된 행렬
일반적으로 구간 (a,b)에 N개의 난수를 생성할 때 식 r = a + (b-a)*rand(N,1)을 사용

ex1. (-5,5) 구간에 균일하게 분포된 난수로 구성된 10x1 열 벡터를 생성해보자



ex2. (-5,10) 구간에 균일하게 분포된 난수로 구성된 2x4 벡터를 생성해보자

randi()

정수형 난수
ex. 10 ~ 50 사이에 균일하게 분포된 5개의 정수형 난수를 생성해보자

rand(10,2,3)에서 10은 범위 0~10를 의미

rand(size(A))

A 배열과 동일한 크기의 배열 X 만들기




rand(__, typename)

난수의 데이터 타입 지정

  ③ randn() -- ???

  ④ linspace()

 

# 원소값 대입에 의한 행렬의 생성

 

 


 

2.2 행렬의 원소 참조

# 행렬의 원소

: MATLAB은 열 우선임

 

 

# 행렬의 부분 참조

 

 


 

2.3 행렬의 정보

# 행렬의 정보?   --  행렬의 크기, 길이, 원소 개수, 차원

size, length, numel, ndims

 

# 행렬의 자료 구조

- isscalar(A) : A가 스칼라?

- isvector(A): A가 벡터?

- ismatrix(A): A가 행렬?

- isrow(A): A가 행벡터?

- iscolumn(A): A가 열벡터?

 

 


 

2.4 행렬의 변형

# 행렬의 벡터화

열 벡터 A(:), 행 벡터 A(:)'

 

# 벡터, 행렬의 행렬화

- reshape()

열벡터 우선으로 만들어짐

 

# 행렬의 회전과 대칭화

- rot90(A), fliplr(A), flipud(A)

rot90: 왼쪽으로 90도

 

# 행렬의 치환

- find()

 

 

 

# 벡터의 정렬

1. sort()

① sort( ___, ascend/descend )

 

 

② sort(A, 'ComparisonMethod', ____)

[ ComparisonMethod - 요소 비교 방법 ]

 i) auto: A가 실수이면 real(A)를 기준으로 정렬함. A가 복소수이면 abs(A)를 기준으로 정렬함

ii) real: A가 실수이거나 복소수인 경우 real(A)를 기준으로 A를 정렬함. A에 실수부가 동일한 요소가 있으면 imag(A)를 사용해 우선순위 결정   

% real(A)는 A의 실수부를 반환함

% imag()는 복소수의 허수부를 반환

iii) abs: A가 실수이거나 복소수인 경우 abs(A)를 기준으로 A를 정렬함. A에 크기가 동일한 요소가 있으면 angle(A)를 사용하여 우선순위 결정   

% abs(A)는 A가 실수일 때 절대값을 반환, 복소수일 때 복소수 크기를 반환

% angle(A)은 A의 위상각을 반환

 

 

 

③ [A,I] = sort(x)

x를 정렬한 결과: A

I는 x에 대응하는 인덱스

 

 

 

2. sortrows()

rand() 함수 이용해 A 행렬 생성하기

① sortrows(A)

: 1열 기준으로 행 전체를 오름차순 정렬. 한 열에 동일한 요소 있으면 다음 열 보고 정렬

 

② sortrows(A,2)

: 2열 기준으로 행 전체를 오름차순 정렬. 2열에 동일한 요소 있으면 원래 순서대로 ..

③ sortrows(A,[1 7])

: 1열 기준으로 행 전체를 오름차순 정렬. 1열에 동일한 요소 있으면 7열을 기준으로 우선순위를 정한다.

 

 

 

 


 

2.5 행렬의 행과 열 삭제

# 행과 열의 삭제

 

 

 


 

2.6 행렬의 함수

1. 역행렬 - inv()

: 어떤 행렬 A와 곱했을 때 단위행렬이 나오게 하는 행렬

 

2. 행렬값(determinant) - det()

3. 고유값과 고유 벡터 - eig()     ??

4. 유용한 행렬 함수

size(), length(), sum(), prod(), mean(), max()

 

 


 

2.7 행렬의 연산 

 

1. 덧셈과 뺄셈

① 행렬 + 행렬 

- 행렬의 크기가 같아야 한다

 

② 행렬 + 스칼라 

- 행렬의 각 원소에 스칼라만큼 덧셈/뺄셈

2. 행렬의 곱셈

① 행렬 x 행렬

② 행렬의 각 원소 x 행렬의 각 원소

- 행렬의 크기가 같아야 한다

③ 행렬 x 스칼라

 

 

 

3. 행렬의 나눗셈

① 행렬 / 행렬

- 행렬 B의 역 행렬이 존재하고 크기가 같아야 한다

 

② 행렬의 각 원소 / 행렬의 각 원소

- 행렬의 크기가 같아야 한다

 

 

4. 행렬의 좌나눗셈

① 행렬의 좌나눗셈

 

 

②***** 좌나눗셈을 이용한 선형 연립방정식 풀기

 

 

 

5. 행렬의 n승

① 행렬의 제곱

- 정방행렬이어야 한다

② 행렬의 각 원소를 제곱

 

 

6. 전치행렬

① 실수 행렬의 전치행렬

② 복소 행렬의 전치행렬

 


 

2.8 문자열

1. 문자열의 생성 '___'

- 문자열은 원소가 문자인 벡터/행렬이다. 즉, 문자열의 각 문자는 행렬의 원소에 해당한다.

 

 

2. 문자열 연결

- 문자열의 연결은 행렬의 연결과 같다.

- 문자열을 이용하여 행렬을 만들 때 각 행은 크기가 같아야 한다.

Hello의 열 개수와 everyone의 열 개수가 다름

 

 

3. 서로 다른 크기의 문자열로 행렬을 만드는 방법

-> 문자열 연결 함수를 이용

① strvcat() : 문자열을 세로로 결합하는 함수

② str2mat(): 문자열에서 공백으로 채워진 문자열 배열 형성?

 

 

4. 문자열 비교 함수

① strcmp() / strncmp() : 문자열 비교

 

② findstr()

③ strrep()

 

 

 

5. 문자열 비교 함수

① num2str() : 숫자를 문자형 배열로 변환하기

② str2num() : 문자형 배열 또는 string형을 숫자형 배열로 변환하기

 

③ disp() 변수 이름 출력하지 않고 변수 값을 표시

④ mat2str(): 벡터/행렬을 문자열로 변환

 

 

 

 


 

2.9 셀형(cell) 배열

# 셀형 배열

- 각 셀은 서로 다른 데이터형을 포함할 수 있다.

- 셀형 배열은 주로 텍스트 목록, 텍스트+숫자, 각기 크기가 다른 숫자형 배열 중 하나를 포함

- {} 을 사용하여 빈 0x0 셀형 배열 생성 가능

 

 

 

# 셀형 배열의 데이터에 접근하는 방법

# cell2mat() : 셀형 배열을 일반 행렬로 변환

 

 

# 셀형 배열의 데이터 접근

{ } : 중괄호로 접근

 

# 셀형 배열에 데이터 넣기

 

 

 


 

2.10 구조체형(struct) 배열

- 필드라는 데이터 컨테이너를 사용하여 관련 데이터를 그룹화하는 데이터형.

- 각 필드에는 모든 데이터형이 포함될 수 있다

- 필드의 데이터에 접근하려면 structName.fieldName 형식의 점을 사용

 % C와 비슷

 

# 구조체형 배열의 생성

- struct 함수

① s = struct                                       % 필드가 없는 스칼라(1x1) 구조체를 생성

② s = struct( [ ] )                                % 필드가 없는 빈(0x0) 구조체를 생성

s = struct('필드1', '값1', '필드2', '값2', ... '필드n', '값n')     % 주어진 필드와 값을 갖는 구조체를 생성

 

# 구조체 배열의 데이터에 접근하기

ex. s4의 num 출력해보자

 

 

 

 


 

2.11 관계 연산자

# 스칼라 - 스칼라 비교

# 복소수 - 복소수 비교

: 복소수의 대소비교는 실수부만 비교한다

 

# 스칼라와 벡터(행렬)의 비교

# 벡터(행렬)와 벡터(행렬)의 비교

 

 

 

 

 


 

2.12 논리 연산자

# 변수의 논리 연산

# 벡터(행렬) 변수의 논리 연산

- any(a): 행렬 a에 0이 아닌 요소가 하나라도 있으면 참(1)

- all(a)  : 행렬 a의 요소가 모두 0이면 참(1)

 

 

 

 

 

 

 


 

2.13 다항식

# 다항식 표기법

: 다항식을 내림차순으로 정리한 후 계수를 벡터로 나타낸다.

 

 

# 다항식의 값

① y = polyval(p,x)

: x의 각 점에서 다항식 p를 계산한다 

 

 

# 다항식의 곱셈과 나눗셈

② conv(u,v) : 곱셈

: u와 v가 다항식 계수의 벡터인 경우 컨벌루션은 두 다항식의 과 같음

 

③ deconv(u,v) : 나눗셈

: u와 v가 다항식 계수의 벡터인 경우 컨벌루션은 두 다항식의 나눗셈과 같음

 

 

# 다항식의

④ roots(p)

: p로 표시되는 다항식의 근을 열벡터로 반환

 

⑤ poly(A)

: 특성다항식의 근을 반환(?)

 

 

# 다항식의 미분

polyder(f): f(x)를 미분

polyder(f,g): f(x)*g(x)를 미분

[q,d] = polyder(f,g) : f(x)/g(x)를 미분. q는 분자 다항식, d는 분모 다항식

 

 

 

# 다항식의 적분

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'ICIS 학부 연구생 > MATLAB 기초' 카테고리의 다른 글

[ MATLAB ] 2장 연습문제  (0) 2023.07.04
가우시안 백색 잡음  (0) 2023.07.04
1장. MATLAB  (0) 2023.07.03