We will find a way. We always have.

고려대학교에서 인공지능과 금융공학을 연구하고 있는 어느 대학원생의 블로그입니다.

프로그래밍 언어(Programming Language)/매트랩(MATLAB)

[MATLAB] 3강 - 입력과 출력

MinsukSung 2020. 10. 23. 16:15

여기에서 정리하는 모든 내용은고려대학교 문인식 교수님의 '뇌공학프로그래밍입문(INTRODUCTION TO PROGRAMMING FOR BRAIN AND COGNITIVE ENGINEERING)' 강의록을 정리한 내용입니다. 해당 내용에 대한 모든 저작권은 문인식 교수님께 있음을 확인하시길 바랍니다.


지난 시간까지는 매트랩(MATLAB)에서 벡터(Vector)와 행렬(Matrix)를 다루는 법을 배웠습니다. 기존 파이썬을 배우신 분들은 조금 문법이 혼란스러웠을 수 있지만, 어렵지 않게 넘어가셨을 겁니다.

 

 

2강 - 벡터와 행렬

여기에서 정리하는 모든 내용은 고려대학교 문인식 교수님의 '뇌공학프로그래밍입문(INTRODUCTION TO PROGRAMMING FOR BRAIN AND COGNITIVE ENGINEERING)' 강의록을 정리한 내용입니다. 해당 내용에 대한 모든 저.

minsuksung-ai.tistory.com


일단 들어가기 앞서, 지금까지는 인터프리터 환경에서 코드를 작성했는데, 이렇게 진행할 경우, 한줄 한줄 진행해야합니다. 하지만 경우의 따라서는 한꺼번에 여러 줄을 실행해야할 때도 있는데, 이럴 경우는 어떻게 해야할까요? 바로 스크립트(Script)를 사용하면 됩니다. 한번 간단하게 알아볼까요?

 

MATLAB에서 스크립트를 열면 저렇게 나옵니다

 

오른쪽 상단 '새 스크립트'라는 버튼을 누르면 위 화면과 같이 새로운 창이 뜹니다. 거기서는 여러 줄을 한꺼번에 실행할 수 있게끔 스크립트 창이 나옵니다. 한번 간단하게 예제를 볼까요? 해당 예제는 원의 반지름을 입력으로 받고 원의 넓이를 계산해주는 스크립트입니다.

 

MATLAB 스크립트 예제

% This script calculates the area of a circle
% It prompts the user for the radius
% Prompt the user for the radius and calculate
% the area based on that radius
fprintf('Note: the units will be inches.\n')
radius = input('Please enter the radius: ');
area = pi * (radius^2);
% Print all variables in a sentence format
fprintf('For a circle with a radius of %.2f inches,\n',... 
radius)
fprintf('the area is %.2f inches squared\n',area)

위의 스크립트를 실행시키면 이제 한꺼번에 결과를 확인하실 수 있습니다. 이제 대부분의 예제들은 스크립트 단위로 실행하겠습니다. (티스토리에서는 MATLAB Syntax 하이라이팅이 안돼서 아쉽네요)


Input

MATLAB에서 입력을 하기 위해서는 어떤 함수를 사용해야할까요? 정말 간단하게도 input 함수를 통해서 간단하게 입력을 할 수 있습니다. 아래와 같은 형태로 사용할 수 있습니다. 

 

variable = input('prompt string')

 

만약에 문자나 문자열을 받고 싶다면 어떻게 해야할까요? 그럼 인자로 's'를 붙여주면 됩니다. 그렇게 되면 숫자를 입력해도 그걸 문자나 문자열로 인식합니다. 

 

variable = input('prompt string', 's')

 

 

조금 특이한 것은 입력할 때 변수를 입력해도 됩니다. 한번 예제를 확인해보시죠. t + 4 로 입력해도 이걸 계산해서 입력으로 넣어줍니다. 다른 언어에서 볼 수 없는 특이한 부분인 것 같습니다. 

 


Output

기본적으로 출력을 표현하는 방법은 크게 2가지로 1) disp 함수를 쓰는 방법과 2) fprintf 함수를 사용하는 방법이 있습니다. 각각의 차이점이 무엇인지 간단하게 알아보도록 합시다. 일단 먼저 예제를 통해서 disp 함수에 대해서 가볍게 알아볼까요?

 

disp 함수 예제

일단 인터프리터에 치면 변수의 이름과 함께 값이 보이는데, disp 함수만 치면 변수의 이름은 보이질 않고 온전히 값만 확인하실 수 있습니다. 생각보다 단순하죠? 하지만 추후에 반복문을 돌거나 함수를 만들어서 사용할 때 이러한 기능이 없다면 출력 부분이 굉장히 지저분해보일 수 있기 때문에 이런 함수가 존재하는것 같습니다. :) 그러면 다음으로는 fprintf 함수를 예제를 통해서 간단하게 알아봅시다. 

 

