Chapter 1 배열 만들기

-1차원 배열(벡터)

행벡터: 사각 대괄호 내의 행의 원소 입력. 빈칸과 콤마로 원소분리.

열벡터: 세미콜론(;)으로 원소를 분리 혹은 왼쪽 대괄호([)를 입력하고 첫 번째

원소를 쓰고 Enter 두 번째 원소입력 Enter를 누르고 마지막 원소 입력                   후 오른쪽 대괄호(]) 입력 후 Enter.

[예제]

>> yr=[ 1984 1986 1988 1990]

yr = 1984        1986        1988        1990

>> pop=[127; 130; 136; 145]

pop =127

130

136

145

>> pntAH=[2, 4, 5]

pntAH =

2     4     5

>> pntAV=[2

4

5]

pntAV =

2

4

5

일정한 간격으로 벡터 만들기:

첫 번째 항이 m, 간격 q, 마지막 항 n인 벡터

variable_name=[m:q:n] 혹은 variable_name=m:q:n

[예제]

>> x=[1:2:13]

x =

1     3     5     7     9    11    13

>> y=[1.5:0.1:2.1]

y =

1.500000000000000   1.600000000000000   1.700000000000000   1.800000000000000   1.900000000000000   2.000000000000000   2.100000000000000

>> z=[-3:7]

z =

-3    -2    -1     0     1     2     3     4     5     6     7

>> xa=[21:-3:6]

xa =

21    18    15    12     9     6

첫 번째 원소가 xi, 마지막 원소가 xf인 벡터는 원소의 개수가 n은 linspace에 의해 만들어진다.

variable_name=linspace(xi,xf,n)

[예제]

>> va=linspace(0,8,6)

va =

0   1.600000000000000   3.200000000000000   4.800000000000000   6.400000000000000   8.000000000000000

>> vb=linspace(30,10,11)

vb =

30    28    26    24    22    20    18    16    14    12    10

>> vc=linspace(0,10)

-2차원 배열(행렬)

[eqn: m times n] 행렬은 m개의 행과 n개의 열을 가진 행렬이다. [eqn: m times n]은 행렬의 크기라고 한다.

왼쪽 괄호[ 를 입력하고, 그 다음에 원소들을 여백이나 콤마로 나누어 첫 행을 입력하고

다음행을 입력하기 위해 세미콜론; 을 입력하고 오른쪽 괄호]를 마지막 행의 끝부분에 입력한다.

variable_name=[ 1st row elements; 2nd row elements; 3rd row elements; .....;

last row elements]

[예제]

>> A=[ 5 25 43; 4 76 81; 2 5 8]

A =

5    25    43

4    76    81

2     5     8

>> cd=6; e=3; h=4;

>> Mat=[e, cd*h, cos(pi/3); h^2, sqrt(h*h/cd),14]

Mat =

3.0000   24.0000    0.5000

16.0000    1.6330   14.0000

>> B=[1:2:11; 0:5:25; linspace(10,60,6); 67 2 43 68 4 13]

B =

1     3     5     7     9    11

0     5    10    15    20    25

10    20    30    40    50    60

67     2    43    68     4    13

zeros,ones,eye 명령들:

zeros(m,n)와 ones(m,n)명령은 m행과 n 열 행렬의 모든 원소들은 각각 0과 1의 수들로

이루어진다. eye(n)은 [eqn: n times n] 정방행렬의 대각선 원소들이 1이고 나머지는 0이다(단위행렬).

[예제]

>> A=zeros(3,4)

A =

0     0     0     0

0     0     0     0

0     0     0     0

>> B=ones(4,3)

B = 1     1     1

1     1     1

1     1     1

1     1     1

>> C=eye(4)

C = 1     0     0     0

0     1     0     0

0     0     1     0

0     0     0     1

전치연산: 전치연산은 벡터일 경우, 하나의 행(열)벡터를 열(행)벡터로 전환한다. 행렬인 경우 행과열을 바꾸는 전치행렬을 구한다. 전치연산은 인용부호‘ 를 사용한다.

[예제]

>> aa=[3 8 1]

aa =

3     8     1

>> bb=aa'

bb =

3

8

1

>> A=[ 1 2 3 4; 5 6 7 8; 9 10 11 12]

A =

1     2     3     4

5     6     7     8

9    10    11    12

>> B=A'

B =

1     5     9

2     6    10

3     7    11

4     8    12

-배열주소지정

벡터: 벡터 안에서 원소의 주소는 그 원소가 행(혹은 열)안에서의 차지하는 위치를 나타낸다. ve라는 벡터, ve(k)는 원소를 위치 k로 지정한다.

[예제]

>> VCT=[35 36 48 29 4 90 55]

VCT =

35    36    48    29     4    90    55

>> VCT(6)

ans =

90

>> VCT(2)+VCT(7)

ans =

91

>> VCT(5)^VCT(5)-sqrt(VCT(7))

ans =

248.5838

행렬: 행렬 A(a,b)는 행 a와 열 b에 원소를 지정

[예제]

>> MAT=[ 1 2 3 4; 5 6 7 8; 9 10 11 12]

MAT =

1     2     3     4

5     6     7     8

9    10    11    12

>> MAT(3,1)

ans =

9

>> MAT(3,1)=20

MAT =

1     2     3     4

5     6     7     8

20    10    11    12

>> MAT(2,4)-MAT(1,2)

ans =

6

-콜론 사용

콜론(:)은 벡터나 행렬에서 원소들의 범위를 지정하는데 사용된다.

벡터: va(:): 벡터 va의 모든 원소를 나타낸다.

va(m:n): 벡터 va의 m번째 원소에서 n번째 원소까지를 나타낸다.

[예제]

>> v=[ 1 3 5 7 9 11 13 15]

v =

1     3     5     7     9    11    13    15

>> u=v(3:7)

u =

5     7     9    11    13

행렬:

A(:,n): 행렬 A의 n번째 열에 있는 모든 원소를 모든 행으로 정의

A(n,:): 행렬 A의 n번째 행에 있는 모든 원소를 모든 열으로 정의

A(:,m:n): 행렬 A의 m번째에서 n번째 열에 있는 모든 원소

A(m:n,:): 행렬 A의 m번째에서 n번째 행에 있는 모든 원소

A(m:n,p:q): 행렬 A의 m번째에서 n번째 행, p열에서 q 열까지에 있는 모든 원소

[예제]

>> A=[ 1 3 5 7 9 11; 2 4 6 8 10 12; 3 6 9 12 15 18; 4 8 12 16 20 24; 5 0 15 20 25 30]

A =

1     3     5     7     9    11

2     4     6     8    10    12

3     6     9    12    15    18

4     8    12    16    20    24

5     0    15    20    25    30

>> B=A(:,3)

B =

5

6

9

12

15

>> C=A(2,:)

C =

2     4     6     8    10    12

>> D=A(2:4,:)

D =

2     4     6     8    10    12

3     6     9    12    15    18

4     8    12    16    20    24

>> E=A(1:3,2:4)

E =

3     5     7

4     6     8

6     9    12

[예제]

>> v=4:3:34

v =

4     7    10    13    16    19    22    25    28    31    34

>> u=v([3,5,7:10])

u =

10    16    22    25    28    31

>> A=[10:-1:4; ones(1,7);2:2:14; zeros(1,7)]

A =

10     9     8     7     6     5     4

1     1     1     1     1     1     1

2     4     6     8    10    12    14

0     0     0     0     0     0     0

>> B=A([1,3],[1,3,5:7])

B =

10     8     6     5     4

2     6    10    12    14

-벡터,행렬에 원소 더하기

>> DF=1:4

DF =

1     2     3     4

>> DF(5:10)=10:5:35	% 5번째부터 여섯 개의 원소를 더한다.%

DF =

1     2     3     4    10    15    20    25    30    35

>> AD=[ 5 7 2]

AD =

5     7     2

>> AD(8)=4   % 값이 8번째 4가 나타나고 네 번째부터 일곱 번째까지는 0으로 나타난다

