MATLAB 에서 txt 파일을 출력하는 경우 다음 과정에 따라 처리 한다.

 

  • fopen() 함수를 이용하여 파일을 쓰기 모드('w')로 연다.

 

  • fprintf() 함수를 이용하여 파일에 내용을 쓴다.

   

  • fclose() 를 이용하여 file handle 을 닫아 준다.

  



 

다음과 같은 데이터를 이용하여 위 과정 대로 test_file.txt 파일에 저장해 보자.

 

 

저장하는 과정은 다음 코드와 같다.

 

 

 

저장된 파일 test_file.txt 을 열어서 확인해 보면 다음과 같다.

 

7 8 

3 7 

7 1 

1 5 


위 결과를 보면 정상적으로 저장이 안 된 것을 확인 할 수 있다.



 

이는 fprintf 함수에서 %d %d 를 써서 10진수 숫자를 저장할 때

 

각 열 벡터 별로 즉 MATLAB 이 일반적으로 처리하는 행 순서대로 저장하기 때문이다.

 

따라서 matrix 값을 정확히 저장하기 위해서는 transpose 를 취해준 후 저장 해야 한다.

 

fprintf() 문장의 올바른 코드는 다음과 같다.

 

fprintf(file_h,'%d %d \n', x.'); % 10진수 이므로 %d 사용

 


텍스트 파일을 열어서 결과를 확인하면 다음과 같이 정상적으로 저장 된 것을 확인 할 수 있다.

 

7 7 

8 1 

3 1 

7 5  

    


'programming language > MATLAB' 카테고리의 다른 글

MATLAB nargin, nargout  (6) 2011.04.24
MATLAB laplace, inverse laplace transform  (0) 2011.04.24
MATLAB 변수를 저장 하자~ mat file  (0) 2011.04.21
MATLAB NaN  (0) 2011.04.20
MATLAB 파일 출력  (0) 2011.04.19
MATLAB 파일 읽기 importdata()  (0) 2011.04.18
MATLAB binomial r.v. generation  (4) 2011.04.17
MATLAB cell class  (6) 2011.04.11
MATLAB taylor, Maclaurin serise  (0) 2011.04.10

cumsum() 함수를 이용하면 vector 또는 matrix 에 대한 누적 합을 아주 쉽게 구할 수가 있다.

 

사용법은 다음과 같으며, 행 또는 열 별로 이전 값과 누적이 되는 것을 확인 할 수 있다.

 




 

cumprod() 함수는 누적 곱을 할 때 이용한다.

 

 

cumtrapz() 함수는 누적 사다리꼴 수치 적분을 할 때 이용한다.

 

 

위 결과에서 trapz() 함수를 이용한 것과 cumtrapz() 함수의 마지막 값이 같음을 알 수 있다.


이번 포스팅에서는 MATLAB 인덱스에 대해 설명한다.

 

다음 matrix A 에 대한 각 인덱스의 접근 방법에 대해 알아보자.

 



 

: (콜론) 의 사용법에 대해 알아보자.

 

: 은 a:b 와 같은 형태로 쓰이면 a~ b 까지라는 뜻이다. 인덱스에 접근하는 용도로 : 을 쓸 때 a,b 값은 1보다 큰 양의 정수 여야 한다.

 

: 을 이용하여 A 의 3행 1열부터 4열 까지의 값을 B 라는변수에 입력해 보자.

 

 

행, 열을 구분하지 않고 다음과 같이 접근할 수도 있다.

 

 

 

MATLAB 은 기본적으로 행 벡터 즉 열을 기준으로 연산을 하는 특징이 있다.

 

A 의 5행 모든 열을 D 라는 변수에 입력해 보자.

 

 

 

콜론을 이용하여 인덱스에 접근을 할 때 콜론만 단독으로 쓰일때는 '모든 것' 을 의미 한다.

 

 

다음으로 인덱스 접근시의 end 의 용법에 대해 알아본다. end 는 말 그대로 마지막 인덱스를 나타낸다.

 

위에서 설명한 A 의 5행 모든 열은 다음과 같이 나타내도 된다.

 

 

A 의 값 중에서 20보다 큰 인자의 인덱스를 찾아 보자. 이런 경우 조건문과 find() 함수를 이용하여 인덱스를 찾곤 한다. find() 함수는 괄호 안의 조건이 참인 인덱스를 찾아주는 것이다.

 

 

 

위 결과는 A matrix 를 벡터로 나타냈을 때의 인덱스 값이다.

 

행과 열로 구분해서 나타내려면 다음과 같이 써주면 된다.

 

 

 

위 결과를 보면 r 에는 행 인덱스c 에는 열 인덱스가 들어감을 확인 할 수 있다.

 

위 결과를 보면 A>20 을 만족하는 부분이 5 군데 있음을 확인 할 수 있다.

 

A>20 을 만족 시키는 처음 2개의 인덱스만 찾고 싶을 때는 다음과 같이 한다.

 

 

다음과 같이 'first' 를 안 써줘도 동일한 결과를 얻을 수 있다.

 

 

 

즉 'first' 값이 default 라는 것을 알 수 있다.

 

 

그럼 마지막 2개 인덱스만 찾고 싶을때는? first 만 last 로 바꿔주면 된다.

 

 

 

다음으로 linear 인덱스subscripts 와의 변환에 대해 살펴 본다.

 

A matrix 는 5행 5열 matrix 이므로 다음과 같은 인덱스를 갖는다.

 

표 1, linear index

1

6

11

16

21

2

7

12

17

22

3

8

13

18

23

4

9

14

19

24

5

10

15

20

25

 

subscripts 로는 다음과 같다.

표 2, subscripts index

(1,1)

(1,2)

(1,3)

(1,4)

(1,5)

(2,1)

(2,2)

(2,3)

(2,4)

(2,5)

(3,1)

(3,2)

(3,3)

(3,4)

(3,5)

(4,1)

(4,2)

(4,3)

(4,4)

(4,5)

(5,1)

(5,2)

(5,3)

(5,4)

(5,5)

 

 

linear index 와 subscripts 사이의 변환을 해주는 함수로 ind2sub(), sub2ind() 함수가 있다.

 

ind2sub() 함수는 index 를 subscripts 로 만들어 주는 함수이다.

 

ind2sub() 를 이용하여 linear index로 19 를 subscripts 로 나타내 보자.

 

 

위와 같이 4행 4열이 출력됨을 알 수 있다.

 

sub2ind() 함수는 subscripts 를 index 로 만들어주는 함수이다.

 

3행 5열이 linear index 로 몇 번째 인지를 알아 보자.

 

 

오늘은 MATLAB 에서의 index 에 대해 알아 봤다.

 

위에서 설명한 함수들이나 인덱스 접근 방식들은 2차원 매트릭스 뿐 만이 아니라 3차원이나 그 이상의 매트릭스에 대해서도 적용 가능하다.

 


+ Recent posts