제 2 장 프로그램...

42
2 프로그램 작성기법

Upload: others

Post on 24-Sep-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

제 2 장

프로그램 작성기법

관계 및 논리 연산자

• 관계연산자

• MATLAB 논리 데이터 형식: 1은 참, 0은 거짓 • 논리들은 관계 및 논리 연산자/함수들, 그리고 true 및 false 함수에 의하여 생성:

>> a = true a = 1 >> b = false b = 0 >> c = 1 c = 1

• MATLAB의 관계 연산자:

연산자 의미

== 대등

~= 같지 않음

< 작은

> 큰

<= 작거나 같은

>= 크거나 같은

• 논리연산자

• 스칼라 사이의 비교: 관계가 참이면 논리 1이, 거짓이면 논리 0이 생성:

>> 2 > 3 ans = 0

• |(OR) 연산자의 예:

>> 2 | 3 ans = 1

• 행렬-행렬 비교: 해당되는 원소 쌍들이 비교 • 행렬-스칼라 비교: 스칼라가 각 행렬원소와 비교

>> [2 3] < [3 2] ans = 1 0 >> x = -2:2; x >= 0 ans = 0 0 1 1 1 >> A = [1 2; 3 4]; B = 2*ones(2); >> A == B ans = 0 1 0 0 >> A > 2 ans = 0 0 1 1

• x(x >= 0): x의 0이 아닌 원소들만으로 구성되는 벡터를 제시 • x = -2:2 이라면

>> x = -2:2; >> x(x >= 0) ans = 0 1 2

• 논리배열을 사용하여 다른 배열로부터 원소들을 선택하는 경우: 두 배열의 크기가 같아야

• 논리배열에서 각각의 1에 해당하는 원소들이 선택되는 반면에 각각의 0에 해당되는 원소들은

선택되지 않는다.

• 배열 A와 B의 크기가 같으면서 원소들이 서로 동일한지를 알아보려면 isequal(A,B)를 이용:

>> A = [1 2; 3 4]; B = 2*ones(2); >> isequal(A,B) ans = 0

• 논리함수 isinf(A): 크기가 A와 같으며 A의 원소가 +, 혹은 - inf인 위치에 참(1)을 포함하고 그

렇지 않은 위치에는 거짓(0)을 포함하는 논리 배열을 반환

>> A = [1 inf; -inf NaN]; >> isinf(A) ans = 0 1 1 0

• 변수의 값에 NaN(부정치), inf(무한대), [ ](빈 배열, 혹은 빈 행렬)를 인정 • 이름이 is로 시작되는 MATLAB 내장 논리함수:

논리 is* 함수 기 능

ischar char 배열(문자열)인지를 테스트

isempty 빈 배열인지를 테스트

isequal 배열들이 서로 동일한지를 테스트

isfinite 유한 배열 원소들을 검지

isfloat 부동 소수점 배열(single, 혹은 double)인지를 테스트

isinf 무한 배열 원소들을 검지

isinteger 정수 배열인지를 테스트

islogical 논리 배열인지를 테스트

isnan NaN 배열 원소들을 검지

isnumeric 수치 배열(정수, 혹은 부동 소수점)인지를 테스트

isreal 실수 배열인지를 테스트

isscalar 스칼라 배열인지를 테스트

issorted 정렬된 벡터인지를 테스트

isvector 벡터 배열인지를 테스트

• A가 허수 부분을 갖지 않는다면 isreal(A)은 참 • A가 허수부를 갖는지의 여부를 결정:

>> a = 1; >> b = complex(1,0); >> c = 1+0i; >> [a b c] ans = 1 1 1 >> [isreal(a), isreal(b), isreal(c)] ans = 1 0 1

• 논리 연산자:

연산자 의미

& 논리 and

&& 단락(短絡) 논리 and

| 논리 or

|| 단락(短絡) 논리 or

~ 논리 not

xor 배타적 논리 or

all 벡터의 모든 원소들이 0이 아니면 참

any 벡터의 임의의 원소가 0이 아니면 참

• &, | 및 ~ 연산자: 인수들 가운데 하나가 행렬이면 논리 0과 논리 1들의 행렬을 생성