AD =

5     7     2     0     0     0     0     4

>> AR(5)=24	% 새로운 벡터의 다섯 번째가 24이고 첫 번째부터 4번째까지는 0.

AR =

0     0     0     0    24

[예제]

>> RE=[3 8 1 24]

RE =

3     8     1    24

>> GT=4:3:16;

>> KNH=[RE GT]

KNH =

3     8     1    24     4     7    10    13    16

>> KNV=[RE';GT']

KNV =

3

8

1

24

4

7

10

13

16

>> E=[1 2 3 4; 5 6 7 8]

E =

1     2     3     4

5     6     7     8

>> E(3,:)=[10:4: 22]	% E의 세 번째 행에 벡터 10 14 18 22 추가

E =

1     2     3     4

5     6     7     8

10    14    18    22

>> K=eye(3)

K =

1     0     0

0     1     0

0     0     1

>> G=[E K]	% 행렬K를 E에 추가. E와 K의 행의수가 같아야 한다.

G =

1     2     3     4     1     0     0

5     6     7     8     0     1     0

10    14    18    22     0     0     1

>> AW=[2 6 9; 8 5 11]

AW =

2     6     9

8     5    11

>> AW(4,5)=17

AW =

2     6     9     0     0

8     5    11     0     0

0     0     0     0     0

0     0     0     0    17

>> BG(3,4)=15	% [eqn: 3 times 4] 행렬을 만들고 3행4열을 제외한 모든 원소는 0으로 나타난다.

BG =

0     0     0     0

0     0     0     0

0     0     0    15

-벡터,행렬에 원소 삭제하기

[예제]

>> kt=[2 4 6 8 10 12 14 16 18 20]

kt =

2     4     6     8    10    12    14    16    18    20

>> kt(6)=[]	% 6번째 원소 소거

kt =

2     4     6     8    10    14    16    18    20

>> kt(3:6)=[]	% 3번째부터 6번째 원소 소거

kt =

2     4    16    18    20

>> mtr=[ 1 2 3 4 5; 2 4 6 8 10; 3 6 9 12 15]

mtr =

1     2     3     4     5

2     4     6     8    10

3     6     9    12    15

>> mtr(:,2:4)=[]	% 2번째부터 4번째 열을 소거

mtr =

1     5

2    10

3    15

-배열 처리를 위한 내장함수

length(A): 벡터 A의 원소갯수를 구한다.

size(A): 행렬A의 크기를 구한다.

diag(v): v가 벡터 일때 대각선이 v의 원소를 대각원소로하는 대각행렬

diag(A): A가 행렬인 경우, A의 대각원소를 구한다.

[예제]

>> A=[ 5 9 2 4];

>> length(A)

ans =

4

>> A=[ 1 2 3 4; 5 6 7 8];

>> size(A)

ans =

2     4

>> v=[7 4 2];

>> A=diag(v)

A =

7     0     0

0     4     0

0     0     2

>> A=[1 2 3; 4 5 6; 7 8 9];

>> vec=diag(A)

vec =

1

5

9

* who명령은 현재 메모장에 있는 변수를 나열

*whos명령은 현재 메모장에 있는 변수들의 크기와 함께 나열+

문자열은 문자의 배열이다. 단일 인용부호 내의 문자들을 입력으로 생성된다.

[예제]

>> a='FRty 8'

a =

FRty 8

>> A='My name is Kwan Pyo Ko'

A =

My name is Kwan Pyo Ko

변수가 문자열로 정의했을때, 문자열의 문자는 숫자로 배열에 저장된다. 공간에 포함된 각 문자는 배열에서 한 원소이며 원소의 수는 문자의 수와 같다.

>> A(4)

ans =

n

>> A(12)

ans =

K

>> A(12:15)='June'

A =

My name is June Pyo Ko

문자열은 행렬로 대치시킬 수 있다. 내장 함수 char를 사용하여 문자열을 행렬로 바꾼다.

variable_name=char('string1','string2','string3')

>> Info=char('Student Name:','John smith','Grade','A+')

Info =

Student Name:

John smith

Grade

A+

>> x=100

x =

100

>> y='100'

y =

100

>> x^2    %변수 x는 수식표현 가능

ans =

10000

>> y^2    %변수 y는 수식으로 사용할 수 없다.

??? Error using ==> mpower

Matrix must be square.

Homework:

1. 다음 성분을 가지는 열벡터를 구하라: [eqn: 32, 81,e^{2.5}, cos(pi/3),12]

2. 첫 번째 원소는 1이고, 마지막 원소는 33인 원소들의 사이에서 2씩 증가하는 행벡터를 구하라.

3. 첫 번째 원소는 7이고 마지막 원소가 40인 같은 간격의 원소의 개수가 15인 행벡터를 구하라.

4. 다음과 같은 행렬 A가 있다.

A = 1     2     3     4     5

2     4     6     8    10

3     6     9    12    15

a) 5개의 원소를 가지며 A의 두 번째 행의 원소를 포함하고 있는 행벡터 va를 구하라.

b) 3개의 원소를 가지며 A의 네 번째 열의 원소를 포함하고 있는 행벡터 vb를 구하라.

c) 10개의 원소를 가지며 A의 첫 번째 행의 원소와 두 번째 행의 원소를 포함하고 있는 행렬vc를 구하라.

d) 6개의 원소를 가지며 A의 두 번째 열의 원소와 다섯 번째 열의 원소를 포함하고 있는 행렬vd를 구하라.

5. eye(7)명령을 사용하고 배열를 변환시켜 배열 B를 구하라.

B =

2     2     2     0     5     5     5

2     2     2     0     5     5     5

3     3     3     0     5     5     5

0     0     0     1     0     0     0

4     4     7     0     9     9     9

4     4     7     0     9     9     9

4     4     7     0     9     9     9

6. 모든 원소들이 1인 [eqn: 3times 3]행렬 A 와 모든 원소들이 5인 [eqn: 2 times 2]행렬 만들고 행렬A에 행렬 B를 더해서 다음 행렬을 구하라.

1     1     1     0     0

1     1     1     0     0

1     1     1     0     0

0     0     0     5     5

0     0     0     5     5

Chapter 2 수학적 연산 배열

덧셈과 뺄셈

>> VecA=[ 1 2 3]; VecB=[ 5 6 7];

>> VecC=VecA+VecB

VecC =

6     8    10

>> A=[ 1 2 3; 4 5 6]

A =

1     2     3

4     5     6

>> B=[ 5 10 15; 6 12 18]

B =

5    10    15

6    12    18

>> A-B

ans =

-4    -8   -12

-2    -7   -12

>> C=A+B

C =

6    12    18

10    17    24

>> C-5

ans =

1     7    13

5    12    19

행렬의 곱하기-*사용

>> A=[ 1 2 4; 3 5 7; 1 6 9; 2 4 8]

A =

1     2     4

3     5     7

1     6     9

2     4     8

>> B=[6 1; 2 5; 7 3]

B =

6     1

2     5

7     3

>> C=A*B

C =

38    23

77    49

81    58

76    46

>> D=B*A

??? Error using ==> mtimes

Inner matrix dimensions must agree.

>> F=[ 1 2; 3 4]

F =

1     2

3     4

>> G=[ 2 4; 3 6]

G = 2     4

3     6

>> F*G

ans =

8    16

18    36

>> G*F

ans =

14    20

21    30

>> AV=[ 2 5 1]

AV =

2     5     1

>> BV=[3; 1; 4]

BV =

3

1

4

>> AV*BV

ans =

15

>> BV*AV

ans =

6    15     3

2     5     1

8    20     4

배열에 숫자를 곱하면, 각 원소들은 숫자에 의하여 곱해진다.

>> A=[ 1 2; 3 4]

A =

1     2

3     4

>> b=3;

>> b*A

ans =

3     6

9    12

>> A*5

ans =

5    10

15    20

행렬의 나누기

>> A=[ 2 1 4; 5 3 6; 3 4 5]

