Matlab/스크립트 문서 원본 보기
←
Matlab/스크립트
둘러보기로 이동
검색으로 이동
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
{{상태상자|진행중|대학 강의|공학|강의형}} '''스크립트'''란 일련의 작업들을 순서대로 진행하도록 미리 세팅해둔 것을 말합니다. 일종의 [[wikt:프로그램|프로그램]]이라고 보면 됩니다. Matlab, GNU Octave에서의 스크립트는 .m 형식으로 저장되며, 언제든지 불러와서 같은 작업을 다시 실행할 수 있습니다. == 스크립트 작성과 실행 == GNU Octave에서 새 스크립트를 작성하려면 메뉴에서 File > New > New Script 를 클릭합니다. 그러면 Script 에디터가 나오고, 여기서 필요한 명령들을 차례로 입력할 수 있습니다. 예시로, 평균값을 구하는 스크립트를 작성해보겠습니다. <source lang="octave"> A=1; B=3; C=5; average=(A+B+C)/3 </source> 이렇게 스크립트를 작성한 후, 상단의 저장 버튼을 눌러 원하는 경로에 저장해줍니다. 만든 스크립트를 실행하는 방법은 Script 에디터를 빠져나간 다음, 상단에 Current Directory에 해당 m 파일이 있는지 확인한 후, m 파일의 이름을 입력해주는 것입니다. 만약 Current Directory가 아닌 다른 경로에 m 파일이 있다면 우측의 Browse Directories를 눌러 경로를 옮겨주고 m 파일 이름을 입력해주면 됩니다. 위에서 작성한 간단한 script의 실행 결과는 다음과 같습니다. <source lang="octave"> >> average average = 3 </source> == input == input을 사용하면 스크립트에서 미리 변수값을 지정해줄 필요 없이, 사용자가 원하는 값을 넣게끔 할 수 있습니다. <source lang="octave"> A=input('value A?') B=input('value B?') C=input('value C?') average=(A+B+C)/3 </source> 이렇게 만들고 average1.m으로 저장한 후, 실행한다면, <source lang="octave"> >> average1 value A?4 A = 4 value B?6 B = 6 value C?9 C = 9 average = 6.3333 </source> 이렇게 A, B, C값을 물어보게 하여 평균값을 구할 수 있습니다. == disp == disp를 이용해 화면에 값이나 문자를 출력할 수 있습니다. <source lang="octave"> A=input('value A?') B=input('value B?') C=input('value C?') average=(A+B+C)/3; disp('') disp('The average is : ') disp('') disp(average) </source> average2.m으로 저장 후 실행하면 <source lang="octave"> >> average2 value A?4 A = 4 value B?6 B = 6 value C?7 C = 7 The average is : 5.6667 </source> disp(<nowiki>''</nowiki>)를 입력하면 빈 줄을 출력합니다. 표처럼 나열하는 스크립트도 만들 수 있습니다. <source lang="octave"> yr=1984:2:1996; pop=984:2:996; table(:,1)=yr'; table(:,2)=pop'; disp('year population') disp('') disp(table) </source> pop으로 저장한 뒤 실행하면 결과는 다음과 같습니다. <source lang="octave"> >> pop year population 1984 984 1986 986 1988 988 1990 990 1992 992 1994 994 1996 996 </source> == fprintf == fprintf를 이용하면 텍스트와 수치값을 화면에 표시하거나 저장할 수 있습니다. 출력 형식도 따로 지정 가능합니다. <source lang="octave"> fprintf('Hello World \n\n') % 작은 따옴표 안에 \n을 입력하면 줄바꿈합니다. fprintf('Hi') </source> pop2.m으로 저장한 뒤 실행하면 결과는 다음과 같이 나옵니다. <source lang="octave"> >> pop2 Hello World Hi>> </source> 문자열과 함께 숫자를 나타내려면 다음과 같이 합니다. <source lang="octave"> pop=90000; fprintf('The population is %i. \n', pop) </source> 이것을 pop3.m이라 하고 실행하면, <source lang="octave"> >> pop3 The population is 90000. >> </source> 즉, 작은 따옴표 안에 % 적힌 부분에 숫자가 들어갑니다. 여기서 나오는 숫자는 반드시 fprintf의 괄호 안 끝에 쉼표(,)를 찍어서 순서대로 나열해주어야 합니다. %다음에 오는 알파벳이나 숫자는 출력 형식을 지정합니다. 예시에서 사용된 %i는 정수 형태로 표시하라는 것입니다. 출력 데이터 형식은 다음과 같이 지정할 수 있습니다. * %e : 소문자 e를 이용한 지수 표시법 * %E : 대문자 E를 이용한 지수 표시법 * %f : 고정 소수점 표시법 * %g : e 표기법과 f 표기법 중 더 짧은 쪽으로 표시 * %G : E 표기법과 f 표기법 중 더 짧은 쪽으로 표시 * %i : 정수로 표시 소수점의 수도 지정해줄 수 있습니다. 예를 들어, %7.3f 라고 한다면 소수점을 포함한 일곱 자리의 수로 나타내는데, 소수점 이하 자리수는 세 자리로 나타내는 것을 의미합니다. <source lang="octave"> pop=905.3664949; fprintf('The population is %7.3f. \n', pop) </source> pop4.m으로 저장한 뒤 실행하면, <source lang="octave"> >> pop4 The population is 905.366. </source> === fprintf를 이용해 출력 값 저장하기 === fprintf, fopen, fclose를 이용해 출력값을 텍스트 파일로 저장할 수 있습니다. 우선 fid라는 변수에 fopen('파일명', '권한 지정') 함수를 이용해 fid에 연 파일을 넣어줍니다. 그 다음, fid에 fprintf를 이용해 값을 적어준 후, fclose(fid)를 통해 파일을 닫아주면 됩니다. 이때 '권한 지정' 변수는 세 가지가 있는데, 기본값은 'r'입니다. * 'r' : 읽기 위해 파일을 연다. * 'w' : 쓰기 위해 파일을 연다. 파일이 이미 존재하면, 파일 내용이 삭제된다. 파일이 존재하지 않으면 새 파일을 생성한다. * 'a' : 파일이 존재하는 경우 출력 값이 파일 끝에 이어서 출력된다. 나머지는 'w'와 같다. <source lang="octave"> n1=1; n2=2; n3=3; fid=fopen('testfile.txt', 'w') fprintf(fid, 'This is the %i st message \n', n1); fprintf(fid, 'This is the %i nd message \n', n2); fprintf(fid, 'This is the %i rd message \n', n3); fclose(fid); </source> 이와같이 test.m 스크립트를 만들고 실행하면, 같은 경로에 testfile.txt가 생기며, 내용은 다음과 같이 나옵니다. This is the 1 st message This is the 2 nd message This is the 3 rd message == 관계 연산자 == Matlab에서 조건문을 사용할 때 자주 쓰이는 것이 관계 연산자입니다. 관계 연산자를 통해 조건의 참, 거짓을 구분합니다. 참은 1, 거짓은 0입니다. * < : 우변보다 작은가 * > : 우변보다 큰가 * <= : 우변보다 작거나 같은가 * >= : 우변보다 크거나 같은가 * == : 우변과 같은가 * ~= : 우변과 같지 않은가 주의할 점은, 수학에서 하듯이, 3<x<5와 같이 연속으로 나열하면 안 된다는 것입니다. 이렇게 하기 위해선 논리 연산자를 같이 사용해야 합니다. == 논리 연산자 == 논리 연산자는 세 가지가 있습니다. 이 역시 조건문을 사용할 때 자주 쓰입니다. * & : And. A&B가 있다고 할 때, A와 B가 모두 참(1)이면 1이고, 둘 중 하나라도 거짓(0)이면 0. GNU Octave에서도 동작하나, 경고 메시지가 나오지 않게 하려면 &&를 씁니다. Matlab에서도 &&를 사용할 수 있습니다.<ref>https://kr.mathworks.com/help/matlab/ref/logicaloperatorsshortcircuit.html</ref> * | : Or. A|B가 있다고 할 때, A와 B 중 하나 이상이 참(1)이면 1이고, 둘 다 거짓(0)이면 0 * ~ : Not. ~A가 있다고 할 때, A가 참(1)이면 0을, 거짓(0)이면 1 관계 연산자에서 주의점으로 든 3<x<5를 Matlab에서 나타내려면 3<x & x<5와 같이 써주어야 합니다. == 조건문 == Matlab에서의 조건문은 if, elseif, else의 세 가지 유형이 있습니다. 조건문의 마지막에는 end를 붙여주어야 합니다. if는 가장 처음에 오고, elseif는 if의 조건에 맞지 않는 경우 다시 새로운 조건으로 검토하게 합니다. else는 if나 elseif에서 걸러지지 않은 경우들을 일괄적으로 처리합니다. == 반복문 == Matlab에서의 반복문은 for-end와, while-end가 있습니다. === for-end === for를 사용하면 인덱스로 사용하는 변수가 증가하는 동안, 여러번 반복 계산을 할 수 있습니다. for문에서도 마찬가지로 마지막에 end를 붙여줍니다. 예를 들면 다음과 같습니다. <source lang="octave"> for k= a:b:c % k라는 인덱스 변수가 a부터 시작해서 b씩 증가하면서 c가 될 때까지 반복 계산 ... end </source> ;예제 1 for 문을 이용해서 <math>1^2+4^2+7^2+10^2</math>를 계산하시오. <source lang="octave"> S=0; for k=1:3:10 S=S+k^2; end S </source> for_ex1.m으로 저장했을 때 출력은 다음과 같습니다. <source lang="octave"> >> for_ex1 S = 166 </source> ;예제 2 for 문을 이용해서 <math>\sum_{k=1}^n \frac{k}{2^k}</math>를 구하는 스크립트를 작성하고, n=5에 대해 실행해 보아라. <source lang="octave"> S=0; n=input('n?'); for k=1:n S=S+k/2^k; end S </source> for_ex2.m으로 저장했을 때 출력은 다음과 같습니다. <source lang="octave"> >> for_ex2 n?5 S = 1.7812 </source> ;예제 3 벡터 V = [5, 17, -3, 8, 0, -7, 12, 15, 20, -6, 6, 4, 2, 16]일 때, 양수이면서 3이나 5로 나누어 떨어지는 원소는 0으로 바꾸고, 음수이면서 -5보다 큰 원소는 1을 더해주는 스크립트를 만들어라. <source lang="octave"> V = [5, 17, -3, 8, 0, -7, 12, 15, 20, -6, 6, 4, 2, 16] n=length(V); for k=1:n if V(k)>0 && (rem(V(k),3)==0 | rem(V(k), 5)==0) V(k)=0; elseif V(k)<0 && V(k)>-5 V(k)=V(k)+1; end end V </source> for_ex3.m으로 저장 후 실행하면, <source lang="octave"> >> for_ex3 V = 5 17 -3 8 0 -7 12 15 20 -6 6 4 2 16 V = 0 17 -2 8 0 -7 0 0 0 -6 0 4 2 16 </source> === while-end === while-end문은 조건식이 틀리지 않는 한, 명령을 반복하는 반복문입니다. for-end와 마찬가지로 마지막에 end를 넣어주어야 합니다. ;예제 1 x=1부터 시작할 때, x가 10보다 작다면 계속 x를 세 배씩 증가시키는 스크립트를 작성하여라. <source lang="octave"> x=1; while x<=10 x=3*x end </source> while_ex1.m으로 저장 후 실행하면 <source lang="octave"> >> while_ex1 x = 3 x = 9 x = 27 </source> == 사용자 정의 함수 == 사용자 정의 함수란, Matlab 내에서 내장함수처럼 사용할 수 있는, 사용자가 만든 임의의 함수를 말합니다. 형식은 다음과 같습니다. function [output_arguments] = function_name(input_arguments) [output_arguments]에는 출력 인자들을, function_name은 만들 사용자 함수의 이름을 적어주면 되고, input_arguments에는 입력해주어야 하는 인자들을 넣어줍니다. 주의점은 m파일을 저장할 때 파일명을 function_name으로 해주어야 한다는 것입니다. ; 예제 [[w:화씨|화씨]] 온도를 섭씨 온도로 바꾸어주는 사용자 정의 함수를 만들어봅니다. 스크립트 편집기를 띄우고 다음과 같이 입력한 뒤, FtoC.m으로 저장해봅니다. <source lang="octave"> function C=FtoC(F) C=5*(F-32)/9; </source> 다시 Command Window로 돌아가서 변환하고 싶은 화씨온도를 함수에 입력해봅니다. <source lang="octave"> >> FtoC(200) ans = 93.333 >> FtoC(100) ans = 37.778 </source> == feval == 스크립트 내에서 feval(f, a)를 사용하면, 함수 f에 a값을 대입한 결과를 구할 수 있습니다. 주로 다음에 설명하는 익명함수와 함께 쓰입니다. == 익명함수 == 익명함수는 function이 들어가는 별도의 m파일을 만들지 않고, Command window에서 임시로 사용할 함수를 지정하는 것입니다. 형식은 다음과 같습니다. name = @(입력 인자) 수학식 예를 들어 <math>f(x) = x^3 - x^2 +1</math>라는 함수를 익명함수로 만든다면 f = @(x) x.^3 - x.^2 + 1 이라고 한 뒤에, 예를 들어 f(1)을 계산하고자 한다면 <source lang="octave"> >> f(1) ans = -1 </source> 이렇게 해주면 됩니다. == 각주 == <references/> == 참고 자료 == * 충북대 수치해석 강의
이 문서에서 사용한 틀:
틀:상태상자
(
원본 보기
)
Matlab/스크립트
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
한국어
보기
읽기
원본 보기
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보