• all 함수를 벡터에 적용: 그 벡터의 모든 원소들이 0이 아니면 1을, 그렇지 않으면 0을 반환

• any 함수: “모든”을 “임의의”로 바꾸어 all 함수와 동일하게 정의

>> x = [-1 1 1]; y = [1 2 -3]; >> x>0 & y>0 ans = 0 1 0 >> x>0 | y>0 ans = 1 1 1 >> xor(x>0,y>0) ans = 1 0 1 >> any(x>0) ans = 1 >> all(x>0) ans = 0

• xor: xor(a,b)와 같이 함수로 호출

• &&와 ||: 스칼라 표현에 대해서만 작용, &이나 |보다 우선적으로 사용

>> any(x>0) && any(y>0) ans = 1 >> x>0 && y>0 ??? Operands to the || and && operators must be convertible to logical scalar values.

• expr1 && expr2에서 expr1이 거짓이면 expr2는 평가되지 않는다.

• expr1 || expr2에서 expr1이 참이면 expr2는 평가되지 않는다.

• 산술, 관계 및 논리 연산자들의 우선순위:

우선순위 연산자

1(가장 높음) 괄호()

2 전치(.‘), 거듭제곱(.^), 켤fp복소수 전치('), 행렬의 거듭제곱(^)

3 단항 +, 단항 -, 논리 부정(~)

4 곱(.*), 오른쪽 나누기(./), 왼쪽 나누기(.\), 행렬 곱(*), 행렬 오른쪽 나누기(/), 행렬 왼쪽 나누기(\)

5 더하기(+), 빼기(-)

6 콜론 연산자(:)

7 작은(<), 같거나 작은(<=), 큰(>), 같거나 큰(>=), 동일한(==), 같지 않은(~=)

8 논리 and (&)

9 논리 or (|)

10 논리 단락 and (&&)

11(가장 낮음) 논리 단락 or (||)

• 행렬의 경우 all로부터 all이 각 열에 적용된 결과를 포함하는 행 벡터가 생성

• all(all(A==B)): 행렬 A와 B가 동일한 것인지의 여부를 시험하는 하나의 방법

• any(any(A==B)): A와 B가 임의의 동일한 원소들을 갖는 경우 1의 값을 가지며 그렇지 않으면 0

• find: 벡터의 0이 아닌 원소들에 해당하는 지수들을 반환

>> x = [-3 1 0 -inf 0]; >> f = find(x) f = 1 2 4

• find의 결과는 다시 그 벡터의 원소들을 추출하는 데에 사용 가능:

>> x(f) ans = -3 1 -Inf

• find를 이용한 유한원소의 획득:

>> x = [-3 1 0 -inf 0]; >> x(find(isfinite(x))) ans = -3 1 0 0

• 음의 성분들을 0으로 대체:

>> x(find(x < 0)) = 0 x = 0 1 0 0 0

• find를 이용하여 B의 해당되는 위치의 원소들보다 작은 A의 원소들에 0을 설정하는 방법:

>> A = [4 2 16; 12 4 3], B = [12 3 1; 10 -1 7] A = 4 2 16 12 4 3 B = 12 3 1 10 -1 7 >> f = find(A<B) f = 1 3 6 >> A(f) = 0 A = 0 0 16 12 4 0

프로그램 흐름의 제어

• 4가지 흐름제어 구조: if, for, while, switch

•if 문

• 가장 간단한 형태:

if (조건) (문장) end

• if 문장 다음에 다른 문장이 더 이어지면 콤마를 이용하여 if를 그다음 문장과 분리:

if x > 0, x = sqrt(x); end

• (조건)이 거짓일 경우에만 수행되는 문장: else 다음에 위치

v = exp(1); if 2^v > v^2 disp('2^v is bigger') else disp('v^2 is bigger') end

• elseif를 이용하여 하나, 혹은 그 이상의 조건들을 추가(else와 if 사이에 빈 칸이 없어야 한다):

if isnan(x) disp('Not a Number') elseif isinf(x) disp('Plus or minus infinity') else disp('A floating point number') end

• for 루프

• 간략하고 빠른 코드의 작성에 관심이 있는 프로그래머: 가능한 한 for 루프의 사용을 회피

for (변수) = (표현) (문장) end

• 대괄호를 사용한 (표현)의 정의:

>> for x = [pi/6 pi/4 pi/3], disp([x sin(x)]), end 0.5236 0.5000 0.7854 0.7071 1.0472 0.8660

• (i,j) 원소가 일때 i/j인 5 x 5 행렬 A를 생성:

n = 5; A = eye(n); for j = 2:n for i = 1:j-1 A(i,j) = i/j; A( j,i) = i/j; end end

• continue는 for 루프의 나머지 문장들을 그냥 지나치게 하여 루프의 수행을 즉시 다음번 반복 단계로 이동 • 5에서 10까지의 정수들만을 나타내어 주는 예:

for i = 1:10 if i < 5, continue, end disp(i) end

• (표현)이 참인 한 (문장)이 수행 • 0이 아닌 가장 작은 부동 소수점 수를 근사하는 보기:

x = 1; while 1 xmin = x; x = x/2; if x == 0, break, end end xmin xmin = 4.9407e-324

• break로 종료: 프로그램의 제어를 해당되는 end 다음의 첫 번째 문장으로 전달

• while 1, ..., end와 같은 무한루프의 형성: 루프의 처음부분에 수행중단 테스트를 두는 것이

편리하지 않을 경우에 유용

• break는 for 루프의 중단에도 사용 가능

• 중첩된 루프에서 break는 바로 윗 단계의 루프로 옮겨가도록 하여준다.

• while 루프

• 형태:

while (표현) (문장) end

• while을 사용한 무한수열 의 합:

% infsum.m : 무한수열의 합 n = 1; oldsum = -1; newsum = 0; while newsum > oldsum oldsum = newsum; newsum = newsum + n^(-4); n = n + 1; end newsum

• 이 파일의 수행결과:

>> infsum newsum = 1.0823

•switch 문

• switch 제어구조: “switch (표현)” 다음에 일련의 “case (표현) (문장)”들이 이어지는 것으로 구성 • 경우에 따라 “otherwise (문장)”과 end로 종료 • switch의 (표현)이 평가되고 그 결과와 부합되는 첫 번째 case (표현) 다음의 (문장)이 수행 • case들 가운데 어느 것도 평가 결과와 부합되지 않으면 otherwise 다음의 (문장)이 수행 • 입력에 대하여 세 가지 경우들을 구별하는 예:

function y = count(x) switch x case 1 y = 'one' case 2 y = 'two' otherwise y = 'many' end

• 세 가지 p 값에 대하여 벡터 x의 p-놈(norm)(즉 norm(x,p))을 계산하는 예: switch p case 1 y = sum(abs(x)); case 2 y = sqrt(x'*x); case inf y = max(abs(x)); otherwise error('p must be 1, 2 or inf.') end

• case 다음의 (표현)은 괄호로 싸인 값들의 목록: switch의 (표현)은 목록의 임의의 값과 대조:

x = input('Enter a real number: '); switch x case {inf,-inf} disp('Plus or minus infinity') case 0 disp('Zero') otherwise disp('Nonzero and finite') End

• case 그룹 표현이 일단 부합되고 문장이 수행되면 흐름의 제어는 switch 후의 첫 번째 문장으

로 이동 - break 문장의 사용은 불필요

셀과 구조체

•셀

• “배열의 배열”로서 셀 배열의 원소들은 각기 다른 데이터 형식과 다른 크기를 가질 수 있다.

• 명령어 cell은 빈 셀 배열을 생성

• 셀 배열의 생성: 소괄호나 중괄호를 이용

>> A(1,1) = {'박영수'}; A(1,2) = {2008011254}; >> A(2,1) = {'김철수'}; A(2,2) = {2008010231}; >> A A = '박영수' [2.0080e+009] '김철수' [2.0080e+009] >> A{1,1} = {'박영수'}; A{1,2} = {2008011254}; >> A{2,1} = {'김철수'}; A{2,2} = {2008010231}; >> A A = {1x1 cell} {1x1 cell} {1x1 cell} {1x1 cell}

• celldisp 함수: 셀 배열의 내용을 확인

>> celldisp(A) A{1,1}{1} = 박영수 A{2,1}{1} = 김철수 A{1,2}{1} = 2.0080e+009 A{2,2}{1} = 2.0080e+009

• cellplot 함수: 셀 배열을 그림으로 보여주는 함수

>> cellplot(A)

• 2 x 2 셀 배열을 설정하는 보기:

>> C = {1:3, pi; magic(2), 'A string'} C = [1x3 double] [ 3.1416] [2x2 double] 'A string'

• 셀 배열 원소의 획득:

>> C{2,1} ans = 1 3 4 2 >> C{2,1}(1,2) ans = 3

•구조체

• C와 같은 프로그램 언어들에서의 구조체(structure)와 유사 • 배열의 원소들에 이름을 붙일 수 있으며 원소들은 각기 다른 형태와 크기를 가질 수 있다. • 구조체를 만드는 한 가지 방법: struct를 사용

>> sa = struct('data', [1 4 9 16 25], 'description', 'perfect squares') sa = data: [1 4 9 16 25] description: 'perfect squares'

•“필드”에 접속: sa.data와 같이 배열의 이름과 필드의 이름을 타이프하고 이들 사이를 마침표로 구분

>> sa = struct; >> sa.data = [1 4 9 16 25]; >> sa.description = 'perfect squares' sa = data: [1 4 9 16 25] description: 'perfect squares'

• 구조체의 배열: 데이터베이스 등을 관리할 때 편리 • 보기: “name", 'ID", "mark"와 같은 3개의 필드를 가지며 원소가 30개인 student 구조체 배열의 생성

>> student(30) = struct('name','이영수','ID',2008012316','mark',[87 98 76 90]); >> student(2) ans = name: [] ID: [] mark: [] >> student(5).name = '김철수' student = 1x30 struct array with fields: name ID mark

• cell2struct와 struct2cell: 셀 배열과 구조체 간의 전환을 수행 • num2cell: 주어진 수치 배열과 같은 크기의 셀 배열을 생성 • 동적 구조체의 보기: marks는 4회에 걸친 학생들의 시험성적을 나타내는 구조체

>> marks.Lee_YoungSoo.test(1:4) = [87 98 76 90]; >> marks.Hong_KillDong.test(1:4) = [96 91 88 75]; >> marks.Park_KiYoon.test(1:4) = [90 87 69 94];

• 함수 M-파일 testmark.m은 입력된 학생에 대한 평균점수를 계산:

% testmark.m: Dynamic structure의 사용 예 function avg = testmark(marks,student,first,last) for i = first:last scores(i) = marks.(student).test(i); end avg = sum(scores)/(last-first+1);

• 수행 결과:

>> testmark(marks,'Park_KiYoon',1,4) ans = 85 >> testmark(marks,'Lee_YoungSoo',1,4) ans = 87.7500 >> testmark(marks,'Hong_KillDong',2,3) ans = 89.5000

• 구조체를 이용한 데이터베이스의 생성: 각 지역의 기상측정 시각과 온도(

데이터 표현의 보기

) 및 압력(mmbar)

>> meteo = struct('City',{'서울','대전','부산'},... 'Time',{9 10 12},... 'Temperature',{27 29 31},... 'Pressure',{1013.2 1013.5 1013.1}) meteo = 1x3 struct array with fields: City Time Temperature Pressure >> meteo(1) ans = City: '서울' Time: 9 Temperature: 27 Pressure: 1.0132e+003 >> meteo(3) ans = City: '부산' Time: 12 Temperature: 31 Pressure: 1.0131e+003

문자열

• 문자열이나 문자 배열(char 배열): MATLAB에서 내부적으로 해당되는 ASCII 값들에 의하여 나타나는 문자들의 배열

>> s = 'ABCabc' s = ABCabc >> sd = double(s) sd = 65 66 67 97 98 99 >> s2 = char(sd) s2 = ABCabc

• 2차원 문자배열: 대괄호를 이용하여 생성

>> subjects = ['Chemistry';'Physics '] subjects = Chemistry Physics

• char 함수: 문자 배열의 생성에 이용

>> W = char('Kinetic energy','Potential energy', 'Momentum','질량') W = Kinetic energy Potential energy Momentum 질량

• 텍스트 데이터를 셀 배열로 저장:

>> S = {'Kinetic energy';'Potential energy'; 'Momentum';'질량'} S = 'Kinetic energy' 'Potential energy' 'Momentum' '질량'

• 문자 배열을 셀 배열로, 혹은 문자의 셀 배열을 문자 배열로 자유로이 전환:

>> S = cellstr(W); >> W = char(S);

• 문자열의 각 문자는 2 바이트를 차지

• 문자열을 double 배열로 전환: 각 원소당 8 바이트를 차지하는 ASCII 값들의 배열이 생성

• int2str, num2str, 혹은 sprintf 들을 이용하여 수치변수 값들의 포맷을 변형시켜 문자열을 생성

>> v = sin((1:3)*pi/6) v = 0.5000 0.8660 1.0000 >> num2str(v) ans = 0.5 0.86603 1 >> q = reshape(1:9,3,3) q = 1 4 7 2 5 8 3 6 9 >> int2str(q) ans = 1 4 7 2 5 8 3 6 9 >> size(ans) ans = 3 7

>> num2str(pi,2) % 자릿수를 지정(2자리) ans = 3.1 >> num2str(pi,15) ans = 3.14159265358979 >> num2str(pi,'%12.5e') % 출력 포맷을 지정 ans = 3.14159e+000

• 함수 sprintf는 보통 포맷 지정자와 함께 사용

• 여러 가지 포맷 형태에 따른 sprintf 출력:

sprintf와 포맷지정자 출력

sprintf('%d',round(pi)) 3

sprintf('%d',pi) 3.141593e+000

sprintf('%s','hello') hello

sprintf('The array is %dx%d.',4,5) The array is 4x5.

sprintf('\n') (줄 마침 문자)

• 문자열의 명령어 이용:

>> str = 'sin'; >> t = linspace(0,2*pi); >> q = feval(str,t); >> plot(t,q)

0 1 2 3 4 5 6 7-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

• strcat 함수: 두 문자열들을 보다 긴 하나의 문자열로 연결 >> strcat('Hello',' world') ans = Hello world >> ['Hello ' 'world'] ans = Hello world

• strcmp: 두 문자열들을 서로 비교 - strcmp(s,t)로부터는 s와 t가 동일하면 1(참), 그렇지 않 으면 0(거짓)이 반환 • strcmpi: 대문자와 소문자를 대등한 것으로 간주

>> strcmp('Matlab6','matlab7') ans = 0 >> 'Matlab6'=='Matlab7' ans = 1 1 1 1 1 1 0

• 관계 연산자: 길이가 같은 문자열들만을 비교하는 데에 사용. 어떤 문자가 서로 일치하는 지를 보여주는 논리벡터를 반환 • 하나의 문자열이 다른 문자열에 포함되는지를 테스트하려면 findstr을 이용: findstr(s,t)는 더 짧은 문자열이 그보다 긴 문자열 속에 나타나는 위치들의 지수들로 이루어지는 벡터를 반환:

>> findstr('bc','abcd')

ans = 2 >> findstr('abacad','a') ans = 1 3 5

• 주어진 문자열에서 빈 칸과 글자를 구분:

>> S = 'I go now'; >> isspace(S) ans = 0 1 0 0 1 0 0 0 >> isletter(S) ans = 1 0 1 1 0 1 1 1

• strrep: 하나의 문자열을 다른 문자열로 대체, 하나의 문자를 빈 칸으로 대체

>> S = 'I go now'; >> strrep(S,'go','am') % go를 am으로 대체 ans = I am now >> strrep(S,'go','eat snakes') ans = I eat snakes now >> strrep(S,'o','e') % o를 e로 대체 ans = I ge new >> strrep(S,'o',' ') % o를 빈 칸으로 대체 ans = I g n w

다차원 배열

• 다차원 배열: 행렬의 경우와 유사하게 정의하고 처리

• 불규칙 정규 숫자들의 3 x 2 x 2 배열

>> A = randn(3,2,2) A(:,:,1) = 1.5550 -0.5901 -0.5399 0.0253 2.0988 0.7866 A(:,:,2) = -0.2387 1.1912 1.6929 0.1464 -0.1882 -1.6969

• 기존의 2차원 배열에서 원소들에 고차원 요소를 할당함으로써 차원을 확장

>> B = [1 2 3; 4 5 6]; >> B(:,:,2) = ones(2,3) B(:,:,1) = 1 2 3 4 5 6 B(:,:,2) = 1 1 1 1 1 1

• ndims: 차원의 수를 확인 • size: 각 차원의 원소들의 수를 반환

>> ndims(B) ans = 3 >> size(B) ans = 2 3 2

• cat: 한 문장에서 원소들을 나열하여 다차원 배열을 구성 - 이 함수에 대한 첫 번째 인수(아래

보기에서 3)는 나머지 인수들로 이루어지는 배열들이 연결되는 차원을 지정:

>> C = cat(3,[1 2 3; 0 -1 -2],[-5 -3 -1; 10 5 0]) C(:,:,1) = 1 2 3 0 -1 -2 C(:,:,2) = -5 -3 -1 10 5 0

• 원소 각각에 작용하는 함수: 연산, 논리, 그리고 관계 연산자들과 마찬가지로 다차원 배열에 적용

• 예: B-ones(size(B)), B.*B, exp(B), 2.^B, 그리고 B > 0 들로부터는 모두 예상되는 결과들이 반환 >> sum(B) ans(:,:,1) = 5 7 9 ans(:,:,2) = 2 2 2 >> sum(B,3) ans = 2 3 4 5 6 7

• 다차원 배열의 처리를 수행하는 함수:

함수 기능

cat 배열들을 연결

ndims 차원들의 수

ndgrid 다차원 함수들과 안짐작을 위한 배열을 생성

permute 배열 차원을 순열

ipermute 배열 차원을 역순열

shiftdim 차원을 전이

squeeze 단독 차원을 제거

global 변수

• 스크립트 M-파일 변수: Workspace(작업공간)에 기억되어 명령어 창, 스크립트 M-파일 내에

서 모두 구별하지 않고 사용

• 함수 M-파일에서 사용되는 변수: 작업공간에 남지 않으며 함수 내에서 작업공간에 있는 변

수를 참조 불가

• 함수 내에서 작업공간의 변수를 자유롭게 읽어내어 사용하고 싶은 경우: 그 변수를 global 변

수라고 선언

• global 변수의 선언: 작업공간과 함수 M-파일 두 부분에서 모두 선언

global x y

Persistent 변수

• 함수 내에서만 내부적으로 변수값을 유지하고 싶은 경우: 그 변수를 persistent 변수로 선언

• persistent 키워드는 C 언어 등의 static 변수와 같은 기능을 수행

• persistent 선언: 사용하는 함수 내에서만 수행

• persistent 변수의 초기치는 함수 내에 변수가 정의되어 있는지의 여부로 판단 – 구체적으로

는 isempty 함수에 의해 판별

persistent x y

if(isempty(x)) x=0; end

입력 및 출력인수의 분석

• 사용자는 자신의 M-파일들에서 명령어 nargin, nargout, varargin, varargout들을 사용하여 다

양한 수의 입력 및 출력인수들을 처리

• 다른 형태의 입력인수들을 처리하기 위해 isnumeric, ischar 등과 같은 명령어들을 사용 가능

• 함수 M-파일이 수행되면 함수 nargin과 nargout은 각각 명령어 라인에서 지정된 입력 및 출

력 인수들의 수를 제시

• nargin 사용의 예시:

function s = add(x, y, z) if nargin < 2 error('적어도 두 개의 입력인수들이 필요함.') end if nargin == 2 s = x + y; else s = x + y + z; end

• 더 많은 수의 가능한 입력의 허용: varargin을 이용

function s = add(varargin) s = sum([varargin{:}]);

• 이 예에서 모든 입력인수들은 셀 배열 varargin에 할당

• varargin{:}: 콤마로 구분되는 입력인수들의 목록을 구성

• 입력가운데 어떤 것이 수치값을 갖지 않으면 오류 메시지가 display: isnumeric을 사용

function s = add(varargin)

if ~isnumeric([varargin{:}])

error('입력들은 부동 소수점 수이어야 한다.')

end

s = sum([varargin{:}]);

프로그램의 편집

• Command Window에서의 편집

• 명령어 라인, 혹은 편집창에서 프로그램이 두 줄 이상으로 길어질 경우 세 개의 마침표(...)를

이용하여 프로그램을 여러 줄로 이어 작성:

>> x = 1 + 1/2 + 1/3 + 1/4 + 1/5 + ... 1/6 + 1/7 + 1/8 + 1/9 + 1/10 x = 2.9290

• 명령어 창에서의 편집 키와 명령어:

키 대등한 제어키 기능

위쪽 화살표() Ctrl-p 이전 라인을 호출

아래쪽 화살표() Ctrl-n 다음 라인을 호출

왼쪽 화살표() Ctrl-b 한 글자 뒤로 이동

오른쪽 화살표() Ctrl-f 한 글자 앞으로 이동

Ctrl 왼쪽 화살표 Ctrl-l 한 단어 왼쪽으로 이동

Ctrl 오른쪽 화살표 Ctrl-r 한 단어 오른쪽으로 이

Home Ctrl-a 라인의 시작부분

End Ctrl-e 라인의 끝부분

Esc Ctrl-u 라인 지우기

Del Ctrl-d 커서가 있는 글자를 삭

뒤로가기 (backspac

e) Ctrl-h 이전 글자를 삭제

Ctrl-k 라인 끝부분까지 삭제

Insert 삽입 모드로 전환

Shift-home 라인 시작부분까지 선

Shift-End 라인 끝부분까지 선택

• 배열 편집기

• MATLAB 작업창의 왼쪽에서 Workspace 탭을 누른 다음 편집을 원하는 변수 이름을 두 번 클릭:

Array Editor(배열 편집기) 창에 해당변수에 대한 스프래드쉬트 형태가 display

• 혹은 openvar('A')를 입력: A에 대한 Array Editor가 호출

• 변수의 저장과 호출

• 변수들의 저장: save filename을 입력 • 이와 달리 File-Save Workspace As 메뉴 옵션을 선택 가능 • 변수 A와 x 만을 저장:

>> save filename A x

• load filename: filename.mat으로부터 변수들을 호출

• MAT-파일: 다른 컴퓨터 시스템에서 수행되는 MATLAB들 사이에서 주고받을 수 있다.

• 가져오기 함수들에 대한 그래픽 접속기: File-Import Data 메뉴 옵션, 혹은 uiimport를 입력하

여 접근할 수 있는 Import 마법사

• 보고서에 삽입하기 위한 MATLAB 출력의 확보: diary를 이용

• diary filename: 모든 이어지는 입력 및 텍스트 출력이 지정된 파일에 복사

• diary 기능의 제거: diary off • disp: 변수의 이름이나 ans가 나타나지 않고 변수나 표현의 값을 프린트

>> A = eye(2); disp(A) 1 0 0 1 >> disp('Result:'),disp(1/7) Result: 0.1429

•운영체제와의 접속

• 컴퓨터 운영체제와 작용하기 위한 명령어: cd(디렉토리 바꾸기), copyfile(파일 복사), mkdir(디

렉토리 만들기), pwd(작업 디렉토리를 프린트), dir이나 ls(디렉토리 목록), delete(파일 지우기)

• 명령어 앞에 느낌표(!): 운영체제로 이동

• 예: !emacs myscript.m를 입력하면 Emacs 편집기를 이용하여 myscript를 편집 가능

• 정보 찾기

• 정보제공 명령어:

명령어 제공정보 및 기능

bench 사용자의 컴퓨터 속도를 테스트하기 위한 견주기(benchmark)

demo 실증 프로그램 모음

info The MathWorks 사에 대한 정보

ver MATLAB 및 툴박스들의 버전 및 발매일자

version MATLAB의 버전 및 발매일자

whatsne

w

whatsnew는 Help 탐색기에서 발매공고문을 불러온다. whatsnew

matlab은 MATLAB에 대한 readme 파일을 보여 주는데 이 파일에서

는 가장 최근 버전에 도입된 새로운 기능들을 설명하여 준다 .

whatsnew toolbox는 지정된 툴박스에 대한 readme 파일을 보여준다.