A =

2     1     4

5     3     6

3     4     5

>> B=inv(A)

B =

-0.4737    0.5789   -0.3158

-0.3684   -0.1053    0.4211

0.5789   -0.2632    0.0526

>> A*B

ans =

1.0000         0   -0.0000

0    1.0000   -0.0000

0.0000         0    1.0000

>> A*A^-1

ans =

1.0000         0   -0.0000

0    1.0000   -0.0000

0.0000         0    1.0000

>> det(A)

ans =

19

MATLAB은 두가지 오른쪽 나눗셈과 왼쪽 나눗셈을 가지고 있다.

왼쪽 나눗셈(\)은 행렬방정식 [eqn: AX=B]의 해 [eqn: X= A\B]를 구하는데 사용한다.

오른쪽 나눗셈(/)은 행렬방정식 [eqn: XC=D]의 해 [eqn: X= D/C]를 구하는데 사용한다.

[예제] 선형 연립방정식

[eqn: 4x-2y+6z=8]

[eqn: 2x+8y+2z=4]

[eqn: 6x+10y+3z=0]

[eqn: AX=B, \ \ pmatrix { 4 &-2 &6 #2 &8 &2 #6 &10 &3 } pmatrix { x # y # z }=pmatrix { 8 # 4 #0}]

[eqn: XC=D, \ \ pmatrix { x&y & z} pmatrix { 4 &2 &6 #-2 &8 &10 #6 &2& 3}= pmatrix { 8&4 & 0}]

>> A=[4 -2 6; 2 8 2; 6 10 3];

>> B=[8; 4; 0];

>> X=A\B

X =

-1.8049

0.2927

2.6341

>> Xb=inv(A)*B

Xb =

-1.8049

0.2927

2.6341

>> C=[4 2 6; -2 8 10; 6 2 3];

>> D=[8 4 0];

>> Xc=D/C

Xc =

-1.8049    0.2927    2.6341

>> Xd=D*inv(C)

Xd =

-1.8049    0.2927    2.6341

배열 연산 (.*(곱셈), ./(오른쪽 나눗셈), .^(거듭제곱), .\(왼쪽 나눗셈))

[예제]

>> A=[ 2 6 3; 5 8 4]

A =

2     6     3

5     8     4

>> B=[ 1 4 10; 3 2 7]

B =

1     4    10

3     2     7

>> A.*B

ans =

2    24    30

15    16    28

>> C=A./B

C =

2.0000    1.5000    0.3000

1.6667    4.0000    0.5714

>> B.^3

ans =

1          64        1000

27           8         343

>> A*B

??? Error using ==> mtimes

Inner matrix dimensions must agree.

>> x=[1:8]

x =

1     2     3     4     5     6     7     8

>> y=x.^2-4*x

y =

-3    -4    -3     0     5    12    21    32

>> z=[1:2:15]

z =

1     3     5     7     9    11    13    15

>> y=(z.^3+5*x)./(4*z.^2-10)

y =

-1.0000    1.4231    1.5556    1.9516    2.4013    2.8713    3.3514    3.8371

MATLAB안에 함수에 의해서 정의된 연산은 매개변수(입력)가 배열인 경우, 이 배열의 각각의 요소별로 적용한다.

>> x=[0:pi/6:pi]

x =

0    0.5236    1.0472    1.5708    2.0944    2.6180    3.1416

>> y=cos(x)

y =

1.0000    0.8660    0.5000    0.0000   -0.5000   -0.8660   -1.0000

내장 배열 함수

mean(A): A가 벡터이면 평균값

C=max(A): A가 벡터이면, C는 A의 최대값.

[d, n]=max(A): A가 벡터이면, d는 A의 최대값, n은 원소의 위치

min(A): A가 벡터이면, C는 A의 최소값.

sum(A): 벡터A의 원소들의 합

sort(A): 오름차순으로 벡터의 원소 재정리

median(A): 벡터 A의 중간값

std(A): 원소들의 표준편차

dot(a,b): 내적

cross(a,b): 외적

>> A=[ 5 9 2 4];

>> mean(A)

ans =

5

>> A=[ 5 9 2 4 11 6 7 3 0 1];

>> C=max(A)

C =

11

>> [d,n]=max(A)

d =

11

n =

5

>> min(A)

ans =

0

>> sum(A)

ans =

48

>> sort(A)

ans =

0     1     2     3     4     5     6     7     9    11

>> median(A)

ans =

4.5000

>> std(A)

ans =

3.5214

>> a=[1 2 3];

>> b=[3 4 5];

>> dot(a,b)

ans =

26

>> cross(a,b)

ans =

-2     4    -2

난수의 생성

rand: 0과1 사이의 값으로 단일 난수 생성

rand(1,n): 0과 1사이의 n개 난수 행벡터 생성

rand(n): 0과 1사이의 [eqn: n times n] 행렬 생성

rand(m,n): 0과 1사이의 [eqn: m times n] 행렬 생성

[a,b]를 구간에서 균일하게 분포하는 랜덤 수를 생성:

(b-a)*rand +a

라운딩 함수를 사용함으로써 정수인 랜덤수를 생성할 수 있다.

[예제]

>> rand

ans =

0.8147

>> a=rand(1,4)

a =

0.9058    0.1270    0.9134    0.6324

>> b=rand(3)

b =

0.0975    0.9575    0.9706

0.2785    0.9649    0.9572

0.5469    0.1576    0.4854

>> c=rand(2,4)

c =

0.8003    0.4218    0.7922    0.6557

0.1419    0.9157    0.9595    0.0357

>> v=15*rand(1,10)-5

v =

7.7369    9.0099    5.1810    6.3661    6.1470    0.8834    4.8322   -2.4322     5.5907   -4.5225

>> A=round(99*rand(2,15)+1)

A =

28    11    70    95    44    77    20    45    71    28    66    13    96    59    75

6    83    32     4    39    80    49    65    76    68    17    50    35    23    26

Homework:

1. 주어진 두벡터 [eqn: u=4i+9j-5k, \ \ v=-3i+6j-7k]에서 다음의 두 방법으로 벡터의 내적을 구하라.

a) u는 행벡터, v는 열벡터로 정의하고 행렬의 곱셈을 이용하라.

b) dot함수를 사용하라.

2. 함수 [eqn: y=(x^2 +1)^3 x^3]에 대하여 주어진 x값에서 y값을 배열연산을 이용하여 구하라.

[eqn: x=-2.5,-2,-1.5,-1,-0.5,0,0.5,1,1.5,2,2,5,3]

3. 선형 연립반정식을 구하라.

[eqn: 5x +4y-2z+6w=4]

[eqn: 3x+6y+6z+4.5w=13.5]

[eqn: 6x+12y-2z+16w=20]

[eqn: 4x-2y+2z-4w=6]

4. symsum(1/n^2,n,1,inf)를 이용하여 다음 무한급수의 합을 구하라.

a) [eqn: sum_{n=1}^{inf}1 over {n^2}]

b) [eqn: sum_{n=0}^{inf}1 over {(2n+1)(2n+2)}]

Chapter 3 스크립트 파일

스크립트 파일은 연소적인 MATLAB명령을 포함하는 프로그램

스크립트 파일을 실행하면, 명령창에 입력되어 있는 순서대로 실행

출력은 명령창에, 수시로 편집작업과 실행이 가능

확장자는 .m사용-M-화일이라고도 한다.

스크립트 파일 만들기와 저장하기

File 메뉴에서 New를 선택한 다음 M-file을 선택한다.

File 메뉴에서 Save As를 선택한 다음에 기억 장소를 선택하고 파일 이름 입력-문자로 시작하고, 숫자나 밑줄기호 포람 할 수 있다.

스크립트 파일 실행

명령창에서 파일의 이름 입력후 Enter키를 누른다.

Chapter 4   2차원 그래프

plot 명령

간단한 형태: plot(x,y)

변수 x,y는 각 벡터이고, 두 벡터의 개수는 같아야한다.