fprintf 함수 예제

fprintf 함수는 disp 함수와 다르게 포맷팅 기능을 지원해줍니다. 특히 문자열을 출력할 때 매우 용이한 함수인데요. 여기서 포맷팅이란 것을 간단하게 설명하자면, 문자열 안에 변수 역할을 해주는 문자열을 의미합니다. 예를 들면, %d 를 통해서 해당 문자열 안에는 정수형이 출력이 될 것이라는 것을 알려줍니다. 그리고 fprintf 함수의 다음 인자로 %d에 해당하는 4^3 이 입력되면서 출력되는 것을 확인하실 수 있습니다. 정수를 제외하더라도 실수형이나 문자형 등 여러가지 지원해줍니다. 

 

또한 format string 안에 숫자를 적어서 출력되는 길이를 고정해줄 수 있습니다. 이게 무슨 말이냐면, 위의 예제에서처럼

 

%f 라고 치면 3.141592 라고만 나오지만

%3.4f 라고 치면 (00)3.1415 라고 나오게 됩니다. 즉 정수 부분의 길이와 소수 부분의 길이를 맞출 수 있습니다. 이렇듯 fprintf 함수는 disp 함수와 다르게 포맷팅 기능을 지원해줍니다. 사실 이외에도 여러가지 포맷팅 기능이 있습니다. 아래를 참고해주세요. 

 

 

disp 함수와 fprintf 함수를 통해서 벡터나 행렬을 표현하게 된다면 어떻게 될까요? 사실 벡터나 행렬을 표현할 때는 disp 함수가 훨씬 다루기 쉽습니다. 한번 확인해보시죠. 

 

왜 fprintf 함수를 쓰게 되면 저런 결과가 나올까요? 바로 아래와 같이 인식하기 때문입니다. fprintf 함수가 출력을 할 경우에는 벡터를 첫번째 Column부터 쭉 한줄로 펴주기 때문에 벡터나 행렬을 출력할 경우에는 disp 함수를 사용하는게 정신건강에 이로울 겁니다. 만약에 우리의 직관처럼 첫번째 Row처럼 펴줄 수 있었다면 좋았을텐데요.

 

 

지금까지 배워본 함수들을 이용한 스크립트를 가져오겠습니다. 한번 스크립트를 돌려보셔서 실습해보시길 바랍니다. 

 

% This script calculates the area of a circle
% It prompts the user for the radius
% Prompt the user for the radius and calculate
% the area based on that radius
fprintf('Note: the units will be inches.\n')
radius = input('Please enter the radius: ');
area = pi * (radius^2);
% Print all variables in a sentence format
fprintf('For a circle with a radius of %.2f inches,\n',... 
radius)
fprintf('the area is %.2f inches squared\n',area)

Save Writing Data to a File

지금부터는 이제 파일로부터 입/출력을 해보겠습니다. MATLAB에서는 load 함수나 save 함수를 통해서 파일 입출력이 가능합니다. 긴 설명 필요없이 일단 예제를 통해서 알아보겠습니다. 

 

save 𝑓𝑖𝑙𝑒𝑛𝑎𝑚𝑒 𝑚𝑎𝑡𝑟𝑖𝑥_𝑣𝑎𝑟𝑖𝑎𝑏𝑙𝑒_𝑛𝑎𝑚𝑒 -ascii

 

위와 같은 save 함수의 syntax를 통해서 데이터를 dat 형태로 저장할 수 있고 저장할 때 아스키 형태로 저장하겠다는 의미로 -ascii 를 붙여주면 됩니다. 그리고 type 함수를 통해서 내용을 확인할 수 있습니다.


Appending Data to a Data File

기존 데이터에 새로운 데이터를 추가하고 싶을 때는 어떻게 해야할까요? 바로 -append 라는 인자를 추가해주면 됩니다. 그러면 새로운 데이터를 기존 데이터에 추가할 수 있게 됩니다. 

 

append 인자를 추가해주므로써 기존 데이터에 추가할 수 있게 되었습니다. 


Load Reading from a File 

마지막으로 데이터를 읽어오려면 어떻게 해야할까요? load 함수를 통해서 가져올 수 있습니다. 

 


 

참고자료

 

 

사용자 입력 요청 - MATLAB input - MathWorks 한국

다음 MATLAB 명령에 해당하는 링크를 클릭했습니다. 명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.

kr.mathworks.com

 

 

변수 값 표시 - MATLAB disp - MathWorks 한국

귀하의 시스템에 이 예제의 수정된 버전이 있습니다. 이 버전을 대신 여시겠습니까?

kr.mathworks.com

 

 

텍스트 파일에 데이터 쓰기 - MATLAB fprintf - MathWorks 한국

귀하의 시스템에 이 예제의 수정된 버전이 있습니다. 이 버전을 대신 여시겠습니까?

kr.mathworks.com