[예제]

>> x=[ 1 2 3 5 7 7.5 8 10];

>> y=[2 6.5 7 7 5.5 4 6 8];

>> plot(x,y)

곡선은 벡터 x,y에 정의된 좌표들의 점들을 연결하는 직선으로 나타난다. plot는 default가 파란색으로 나타난다. 색과 선의 형태 색도, 표시기호의 형태를 추가적으로 나타낼 수 잇다.

plot(x,y, 'line specifiers','PropertyName','PropertyValue')

line specifiers: 선의 형태, 선의 색상, 마커 정의

PropertyName,PropertyValue: 선의 넓이, 마커의 크기, 테두리, 색깔 칠함

선 형태기호:

선의 형태                기호

솔리드(default) 실선       -

dashed 쇄선              --

dotted 점선              :

선 색상기호:

선 색상              기호

빨강                  r

녹색                  g

파랑                  b

하늘(cyan)            c

자홍(magenta)        m

노랑                  y

검정                  k

흰색                  w

마커형태:

마커 형태            기호

Plus sign             +

circle(원)             [eqn: CIRC]

별표                   *

정사각형               s

diamond               d

plot(x,y) : 마커없이 점을 연결하여 파랑실선으로 그린다.

plot(x,y,'r'): 점들을 빨간실선으로 연결하여 그린다.

plot(x,y,'--y'): 노란쐐선으로 그린다.

plot(x,y,'*'): 점들을 별표로 표시하여 그린다.

plot(x,y,'g: d'): 점들을 다이아몬드로 표시하고 녹색점선으로 그린다.

>> x=[1 2 3 5 7 7.5 8 10];

>> y=[2 6.5 7 7 5.5 4 6 8];

>> plot(x,y,'-mo','LineWidth',2, 'markersize',12, 'MarkerEdgeColor', 'g', 'markerfacecolor','y')

점들을 자홍색 실선으로 연결하고, 점을 마커로써 원으로 표시하고 선의 넓이는 2포인트 원 마커의 크기는 12, 마커는 초록 테두리선과 내부는 노란색으로 그린다.

>> yr=[1988:1:1994];

>> sale=[8 12 20 22 18 24 27];

>> plot(yr,sale, '--r*','linewidth',2,'markersize',12)

fplot 명령

fplot 명령은 함수를 지정된 구간에서 그래프를 그려주는 명령이다.

형식:  fplot('function'.limits, line specifiers)

function: 함수

limits   : 정의역, y축의 한계 [xmin,xmax], [xmin,xmax,ymin,ymax]

specifiers: 선의 형태,색상, 마커

>> fplot('x^2+4*sin(2*x)-1',[-3,3])

같은 그림창에 다중 그래프 그리기

한 그림창에 다중 그래프를 그리기 위한 3가지 방법이 있다.

1. plot 명령 사용하기

2개 혹은 다중 그래프들이 plot 명령 내부에 벡터의 쌍의 입력에 의하여 같은 창에 그릴 수 있다. 예를 들면

plot(x,y,u,v,t,h)

은 3개의 그래프를 그린다. 각 쌍의 벡터들은 같은 길이를 가져야한다. MATLAB은 자동적으로 다른 색깔로 그래프를 그린다. 선 지정을 추가하는 것이 가능하다.

plot(x,y,'-b',u,v,'--r', t,h, 'g:')

x,y는 파랑실선(solid), u,v는 빨간쇄선(dashed), t,h는 녹색점선(dotted)으로 각각 그려진다.

예제] 함수 [eqn: y=3x^3 -26 x +10]와 1차,2차 도함수의 그래프를 구간 [-2,4]에 같은 찬에 그래프를 그려라.

[eqn: y'= 9x^2 -26, y''=18x]

>> x=[-2:0.01:4];

>> y=3*x.^3-26*x+6;

>> yd=9*x.^2-26;

>> ydd=18*x;

>> plot(x,y,'-b',x,yd,'--r',x,ydd,':k')

2. hold on, hold off 명령 사용하기

하나의 그래프를 plot 명령으로 그리고 hold on 명령을 입력하면 첫 번째 그래프와 함께 그림창에 열리고 원하는 많은 그래프를 추가하고 hold off명령으로 과정을 중지한다.

>> x=[-2:0.01:4];

>> y=3*x.^3-26*x+6;

>> yd=9*x.^2-26;

>> ydd=18*x;

>> plot(x,y,'-b')

>> hold on

>> plot(x,yd,'--r')

>> plot(x,ydd,':k')

>> hold off

3. line 명령 사용하기: plot 명령으로 선을 생성하기 위하여 사용되는 낮은 레벨의 그래픽 명령.

plot의 형식화에 대한 명령 사용하기

plot의 제목, 범례,격자, 텍스트 라벨을 형식화하는 명령:

-축 라벨은 xlabel과 ylabel명령의 형태를 가진다.

xlabel('text as string')

ylabel('text as srting')

-title: 제목

title('text as string')

-text 명령:

text(x,y,'text as string')

gtext('text as string')

text 명령은 좌표 x,y위치에 text를 배치한다. gtext명령은 사용자에 의해 마우스로 특별한 위치를 지정한다.

-legend 명령: 각 그래프의 선 형태를 나타낸다.

legend('문자열1‘,’문자열‘,0)

Matlab이 자동으로 그려진 그래프를 고려해서 겹치지 않게 제일 좋은 위치에 legend를 놓는다.

-axis 명령: x축의 범위를 xmin에서 xmax까지 y축의 범위를 ymin에서 ymax까지 정한다.

axis([xmin,xmax,ymin,ymax])

axis equal: 각 축을 같은 간격으로 나타낸다.

-grid 명령:

grid on: 그래프에 눈금격자를 첨가한다.

grid off: 그래프에 눈금격자를 제거한다.

특별한 그래프 그리기

Vertical Bar Plot: bar(x,y)

>> yr=[1988:1994];

>> sale=[8 12 20 22 18 24 27];

>> bar(yr,sale,'r')

>> xlabel('Year')

>> ylabel('Sale (Millions)')

Horizontal Bar Plot: barh(x,y)

>> yr=[1988:1994];

>> sale=[8 12 20 22 18 24 27];

>> barh(yr,sale,'r')

>> xlabel('Sale (Millions)')

>> ylabel('Year')

Stairs Plot: stairs(x,y)

>> yr=[1988:1994];

>> sale=[8 12 20 22 18 24 27];

>> stairs(yr,sale)

>> xlabel('Year')

>> ylabel('Sale (Millions)')

Stem Plot: stem(x,y)

>> yr=[1988:1994];

>> sale=[8 12 20 22 18 24 27];

>> stem(yr,sale)

Pie Plot: pie(x)

>> grade=[11 18 26 9 5];

>> pie(grade)

>> title('Class Grades')

극좌표 그래프

polar(theta,radius,'line specifiers')

구간 [eqn: 0 leq theta leq 2pi]에서 함수 [eqn: r=3 cos^2 (0.5theta)+theta]의 그래프

>> theta=linspace(0,2*pi,200);

>> r=3*cos(0.5*theta).^2+theta;

>> polar(theta,r)

- 같은 페이지 위에 다중 그래프는 subplot 명령을 사용하여 그릴 수 있다. (반드시 help

명령을 이용하여 확인 바람).

subplot(m,n,p)

Homework:

함수 [eqn: f(x) = 3 x sin (x) - 2x]와 도함수를 같은 구간 [eqn: -2 pi leq x leq 2pi]에서  plot하여라. 함수를 solid line으로 도함수를 dashed line, 각각 다른 색으로 그리고 제목, 축 레벨을 첨가하여라.

Chapter 5   3차원 그래프

Line Plot

3차원 line plot은 공간상의 점들을 연결하여 얻어지며, 형식은 담음과 같다.

plot3(x,y,z,'line specifiers','PropertyName','property value‘)

x,y,z는 좌표-3개의 벡터는 같은 갯수를 가져야한다.

line specifiers: 선과 마커의 종류와 색상

PropertyName: 선의두께, 마커의 크기, 테두리와 채우기

예를 들면 x,y,z가 매개변수 t의 함수로 주어진 경우:

[eqn: x= sqrt t sin (2t)]

[eqn: y= sqrt t cos(2t)]

[eqn: z=0.5t]

[eqn: 0 leq t leq 6pi] 범위의 line plot

>> t=0:0.01:6*pi;

>> x=sqrt(t).*sin(2*t);

>> y=sqrt(t).*cos(2*t);

>> z=0.5*t;

>> plot3(x,y,z,'k','linewidth',1)

>> grid on

>> xlabel('x');ylabel('y');zlabel('z')

Mesh Plot과 Surface Plot

Mesh와 surface plot은 x와y가 독립변수이고, z가 종속변수인 z=f(x,y) 형태의 함수를 plot하는데 사용한다.

예를 들면

[eqn: -1 leq x leq 3, 1 leq y leq 4]에서 영역에서 함수 [eqn: z={x y^2} over {x^2 + y^2 }]의 그래프는 세 가지 단계에 의해

생성된다.

첫 번째 단계는 함수의 영역을 포함하는 x-y평면에 grid를 만드는 것이고

[X,Y]=meshgrid(x,y)

>> x=-1:3;

>> y=1:4;

>> [X,Y]=meshgrid(x,y)

X =

-1     0     1     2     3

-1     0     1     2     3

-1     0     1     2     3

-1     0     1     2     3

Y =

1     1     1     1     1

2     2     2     2     2

3     3     3     3     3

4     4     4     4     4

두 번째는 grid의 모든 점들에 대해 z값을 계산하는 것이며, 예를 들어 z가 다음과 같이 주어지면

[eqn: z= {xy^2} over {x^2 + y^2}]

위의 grid 에 있는 각 점에서의 z 값은 다음과 같이 게산된다.

>> Z=X.*Y.^2./(X.^2 +Y.^2)

Z =

-0.5000         0    0.5000    0.4000    0.3000

-0.8000         0    0.8000    1.0000    0.9231

-0.9000         0    0.9000    1.3846    1.5000

-0.9412         0    0.9412    1.6000    1.9200

세 번째는 plot을 생성하는 것이다.

Mesh plot은 이 점들을 연결하는 line으로 만들어지며

mesh(X,Y,Z)

Surface plot은 mesh내부 영역에 색상이 입혀지게 된다.

surf(X,Y,Z)

>> x=-1:3;

>> y=1:4;

>> [X,Y]=meshgrid(x,y);

>> Z=X.*Y.^2./(X.^2 +Y.^2);

>> mesh(X,Y,Z)

>> xlabel('x');ylabel('y');zlabel('z')

>> surf(X,Y,Z)

-mesh 명령이 실행되면, grid 기본값은 on 이 되며, grid off 명령을 사용하여 grid off를 시킬수 있다.

-box on 명령을 사용하면 plot의 주변에 box를 그릴수 있다.

[eqn: -3 leq x leq 3, -3 leq y leq 3]범위에서 함수 [eqn: z=1.8^{-1.5 sqrt{x^2 +y^2}}sin(x) cos(0.5y)]의 plot 종류

>> x=-3:0.25:3;

>> y=-3:0.25:3;

>> [X,Y]=meshgrid(x,y);

>> Z=1.8.^(-1.5*sqrt(X.^2+Y.^2)).*cos(0.5*Y).*sin(X);

>> mesh(X,Y,Z)

>> surf(X,Y,Z)

Mesh and Contour Plot (mesh 밑에 contour plot을 그림)

>> meshc(X,Y,Z)

Surface and Contour Plot

>> surfc(X,Y,Z)

Surface Plot with Lighting

>> surfl(X,Y,Z)

특수한 그래픽의 plot

- n개의 면으로 수성된 단위 구

>> [X,Y,Z]=sphere(20);

>> surf(X,Y,Z)

-plot Cylinder

형식: [X,Y,Z]=cylinder(r): 종단면 rdmf 갖는 원기둥의 x,y,z좌표 변환

>> t=linspace(0,pi,20);

>> r=1;

>> [X,Y,Z]=cylinder(r);

>> surf(X,Y,Z)

>> t=linspace(0,pi,20);

>> r=1+sin(t);

>> [X,Y,Z]=cylinder(r);

>> surf(X,Y,Z)

-3-D Stem Plot

형식: stem3(X,Y,Z)

>> t=0:0.2:10;

>> x=t;

>> y=sin(t);

>> z=t.^1.5;

>> stem3(x,y,z)

HomeWork

이동하는 입자의 위치가 다음과 같이 시간의 함수로 주어진다.

[eqn: x=(2+4 cos(t))cos(t)]

[eqn: y=(2+4cos(t))sin(t)]

[eqn: z=t^2]

[eqn: 0leq t leq 20]에 대하여 입자의 위치를 plot하여라.

[eqn: -4 leq x leq 4, -4 leq y leq 4]의 범위에서 함수 [eqn: z=- x^{2} over 4 - y^2 over 4]의 그래프를 그려라.

Chapter 6   MATLAB 프로그래밍

관계 연산자: 두 개의 숫자를 비교하여 비교문의 참과 거짓을 결정하며, 비교문이 참인 경우에는 1, 거짓인 경우에는 0의 값이 할당된다.

<  보다 작다

> 보다 크다

<= 같거나 작다

>= 같거나 크다

== 같다

~= 같지 않다.

- 두 개의 배열이 비교되는 경우에는(같은 크기), 모든 요소가 각각 비교되며, 그 결과는 같은 크기의 논리배열이 되며, 그 배열은 위치가 동일한 요소들 간의 비교를 해 얻어진 1과0의 값으로 이루어진다.

>> 5>8

ans =

0

>> a=5<10

a =

1

>> y=(6<10)+(7>8)+(5*3==60/4)

y =

2

>> b=[15 6 9 4 11 7 14];

>> c=[8 20 9 2 19 7 10];

>> d=c>=b

d =

0     1     1     0     1     1     0

>> b==c

ans =

0     0     1     0     0     1     0

>> b~=c

ans =

1     1     0     1     1     0     1

>> f=b-c>0

f =

1     0     0     1     0     0     1

>> A=[2 9 4; -3 5 2; 6 7 -1]

A =

2     9     4

-3     5     2

6     7    -1

>> B=A<=2

B =

1     0     0

1     0     1

0     0     1

벡터에 사용된 관계연산자의 결과는 논리벡터라 불리며, 0과1로 구성되어 있고, 이는 주소지정벡터로 사용될 수 있다. 논리벡터가 다른 벡터의 주소지정에 사용되는 경우에는

다른 벡터의 요소중 논리벡터의 1과 같은 위치에 있는 요소들이 추출된다.

>> r=[ 8 12 9 4 23 19 10];

>> w=r(r<=10)

w =

8     9     4    10

>> s=r<=10

s =

1     0     1     1     0     0     1

>> t=r(s)

t =

8     9     4    10

산술연산자가 관계연산자에 대하여 우선순위를 가진다. 관계 연산자들 간의 우선순위는 서로 같기 때문에 좌에서 우로 연산이 진행된다.

>> 3+4<16/2

>> 3+(4<16)/2

논리연산자:

논리연산자   명칭

&          AND   양쪽 모두 참인 경우에만 참, 그렇지 않으면 거짓

|           OR    양쪽 모두 거짓인 경우에만 거짓, 그렇지 않으면 참

~            NOT

-논리연산자는 숫자로 된 피연산자를 가진다. 0이 아닌 숫자는 참, 0은 거짓이다.

-논리 연산자는 관계 연산자와 마찬가지로 스칼라와 배열에서 사용될 수 있다.

>> 3&7

ans =

1

>> a= 5|0

a =

1

>> ~25

ans =

0

>> t=25*((12&0)+(~0)+(0|5))

t =

50

>> x=[9 3 0 11 0 15];

>> y=[2 0 13 -11 0 4];

>> x&y

ans =

1     0     0     1     0     1

>> z=x|y

z =

1     1     1     1     0     1

>> ~(x+y)

ans =

0     0     0     1     1     0

산술,관계,논리 연산자가 조합을 가진 경우, 연산이 실행되는 우선 순위에 좌우된다.

우선 순위     연산

1         괄호

2         지수

3         NOT(~)

4         곱셈,나눗셈

5         덧셈,뻴셈

6         관계 연산자

7         AND(&)

8          OR(|)

>> x=-2; y=5;

>> -5<x<-1

ans =

0

>> -5<x & x<-1

ans =

1

>> ~(y<7)

ans =

0

>> ~y<7

ans =

1

>> ~((y>=8)|(x<-1))

ans =

0

>> ~(y>=8)|(x<-1)

ans =

1

내장 논리 함수:

MATLAB은 논리연산자와 동일한  내장 함수를 가지고 있다:

and(A,B)   A&B와 동일

or(A,B)    A|B와 동일

not(A)     ~A와 동일

xor(A,B): 하나의 피연산자가 참이고 다른 연산자가 거짓이면 참:

>> xor(7,0)

ans =

1

>> xor(7,2)

ans =

0

all(A): 벡터 A의 모든 요소가 참인 경우에는 참, 하나 이상의 요소가 거짓인 경우에는 거짓:

>> A=[6 2 15 9 7 11];

>> all(A)

ans =

1

>> B=[6 2 15 9 0 11];

>> all(B)

ans =

0

any(A): 벡터A의 어떤 요소가 참인 경우에는 참, 모든 요소가 거짓인 경우에는 거짓:

>> A=[6 0 15 0 0 11];

>> any(A)

ans =

1

>> B=[0 0 0 0 0 0];

>> any(B)

ans =

0

find(A): A가 벡터인 경우, 0 이 아닌 요소의 위치정보를 반환

find(A>d): d보다 큰 요소의 주소를 반환

>> A=[0 9 4 3 7 0 0 1 8];

>> find(A)

ans =

2     3     4     5     8     9

>> find(A>4)

ans =

2     5     9

조건문

조건문에서는 조건식이 기술되는데, 그 조건식이 참인 경우에는 조건문 다음에 오는 명령어 그룹이 실행되고, 거짓인 경우에는 실행을 생략하게 된다.

-if-end 구조

이 프로그램은 실행과 함께 if 문을 만나게 되는데, 만약 if 문의 조건식이 참인 경우에는 if 문을 따르는 명령어들이 end 문을 만날 때까지 연속적으로 실행되고, 거짓인 경우에는 if 와 end 사이의 명령어 그룹은 생략된 상태로 end 이후의 명령어들이 실행된다. If 와 end라는 단어는 파란색으로 나타난다.

.......

....... MATLAB program

......

if conditional expression

......

A group of MATLAB commands

......

end

......

..... MATLAB program

.....

>> t=input('Please enter the number of hours worked ');

>> h=input('Please enter the hourly wage in $ ');

>> Pay=t*h;

>> if t>40

Pay=Pay+(t-40)*0.5*h;

end

>> fprintf('The worker''s pay is $ %5.2f',Pay)

if-else-if 구조

조건식이 참인경우에는 if 와 else 사이의 명령어 그룹1이 실행되고, end까지의 명령어는 생략된다. 조건식이 거짓인 경우에는 else 까지의 명령어는 생략되고, else와 end 사이의 명령어 그룹2가 실행된다.

.....

.....MATLAB program

if conditional expression

.....

Group 1 of commands

....

else

.....

Group 2 of commands

.....

end

....

....MATLAB program

if-elseif -else-end 구조

if 조건문1

<실행문1>

elseif 조건문 2

<실행문2>

else

<실행문3>

end

>> for i=1:5

for j=1:5

if i==j

A(i,j)=5;

elseif abs(i-j)==1

A(i,j)=1;

else

A(i,j)=0;

end

end

end

>> A

A =

5     1     0     0     0

1     5     1     0     0

0     1     5     1     0

0     0     1     5     1

0     0     0     1     5

switch-case 문

다수의 실행 가능한 명령어 그룹중 하나의 그룹을 선택하여 실행한다. 표현에 해당하는 값이 있으면 그 값에 해당하는 실행문을 수행하고, 해당값이 없을 때는 ‘otherwise'의 실행문을 실행한다.

첫 번째 라인의 switch 명령어는 다음과 같다.

switch expression

switch 표현(스칼라 또는 문자열)

case 값1

<실행문1>

case 값2

<실행문2>

:

:

otherwise

<실행문 n>

end

>> x=2.7;

>> units='m';

>> switch units

case {'inch','in'}

y=x*2.54;

case {'feet','ft'}

y=x*2.54*12;

case {'meter','m'}

y=x/100;

case{'milimeter','mm'}

y=x*10;

case{'centimeter','cm'}

y=x;

otherwise

y=nan;

end

>> y

y =

0.0270

Loop

루프는 컴퓨터 프로그램의 흐름을 제어하는 또 다른 방법이다. MATLAB은 두 종류의 루프를 가지고 있다. for-end에서는 루프가 시작될 때 반복 횟수가 정해지고 while-end 에서는 반복횟수가 정해져 있지 않고  특정한 조건이 만족될 때까지 루프가 계속 진행된다.

for문

하나 이상의 문장을 미리 정해진 횟수만큼 반복 수행하도록 하는 명령어이다.

for 변수=f(첫 번째 패스에서의 값):s(증가량):t(마지막 패스에서의 값)

<실행문>

end

>> for n=1:10

x(n)=sin(n*pi/10);

end

>> x

x =

Columns 1 through 8

0.3090    0.5878    0.8090    0.9511    1.0000    0.9511    0.8090    0.5878

Columns 9 through 10

0.3090    0.0000

1에서 100까지의 합

>> S=0;

>> for k=1:100

S=S+k;

end

>> S

S =

5050

다음의 수식을 계산하라. MATLAB을 사용하지 말고 계산한 후 MATLAB으로 검산하라.

1. 5<=8-3

2. y=7<3-1+6>2

3. y=(7<3)-1+(6>2)

4. 2[eqn: times]4+5==7+20/4

a=10, b=6 일 때

5. y=a<=b

6. y=a-b<=b/2

7. y=a-(b<=b/2)

8. 5&-2

9. 8-2|6+5&-2

10. ~(4&0)+8*~(4|0)

어떤 벡터가 다음과 같이 주어질 때 V=[5, 17, -3,8,0,-1,12,15,20,06,6,4,-7,16]

이들 요소 중 양수이면서 3이나 5로 나누어질 수 있는 요소를 선택하여 2를 곱하고, -5보다 큰 음수에 해당하는 요소는 세제곱하는 프로그램을 for와 if-elseif를 사용하여 구하라. (hint: rem(x,3)==0은 요소 x를 3으로 나누었을 때 나머지가 0)

while문

while 조건문

<실행문>

end

prod(x)는 n!을 계산한다.

>> n=1;

>> while prod(1:n)<=100000

n=n+1;

end

>> n

n =

9

>> prod(1:9)

ans =

362880

>> prod(1:8)

ans =

40320

Chapter 6   다항식, 곡선 근사, 보간법

다항식은 다음과 같은 형식을 가지는 함수이다.

[eqn: f(x) = a_n x^n + a_{n-1} x^{n-1}+ cdots + a_1 x + a_0]

MATLAB에서 다항식은 행벡터로 표현되며, 그 요소는 [eqn: a_n , a_{n-1}, cdots , a_1 , a_0]가 된다.

첫 번째 요소는 최고차항에 있는 x의 계수이다. 다항식을 표현하는 벡터는 그 값이 0인 계수와 함께 모든 계수를 포함해야한다. 예를 들면

[eqn: 8x+5] 의 MATLAB 표현은 [8 5], [eqn: 2x^2 - 4x +10] 는 [2 -4 10]이고 [eqn: 6x^2 -150]는

[6 0 -150]이다.

-다항식의 값

점 x에서의 다항식의 값은 다음의 형식을 가진 polyval 함수로 계산 할 수 있다.

polyval(p,x)

p: 다항식의 계수로 이루어진 벡터

x: 벡터나 행렬

예제)

다항식 [eqn: f(x)= x^5 -12.1x^4 +40.59 x^3 - 17.015x^2 -71.95x + 35.88]

a) f(9)를 계산하라

b) [eqn: -1.5 leq x leq 6.7]에서의 다항식의 그래프를 그려라

>> p=[1 -12.1 40.59 -17.015 -71.95 35.88];

>> polyval(p,9)

ans =

7.2611e+003

>> x=[-1.5:0.01:6.7];

>> y=polyval(p,x);

>> plot(x,y)

-다항식의 근

MATLAB에는 roots라는 함수가 잇는데, 이는 다항식의 근을 구하는 함수이다.

r=roots(p)

r: 다항식의 근으로 구성된 열벡터

p: 다항식의 계수로 구성된 행벡터

예를 들면, [eqn: f(x)=4x^2 + 10x -8]의 근

>> p=[4 10 -8];

>> roots(p)

ans =

-3.1375

0.6375

다항식의 근을 알고 있는 경우, 다항식의 게수를 결정하기 위해 poly 명령어를 사용한다.

p=poly(r)

p: 다항식의 계수로 구성된 행벡터

r: 다항식의 근으로 구성된 행(혹은 열)벡터

>> r=[1 2 3];

>> p=poly(r)

p =

1    -6    11    -6

-다항식의 사칙연산

덧셈:

두 다항식의 덧셈은 그의 계수로 이루어진 벡터들의 더함으로써 이루어진다. 만약 두 다항식이 서로 다른 차수인 경우에는, 패딩(짧은 벡터의 앞에 0을 추가)하여 두 벡터의 크기가 같도록 한다.

>> p1=[3 15 0 -10 -3 15 -40];

>> p2=[3 0 -2 -6];

>> p3=p1+[0 0 0 p2]

p3 =

3    15     0    -7    -3    13   -46

곱셈:

두 다항식의 곱셈을 위해서는 내장 함수 conv를 이용한다

c=conv(a,b)

c: 곱셈의 결과로 얻어진 다항식의 벡터

a,b: 곱해질 다항식의 계수로 이루어진 벡터

두 다항식이 반드시 같은 차수일 필요는 없다.

>> pm=conv(p1,p2)

pm =

9    45    -6   -78   -99    65   -54   -12   -10   240

나눗셈:

한 다항식을 다른 다항식으로 나누기위해 내장함수 decov를 이용한다.

[q,r]=deconv(u,v)

q: 몫에 해당하는 다항식의 벡터

r: 나머지에 해당하는 다항식의 벡터

u: 분자에 해당하는 다항식의 벡터

v: 분모에 해당하는 다항식의 벡터

예를 들면, [eqn: 2 x^3 + 9 x^2 +7x-6]을 x-3 으로 나누었을 때 몫과 나머지

>> u=[2 9 7 -6];

>> v=[1 3];

>> [q,r]=deconv(u,v)

q =

2     3    -2

r =

0     0     0     0

>> w=[2 -13 0 75 2 0 -60];

>> z=[1 0 -5];

>> [g,h]=deconv(w,z)

g =

2   -13    10    10    52

h =

0     0     0     0     0    50   200

다항식의 도함수

k=polyder(p): 단 하나의 다항식의 도함수

p: 다항식의 계수로 이루어진 벡터

k: 도함수의 계수로 이루어진 벡터

k=polyder(a,b): 두 다항식의 곱의 도함수

[n d]=poly(u,v): 유리함수(분수한수의)의 도함수

>> f1=[3 -2 4]; f2=[1 0 5];

>> k=polyder(f1)

k =

6    -2

>> d=polyder(f1,f2)

d =

12    -6    38   -10

>> [n d]=polyder(f1,f2)

n =

2    22   -10

d =

1     0    10     0    25

곡선 근사(Curve Fitting)

회귀분석이라고도 불리우는 곡선근사는 한 조의 데이터 점을 어떠한 함수로 근사해 가는 과정이다. 함수의 종류: 선형 함수, 다항 함수, 멱 함수, 지수 함수 등.

-다항식을 이용한 곡선근사와 polyfit 함수

다항식으로 데이터 점을 근사하는 데는 두 가지 방법이 있다. 하나는 다항식이 모든 데이터를 지나도록 하는 것이고, 다른 하나는 다항식이 데이터의 임의의 점을 지나니는 않더라도 그 데이터를 전체적으로 잘 근사하도록 하는 것이다.

모든 점을 지나는 다항식: 보간법

임의의 점을 지나지 않는 다항식: 최소자승 근사

n 개의 점이 주어졌을 때 n-1보다 작은 차수를 가지면서, 임의의 데이터 점을 지나지는 않더라도 그 데이터를 전체적으로 잘 근사하는 다항식을 구할 수 있다. 최소자승법은 데이터 점에 대한 최적의 근사를 찾는 가장 일반적인 방법이다. 이 방법은, 다항식의 계수를 각 데이터 점에서의 잔량을 제곱한 합이 최소가 되도록 결정한다. 잔량은 데이터의 값과 다항식의 값의 차로 정의 한다.

MATLAB에서의  곡선 근사는 최소자승법을 사용하는 polyfit 함수를 이용한다.

p=polyfit(x,y,n)

p: 데이터를 근사하는 다항식의 벡터

x: 데이터 점들의 x 좌표

y: 데이터들의 y 좌표

n: 다항식의 차수

>> x=[0.9 1.5 3  4 6 8 9.5];

>> y=[0.9 1.5 2.5 5.1 4.5 4.9 6.3];

>> p=polyfit(x,y,3)

p =

0.0220   -0.4005    2.6138   -1.4158

>> xp=[0.9:0.01:9.5];

>> yp=polyval(p,xp);

>> plot(x,y,'o',xp,yp)

보간법

MATLAB에서의 1차원 보간법은 다은과 같은 형식을 갖는다

yi=inter1(x,y,xi,'method')

yi: 보간된값

x: 입력데이터의 x 좌표

y: 입력데이터의 y 좌표

xi: 보간점의 x 좌표

method: 보간법의 종류:

‘linear' : 선형 스플라인

‘spline':  3차 스플라인

‘pchip':  3차 에르미트

예) 함수 [eqn: f(x)=1.5^x cos(2x)]에 의한 데이터 점들이 다음과 같이 주어질 때,

(0,1.0),(1,-0.6242),(2,-1.4707),(3,3.2406),(4,-0.7366),(5,-6.3717), linear,spline 보간법을 구하고, 테이터 점, 함수의 그래프를 그려라.

>> x=0:1.0:5;

>> y=[1.0 -0.6242 -1.4707 3.2406 -0.7366 -6.3717];

>> xi=0:0.1:5;

>> ylin=interp1(x,y,xi,'linear');

>> yspl=interp1(x,y,xi,'spline');

>> yfun=1.5.^xi.*cos(2*xi);

>> subplot(1,2,1)

>> plot(x,y,'o',xi,yfun,xi,ylin,'--');

>> subplot(1,2,2)

>> plot(x,y,'o',xi,yfun,xi,yspl,'--');

Chapter 6   기호 연산(Symbolic Math)

기호객체는 수학적인 식이 사용될 때, MATLAB으로 하여금 이 식을 기호 연산에 의해 수행하도록 해주는 변수와 숫자들로 구성되어 있다. 사용자는 먼저 필요한 기호 변수(객체)를 정의(생성)하고 나서 그들을 이용하여 기호 연산에 사용될 기호식을 만들어 낸다.

-기호 객체의 생성

기호 객체는 변수 혹은 숫자로 될 수 있다. 이들은 sym 혹은 syms 명령으로 생성된다.

object_name=sym('string')

이 string은 다음과 같은 것이 될 수 있다.

단일의 문자, 혹은 문자의 조합(빈칸 없이):  ‘a', 'x', 'yad'

공란이 아닌 문자로 시작하는 문자와 숫자의 조합: ‘r2d2'.'xy12'

숫자: ‘15’

처음 2가지 경우, 객체의 이름을 string과 동일하게 하는 것이 편리하다.

>> a=sym('a')

a =

a

>> g=sym('gamma')

g =

gamma

>> c=sym(5)

c =

5

>> e=13

e =

13

기호 객체의 출력은 라인의 시작점에서 시작하고 수치 변수를 출력할 때처럼 들여쓰기가 되지 않는다.

다음과 같이 syms 명령을 사용하여 여러 개의 기호변수를 생성 할 수 있다.

syms variable_name variable_name variable_name

syms 명령이 실행되면, 생성된 변수들은 자동으로 화면에 출력되지 않는다.

>> syms y z d

>> y

y =

y

-기호식의 생성

기호식은 기호 변수로 구성된 수학식이다.

예를 들면:

>> syms a b c x y

>> f=a*x^2 + b*x +c

f =

a*x^2+b*x+c

>> g=2*a/3+4*a/7-6.5*x +x/3 +4*5/3-1.5

g =

26/21*a-37/6*x+31/6

>> a=sym(3); b=sym(5);

>> e=b/a+sqrt(2)

e =

5/3+2^(1/2)

>> c=3; d=5;

>> f=d/c+sqrt(2)

f =

3.0809

기호식에서 수치적인 식을 실행하여 얻어진 수치변수를 기호식에 사용하면 비록 그 변수가 이전에 근사적으로 출력되더라도, 엄밀한 값이 사용된다.

>> h=10/3

h =

3.3333

>> k=sym(5); m=sym(7);

>> p=k/m+h

p =

85/21

double(S) 명령은 엄밀한 형태로 쓰여진 기호식 S를 수치적인 형태로 변환하는데 사용한다.

>> pN=double(p)

pN =

4.0476

-findsym 명령:

findsym 명령은 기존의 기호식에서 어떤 것이 기호 변수인지 찾아내기 위해 사용한다.

findsym(S) 혹은 findsym(S,n)

-collect 명령:

collect 명령은 식의 여러 항들중 같은 차수의 변수를 포함하는 항을 모은다.

>> syms x y

>> S=(x^2+x -exp(x))*(x+3)

S =

(x^2+x-exp(x))*(x+3)

>> F=collect(S)

F =

x^3+4*x^2+(-exp(x)+3)*x-3*exp(x)

>> T=(2*x^2+y^2)*(x+y^2+3)

T =

(2*x^2+y^2)*(x+y^2+3)

>> G=collect(T)

G =

2*x^3+(2*y^2+6)*x^2+y^2*x+y^2*(y^2+3)

>> H=collect(T,y)

H =

y^4+(2*x^2+x+3)*y^2+2*x^2*(x+3)

-expand 명령:

expand 명령은 수식을 삼각공식과 지수법칙, 로그법칙을 이용하여 합산이 포함된 항을 전개한다.

>> syms a x y

>> S=(x+5)*(x-a)*(x+4)

S =

(x+5)*(x-a)*(x+4)

>> T=expand(S)

T =

x^3+9*x^2-a*x^2-9*x*a+20*x-20*a

>> expand(sin(x-y))

ans =

sin(x)*cos(y)-cos(x)*sin(y)

-factor 명령:

다항식을 낮은 차수의 다항식의 곱으로 나나낸다.

>> syms x

>> S=x^3+4*x^2-11*x-30

S =

x^3+4*x^2-11*x-30

>> factor(S)

ans =

(x-3)*(x+5)*(x+2)

-simplify 명령:

수학 연산과 함수 법칙 및 삼각 공식을 이용하여 간단한 형태로 표시한다.

>> syms x y

>> simplify((x+y)/(1/x+1/y))

ans =

x*y

-simple 명령:

가장 작은 수의 문자를 갖는 식을 나나낸다. 많은 경우에, 이러한 형태가 가장 단순한 형태가 된다.

>> syms x

>> S=(x^3 -4*x^2+16*x)/(x^3 +64)

S =

(x^3-4*x^2+16*x)/(x^3+64)

>> F=simple(S)

F =

x/(x+4)

>> [G how]=simple(S)

G =

x/(x+4)

how =

simplify

-pretty 명령:

기호식을 수학식과 닮은 형태로 출력한다.

>> syms a b c x

>> S=sqrt(a*x^2+b*x+c)

S =

(a*x^2+b*x+c)^(1/2)

>> pretty(S)

-단일 방정식의 해법:

h=solve(eq) 혹은 h=solve(eq,var)

>> syms a b x y z

>> h=solve(exp(2*z)-5)

h =

1/2*log(5)

>> S=x^2 - x -6

S =

x^2-x-6

>> k=solve(S)

k =

3

-2

>> solve('cos(2*y)+3*sin(y)=2')

ans =

1/2*pi

1/6*pi

5/6*pi

>> T=a*x^2 +5*b*x+20

T =

a*x^2+5*b*x+20

>> solve(T)

ans =

-1/2*(5*b-(25*b^2-80*a)^(1/2))/a

-1/2*(5*b+(25*b^2-80*a)^(1/2))/a

-연립방정식의 해법:

solve 명령은 연립방정식을 풀기 위해서도 사용된다.

output=solve(eq1,eq2,...,eqn)

output=solve(eq1,eq2,...,eqn,var1,var2,...varn))

-미분

diff 명령을 이용한다.

diff(S), diff(S,var)

>> syms x y t

>> S=exp(x^4);

>> diff(S)

ans =

4*x^3*exp(x^4)

>> R=5*y^2*cos(3*t);

>> diff(R,t)

ans =

-15*y^2*sin(3*t)

>> diff(R,y)

ans =

10*y*cos(3*t)

>> diff(S,2)

ans =

12*x^2*exp(x^4)+16*x^6*exp(x^4)

-적분

int(S) 혹은 int(S,var)

int(S,a,b) 혹은 int(S,var,a,b)

>> syms x y t

>> S=2*cos(x)-6*x;

>> int(S)

ans =

2*sin(x)-3*x^2

>> int(sin(y)-5*y^2,0,pi)

ans =

2-5/3*pi^3

-상미분방정식의 해법:

>> dsolve('Dy=4*t+2*y')

ans =

-1-2*t+exp(2*t)*C1

>> dsolve('D2y+2*Dy=0')

ans =

C1+C2*exp(-2*t)

>> syms y

>> dsolve('Dy+4*y=60','y(0)=5')

ans =

15-10*exp(-4*t)

-기호식의 Plot

기호식을 plot할 필요가 있으면 ezplot 명령을 사용한다.

ezplot(S)

ezplot(S,[min,max])

ezplot(S,[xmin,xmax,ymin,ymax])

>> syms x y t

>> S=(3*x+2)/(4*x-1);

>> ezplot(S)

>> S=4*x^2-18*x+4*y^2+12*y-11;

>> ezplot(S)

>> x=cos(2*t);

>> y=sin(4*t);

>> ezplot(x,y)

-하나의 기호변수에 수치값 대입:

R=subs(S,var,number)

var: 수치값이 대입될 변수

number: var에 할당될 수치값

>> syms x

>> S=0.8*x^3+ 4*exp(0.5*x);

>> SD=diff(S)

SD =

12/5*x^2+2*exp(1/2*x)

>> subs(SD,x,2)

ans =

15.0366

>> SDU=subs(SD,x,[2:0.5:4])

SDU =

15.0366   21.9807   30.5634   40.9092   53.1781

-2개 이상의 기호변수에 수치값 대입:

R=subs(S,{var1,var2},{number1,number2})

>> syms a b c e x

>> S=a*x^e+b*x+c;

>> subs(S,{a,b,c,e,x},{5,4,-20,2,3})

ans =

37