Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Matlab Programming BasicsMatlab Programming BasicsMatlab Programming BasicsMatlab Programming Basics
프로그램 시작하기프로그램 시작하기프로그램 시작하기프로그램 시작하기1. MATLAB1. MATLAB1. MATLAB1. MATLAB
의 기본 명령어의 기본 명령어의 기본 명령어의 기본 명령어2. MATLAB2. MATLAB2. MATLAB2. MATLAB
행렬 및 벡터의 기본 연산행렬 및 벡터의 기본 연산행렬 및 벡터의 기본 연산행렬 및 벡터의 기본 연산3.3.3.3.
기초 수학 함수들기초 수학 함수들기초 수학 함수들기초 수학 함수들4.4.4.4.
동명대학교 정보호호학과 이석환 교수
프로그래밍 기초프로그래밍 기초프로그래밍 기초프로그래밍 기초MatlabMatlabMatlabMatlab
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
본 장에서는 기초 사용자를 위하여 간단한 사용 방법에 대하여 살펴보기로 한다 본 교재에서는MATLAB .
버전을 기반으로 하였으며 수치해석에 필요한 기본 명령어 위주로 설명하고자 한다MATLAB 6.0 , .
에 관한 자세한 내용을 원하는 분들은 사의 를MATLAB The MathWorks helpdesk
(http://www.mathworks.com 참고하길 바란다/access/helpdesk/help /helpdesk.html) .
1 프로그램 시작하기프로그램 시작하기프로그램 시작하기프로그램 시작하기MATLABMATLABMATLABMATLAB
먼저 소프트웨어 용 를 설치한 후에 바탕화면의 아이콘MATLAB 6.0 (Windows ) , MATLAB 또는 시[
작 모든 프로그램 에서 실행 파일을 실행하면 아래 그림에서와 같이 명령창]-[ ]-[MATLAB] , MATLAB
이 나타난다(Command Window) .
그림 명령창1-1. MATLAB
왼쪽 부분에서는 및 등이 나타나며 이들Launch Pad/Workspace Command History/Current History ,
은 메뉴바의 내에 선택되어진다 각 메뉴에 대한 자세한 내용은 사의 홈페이지를 참View . The Mathworks
고하기 바란다 오른쪽의 명령창은 사용자가 해석기 를 통하여 실행되어지는 것으로. MATLAB (Interpreter) ,
이 해석기는 사용자로부터 명령을 받아들일 준비가 되어 있다는 것을 알리기 위하여 프롬프트를 화면‘>>’
에 표시한다 이 때 사용자는 명령을 입력하여 실행시킬 수 있다 예를 들어. , MATLAB . ,
에서 일 때 의 값을 구하기 위하여
>> x=2; y=x^2+x+1
와 같이 명령창에 입력하면
y =
7
의 결과가 명령창에 나타난다 여기서 명령창에 입력하고자 하는 각 프로그램들의 명령어들을 각각 편집하. ,
기 위하여 또는 임의의 파일로 저장하기 위하여 의 를 실행한다[File] - [New] - [M-file] M-file Editor .
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
에서 각 프로그램들을 작성한 후 이들을 명령창에 복사하여 실행한다 이 때M-file Editor , MATLAB . , M-file
에서 작성된 파일은 의 확장자를 가지는 파일로 저장된다Editor *.m .
그림 편집창1-2. M-file
본 교재에서는 각 장의 예제들을 풀이집에 근거하여 의 을 작성하였다 여기에 필요한 기MATLAB M-file .
본적인 명령어들은 본 장에서 설명하며 각각의 예제에 응용되는 명령어들은 을 통하여 설MATLAB , M-file
명하기로 한다.
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
2 의 기본 명령어의 기본 명령어의 기본 명령어의 기본 명령어MATLABMATLABMATLABMATLAB
행렬의 사용법행렬의 사용법행렬의 사용법행렬의 사용법■■■■
에서 사용되는 연산 및 명령들은 행렬 형식으로 표현된다 즉 다른 프로그래밍 언어에서의 배열MATLAB . ,
형식과 유사하다 그러나 사용 가능한 크기까지 자동적으로 자동 공간을 할당해 주므로 다른 프로그래밍. ,
언어들과는 달리 차원 선언이나 형 선언이 없다.
예를 들어 임의의, × 행렬 에서 각 원소들의 입력 방법은
>> A=[1 2 3; 4 5 6; 7 8 9]
>> A=[1 2 3
4 5 6
7 8 9]
와 같다 즉. ,
임의의 행렬은 대괄호 로 시작과 끝을 표시한다[ ] .․각 행의 원소들은 빈 칸 키 또는 쉼표 를 사용하여 구분한다(space_bar ) (,) .․세미콜론 또는 키로 각 행의 끝을 표시한다(;) Enter .․
참고참고참고참고※※※※
명령문 끝의 세미콜론 은 키 또는 키 입력하였을 때 명령문을 실행하나 화면에 결과가(;) ENTER Return ,
출력되지 않는다 만약에 명령문 끝에 세미콜론이 없으면 이에 대한 결과가 화면에 출력된다. .
>> A=[1 2 3; 4 5 6; 7 8 9];
>> A=[1 2 3; 4 5 6; 7 8 9]
A=
1 2 3
4 5 6
7 8 9
큰 원소를 가지는 행렬일 경우 전자의 경우가 유용할 것이다.
특정한 개수의 값을 가지는 변수에 대한 함수값을 구하려고 한다면 위의 행렬 입력 방법이 유용하다 예, .
를 들어, 에서 일 때 각각의 를 구하고자 한다면
>> x=[1, -2, -3, 4];
>> y=1+abs(x)
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
입력하여 결과를
y=
2 3 4 5
와 같이 확인한다 를 이용한 행렬 연산 방법은 장에서 자세히 살펴보기로 한다. MATLAB 2 .
의 산술문 및 변수의 산술문 및 변수의 산술문 및 변수의 산술문 및 변수MATLABMATLABMATLABMATLAB■■■■
에서 산술문은MATLAB
변수 수식>> =
또는
수식>>
와 같은 형태를 가진다 수식은 변수 연산자 특수 문자 함수 등으로 구성된다. , , , .
변수는 임의의 값 벡터 또는 행렬을 가지며 변수명 및 함수명은 영문자로 시작되는 자 이하의 문자, , 30
및 숫자를 사용하여 지정한다 여기서 밑줄 기호 를 제외한 특수 문자는 변수명 및 함수명에는 사용되지. ‘_’
않는다 그리고 대문자와 소문자를 구별하며 변수는 항상 소문자를 사용하여야 한다 예를 들어 는 임의. , . X
의 크기를 가지는 행렬을 나타내며 는 임의의 값 또는 벡터를 나타낸다 예를 들어 임의의 벡터 변수, x . , x
가 일 때[0, 1, 2, 3, 4, 5] , 를 구하려면
>> x=0:1:5; 시작값 증가 감소값 끝값%0 : , 1 : / , 5 :
>> y=1./(1+x.^2)
와 같이 작성한다 여기서 주의해야 할 점은 벡터 및 행렬 연산에서는 동일한 차원 를 가져야. (Dimension)
하며 연산 내에 벡터 및 행렬 변수에 를 사용한다 두 행렬 및 의 곱행렬 는, ‘.’ . A B C
>> A=[1 2 3; 4 5 6];
>> B=[2 4 6; 1 4 5];
>> C = A.*B
와 같이 작성하여 결과를 나타낸다.
에서는 주석 및 설명을 위한 문장을 위하여 을 사용한다 즉 로 시작되는 명령문은 실행MATLAB ‘%’ . , ‘%’
되지 않는다.
출력 형식출력 형식출력 형식출력 형식■■■■
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
화면에 출력되는 결과값의 정밀도는 의 기본 설정에 따라 소수 자리까지의 배정도MATLAB 4 (Double
으로 정해져 있으며 이는 명령어에 따라 표현 정밀도를 바꿀 수 있다 이 명령어는 화Precision) , ‘format' .
면에 출력되는 값의 자릿수만 변경시킬 뿐이며 변수값 자체의 정밀도는 바뀌지 않는다, .
명령어로 바뀐 이후에 화면에 출력되는 모든 결과 값 들은 이의 정밀도로 표현된다'format' .
>> pi %Default
ans =
3.1416
>> format short; pi
ans =
3.1416
>> format short e; pi
ans =
3.1416e+000
>> format long; pi
ans =
3.14159265358979
>> format long; pi
ans =
3.141592653589793e+000
>> format rat; pi
ans =
355/113
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
3 행렬 및 벡터의 기본 연산행렬 및 벡터의 기본 연산행렬 및 벡터의 기본 연산행렬 및 벡터의 기본 연산
에서의 기본 자료형식은 행렬 및 벡터이다 따라서 에서는 다른 프로그래밍 언어와는 달MATLAB . MATLAB
리 연산시 행렬 및 벡터의 차원 에 주의하여야 한다, (Dimension) .
행렬 및 벡터의 산술 연산행렬 및 벡터의 산술 연산행렬 및 벡터의 산술 연산행렬 및 벡터의 산술 연산(Arithmetic Operation)(Arithmetic Operation)(Arithmetic Operation)(Arithmetic Operation)■■■■
산술 연산 행렬 벡터
덧셈 (addition) A+B A+B
뺄셈 (subtraction) A-B A-B
곱셈 (multiplication) A*B A.*B
오른쪽 나눗셈 (right division) A/B A./B
왼쪽 나눗셈 (left division) A\B A.\B
거듭제곱 (power) A^B A.^B
전치 (transpose) A' A.'
은 행렬 및 벡터에 대한 산술 연산자를 가지며 행렬 산술 연산자는 선형 대수MATLAB , (linear algebra)
법칙에 의하여 정의되고 배열 산술 연산자는 원소 대 원소로 실행된다 행렬 연산자로부터 배열 연산자를, - - .
구별하기 위하여 주기기호 가 쓰인다 그러나 행렬 및 배열 연산자는 합 차 에서는 동일하므로(.) . , (+), (-) .+
및 가 사용되지 않는다.- .
1) +, - : A+B, A-B
및 는 같은 크기를 가지거나 또는 중의 하나가 임의의 스칼라 이어야 한다A B , A B (Scalar) .
예를 들어 또는 이다, A+3 A-2 .
2) * (Matrix Multiplication) : C=A*B
행렬 및 의 선형 대수 곱이다 즉A B . ,
3) .* (Array Multiplication) : C=A.*B
배열 및 의 원소 대 원소 간의 곱이다A B - - .
즉,
4) / (Matrix Right Division) : C=A/B=(B'\A')' A*B-1≃
5) ./ (Array Right Division) : C=A./B,
배열 및 는 같은 크기를 가진다A B .
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
6) \ (Matrix Left Division)
가 정방행렬 이면 와 동일하다- A (Square Matrix) , A\B=inv(A)*B .
가- A × 행렬이고 가, B 원소의 행 벡터 또는 여러 개의 행 벡터를 가지는 행렬이면,
는 가우시안 소거법에 의하여 계산된 방정식의 해이다X=A\B AX=B .
가- A × 행렬이고(≠ 가), B 원소의 행 벡터 또는 여러 개의 행 벡터를 가지는
행렬이면 는 의 방정식 에서 최소자승법에 의한 해, X=A\B under-/over-determined system AX=B
이다.
7) .\ (Arrary Left Division) : C=A.\B,
배열 및 는 같은 크기를 가진다A B .
8) ^ (Matrix Power) : X^p
가 임의의 스칼라이면 급수는 반복된 곱셈이다 음수이면 역급수- p , . ( )
의 다른 값에서는 고유치 및 고유벡터를 계산할 수 있다 즉 이면- p . , [V,D]=eig(X) ,
이다X^p=V*D.^p/V .
가 스칼라이고 가 행렬이면 는 고유치 및 고유벡터를 사용한 행렬 급수 로 를 제곱한 것- x P , x^P P x
이다.
및 가 모두 행렬인 는 오류이다- X P X^P .
9) .^ (Array Power) : C=A.^B,
배열 및 는 같은 크기를 가진다A B .
10) ' (Matrix Transpose) : A'
행렬 의 선형 대수적 전치 행렬이다 가 복소 행렬일 경우 는 복소 공액A . A , A' (Complex
전치 행렬이다Conjugate) .
11) .‘ (Array Transpose) : A.'
배열 의 전치 배열이다 가 복소 행렬일 경우 공액은 포함되지 않는다A . A , .
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
예제 두 벡터[ 1.1] , 일 때 각각의 행렬 및 배열 연산자들의 결과는 다음과 같,
다 이 때 출력 형식은 이다. 'format rat' .
행렬 연산 배열 연산x 1 2 3 y 4 5 6
x'
1
2
3
y'
4
5
6
x+y 5 7 9 x-y -3 -3 -3
x+2 3 4 5 x-2 -1 0 1
x*y Error x.*y 4 10 18
x'*y 32 x'.*y Error
x*y'
4 5 6
8 10 12
12 15 18
x.*y' Error
x*2 2 4 6 x.*2 2 4 6
x\y 16/7 x.\y 4 5/2 2
2\x 1/2 1 3/2 2./x 2 1 2/3
x/y
0 0 1/6
0 0 1/3
0 0 1/2
x./y 1/4 2/5 1/2
x^y Error x.^y 1
x^2 Error x.^2 1 4 9
2^x Error 2.^x 2 4 8
(x+i*y)'
1-4i
2-5i
3-6i
(x+i*y).'
1+4i
2+5i
3+6i
행렬과 벡터의 조작법행렬과 벡터의 조작법행렬과 벡터의 조작법행렬과 벡터의 조작법■■■■
벡터의 생성벡터의 생성벡터의 생성벡터의 생성(1)(1)(1)(1)
형식 벡터변수 시작값 증가값 끝값- : = : :
증가값이 지정되지 않고 시작값 끝값 일 경우 증가값은 로 지정된다- ‘ : ’ , 1 .
는x=[1 2 3 4 5] >> x=1:5
는y=[0.0 0.5 1.0 1.5 2.0 2.5 3.0] >>y=0:0.5:3
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
예제[ 1.2] x = [0 0.2 0.4 0.6 0.8 1.0]일 때, y= sin (x)×e - x의 값을 구하시오.
에서 씩 증가하여 까지의 모든0.0 0.2 1.0 x를 크기의 벡터로 생성하면 이다 즉1×n x=[0: 0.2: 1]' . ,
x=[0: 0.2: 1]' → x =
0.00.20.40.60.81.0
에 대한 는 에 의하여 구하여진다 여기서 가 벡터이므로 다음에 점 이 필요하x y sin(x).*exp(-x) . x sin(x) “.” ( )
다 그리고 결과값 또한. y
y=
0.00000.16270.26100.30990.32230.3096
벡터이다 이 두 행렬을 와 같이 결합하면. [x y]
[x y] →
0.0 0.00000.2 0.16270.4 0.26100.6 0.30990.8 0.32231.0 0.3096
와 같은 결과가 나타난다.
프로그래밍프로그래밍프로그래밍프로그래밍MatlabMatlabMatlabMatlab■■■■
>> x=[0: 0.2: 1]';
>> y=sin(x).*exp(-x);
>> [x y]
ans =
0 0
0.2000 0.1627
0.4000 0.2610
0.6000 0.3099
0.8000 0.3223
1.0000 0.3096
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
행렬 및 벡터 내의 첨자 기능행렬 및 벡터 내의 첨자 기능행렬 및 벡터 내의 첨자 기능행렬 및 벡터 내의 첨자 기능(2)(2)(2)(2)
행렬 벡터 및 다차원 배열들 내의 선택된 행 또는 열들을 표시하기 위하여 콜론 첨자가 이용된다 다, , (:) .
음은 행렬 의 원소 또는 일부 원소들을 표시하기 위한 방법들이다.
행렬 의 번째 열을 선택A(:,j) : A j
행렬 의 번째 행을 선택A(i,:) : A I
동등한 차원 배열A(:,:) : 2 A
A(j:k) : A(j), A(j+1),...,A(k)
A(:,j:k) : A(:,j), A(:,j+1),...,A(:,k)
차원 배열 의 번째 페이지A(:,:,k) : 3 A k
차원 배열 에서의 임의의 벡터 이 벡터는A(i,j,k,:) : 4 A , A(i,j,k,1),
등을 포함한다A(i,j,k,2), A(i,j,k,3), ... .
임의의 한 열로 구성된 의 모든 원소들A(:) : A
예를 들어 명령어는 첫 번째 페이지가 모두 을 가지는 차원 배열을 생성한다, << A(:,:,2) = pascal(3) 0 3 .
A(:,:,1) =
0 0 0
0 0 0
0 0 0
A(:,:,2) =
1 1 1
1 2 3
1 3 6
여기서 명령어는 번째 페이지의 번째 행인 을 나타낸다<<A(:,2,2)' 2 2 [1 2 3] .
기본적인 행렬 생성 함수들기본적인 행렬 생성 함수들기본적인 행렬 생성 함수들기본적인 행렬 생성 함수들(3)(3)(3)(3)
만으로 구성된 행렬zeros - 0․<< B=zeros(m,n) : × 크기의 행렬인0 B
만으로 구성된 행렬ones - 1․<< Y=ones(m,n) : × 크기의 행렬인1 Y
구간에 균등 분포된 난수rand - [0 1]․들의 행렬(Uniformly distributed random number)
<< Y=rand(m,n) : × 크기의 균등 분포 난수 행렬인 Y
평균 표준편차가 인 정규 분포된randn - 0, 1 (Normally distributed)․난수들의 행렬
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
<< Y=randn(m,n) : × 크기의 정규 분포 난수 행렬인 Y
단위 행렬eye - (identity matrix)․등간격의 벡터linspace -․대수적 간격의 벡터logspace -․
각각의 함수들에 대한 자세한 사항은 를 참고하길 바란다MATLAB Help .
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
4 기초 수학 함수들기초 수학 함수들기초 수학 함수들기초 수학 함수들
은 기초에서부터 고급 수준의 많은 수학적 함수를 가지고 있다 본 절에서는 에서 제공하MATLAB . MATLAB
는 간단한 기초 수준의 수학 함수들에 대해서만 살펴보기로 한다.
삼각함수삼각함수삼각함수삼각함수(Trigonometric Functions)(Trigonometric Functions)(Trigonometric Functions)(Trigonometric Functions)■■■■
함수의 정의역 및 범위는 복소치를 포함하며 모든 각의 값들은 라디안 으로 표현된다(Domain) , (Radian) .
삼각함수 내 용
sin(x) sine․cos(x) cosine․tan(x) tangent․
asin(x)
inverse sine․내의 에 대하여 는 내에 존재[-1,1] x asin(x) [-pi/2, pi/2]․이외의 에 대하여 는 복소치[-1,1] x asin(x)․
acos(x)
inverse cosine․내의 에 대하여 는 내에 존재[-1,1] x acos(x) [0, pi]․이외의 에 대하여 는 복소치[-1,1] x asin(x)․
atan2(y,x)사분면4 inverse tangent․의 실수부만 계산x, y․
sinh(x) ․
cosh(x) ․
tanh(x) ․
asinh(x) ․ acosh(x) ․
예제 다음 함수의 값을 각각 구하시오[ 1.3] .
1) sin(x), x = π/2
2) cos(x), x = π + π/4 i
3) sin(x), x = [ ]0 π/4 π/2 π
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
는 라디안의 실수값이므로 다음과 같이 구한다1) x .
>> x=pi/2; sin(x) %x is real value in radian
ans=
1
는 라디안의 복소수이므로 다음과 같이 구하면 결과는 실수 허수 형태로 나타난다2) x , “ + ” .
>> x=pi+i*pi/4; cos(x) % x is complex value in radian
ans=
-1.3245 - 0.0000i
는 크기의 배열이므로 다음과 같이 구하면 결과 또한 동일한 크기의 배열로 나타난다3) x 1×4 , y .
>> x=[0 pi/4 pi/2 pi]; y=sin(x) %x is array, y has the same size of x
y=
0 0.7071 1.000 0.000
이외의 기초 함수들이외의 기초 함수들이외의 기초 함수들이외의 기초 함수들■■■■
수학함수 내 용
abs(x) ․ 가 복소치이면 복소 크기, x
angle(x) 복소치 의 위상 라디안x ( ) [-pi pi]․sqrt(x) ․ 가 음수 또는 복소치이면 는 복소치, x sqrt(x)
real(x) 복소치 의 실수부x․imag(x) 복소치 의 허수부x․conj(x) 의 복소 공액x․round(x) 에서 가장 가까운 정수x․floor(x) 와 같거나 작은 정수 중 에서 가장 가까운 정수x , x․ceil(x) 와 같거나 큰 정수 중 에서 가장 가까운 정수x , x․sign(x) x=1 if x>0, x=-1 if x<0, and x=0 if x=0․rem(x/y) 의 나머지x/y․exp(x) ․log(x) ․log10(x) ․
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
예제 다음의 값을 각각 구하시오[ 1.4] .
1)
2) ∠
3) x = 1.9일 때, x의 가장 가까운 정수, x와 같거나 작은 정수 또는 작은 큰 수 중 가장 가까운 정
수
4) log e(10), log 10(10)
프로그래밍프로그래밍프로그래밍프로그래밍MatlabMatlabMatlabMatlab■■■■
>> abs(-3+4i) %
= 5
>> angle(1-i) % ∠
= -0.7854
>> round(1.9), floor(1.9), ceil(1.9)
= 2 1 2
>> log(10), log10(10)
= 2.3026 1
간단한 함수들간단한 함수들간단한 함수들간단한 함수들■■■■
배열 내 원소를 오름차순으로 정렬sort :․는 행 벡터 열 벡터 또는 행렬이 될 수 있다- B = sort(A) : A , .
스칼라 에 의해 결정된 의 크기에 따라 원소들을 정렬- B = sort(A,dim) : dim A
벡터 지수 의 배열 는 의 배열- [B,INDEX] = sort(A,...) : (index) . INDEX size(A)
배열 내 원소들의 합sum(x) : x․배열 내 최대값max(x) : x․배열 내 최대값min(x) : x․배열의 차원size(x) : (dimensions)․벡터의 길이 공집합이 아닌 배열에서는 와 같음length(x) : , max(size(x))․
이외의 많은 수학 함수들은 를 참고하길 바란다MATLAB Help .
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
관계 연산자 및 논리 연산자관계 연산자 및 논리 연산자관계 연산자 및 논리 연산자관계 연산자 및 논리 연산자■■■■
관계 연산자관계 연산자관계 연산자관계 연산자(1)(1)(1)(1)
동일한 차원의 두 입력에 대하여 아래 표의 관계 연산자를 수행한다 결과 값은 관계 연산의 조건이 참일.
경우에는 을 거짓을 경우에는 으로 나타낸다1 , 0 .
관계 연산자 내 용
A<B 가 보다 작으면 참 아니면 거짓A B (1). (0)
A<=B 가 보다 같거나 작으면 참 아니면 거짓A B (1), (0)
A>B 가 보다 크면 참 아니면 거짓A B (1). (0)
>= 가 보다 같거나 크면 참 아니면 거짓A B (1), (0)
== 가 와 같으면 참A B (1)
~= 가 와 다르면 참A B (1)
예제 행렬 및 이 각각[ 1.5] A B A = [ 1 2 3 4 5] , B = [ 3 2 1 3 2]일 때 관계연산자, A<B, A<B,
을 각각 구하시오A~=B, A==B .
A= 1 2 3 4 5 A= 1 2 3 4 5 A= 1 2 3 4 5 A= 1 2 3 4 5
B= 3 2 1 3 2 B= 3 2 1 3 2 B= 3 2 1 3 2 B= 3 2 1 3 2
A>B 0 0 1 1 1 A<B 1 0 0 0 0 A~=B 1 0 1 1 1 A==B 0 1 0 0 0
프로그래밍프로그래밍프로그래밍프로그래밍MatlabMatlabMatlabMatlab■■■■
>> A=[1 2 3 4 5]; B=[3 2 1 3 2];
>> A>B, A<B, A~=B, A==B
ans=
0 0 1 1 1
ans=
1 0 0 0 0
ans=
1 0 1 1 1
ans=
0 1 0 0 0
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
예제 행렬 및 이 각각[ 1.6] A B A = [ 1 2 3 4 5] , B = [ 3 2 1 3 2]일 때 행렬 의 길, C = [A,B]
이 최대값 보다 큰 원소 그리고 보다 큰 원소의 개수를 각각 구하시오, , 3 , 3 .
프로그래밍프로그래밍프로그래밍프로그래밍MatlabMatlabMatlabMatlab■■■■
>> A=[1 2 3 4 5]; B=[3 2 1 3 2];
>> C=[A,B], length(C), max(C), find(C>3), length(find(C>3))
C =
1 2 3 4 5 3 2 1 3 2
ans =
10
ans =
5
ans =
4 5
ans =
2
논리 연산자논리 연산자논리 연산자논리 연산자(2)(2)(2)(2)
동일한 차원의 두 입력에 대하여 아래의 표에 나타난 논리 연산자를 수행한다 입력치가 가 아니면 참. 0
이면 거짓 이다(1), 0 (0) .
논리 연산자 내 용
A&B논리곱․행렬 의 대응 원소들이 둘 다 이 아닐 경우 하나라도 이면A, B 0 1, 0 0․
A|B논리합․행렬 의 대응 원소들이 하나라도 인 경우 둘 다 이면A, B 1 1, 0 0․
~A논리부정․은 은1 0, 0 1․
예제 행렬 및 이 각각[ 1.7] A B A = [ - 3 2 9 0 4 ] , B = [ 1 0 2 1 8]일 때 관계연산자, A&B,
을 각각 구하시오A|B, ~A, (A>0) & (A<5) .
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
A= -3 2 9 0 4 A= -3 2 9 0 4 A= -3 2 9 0 4 A= -3 2 9 0 4
B= 1 0 2 1 8 B= 1 0 2 1 8 (A>0)
&(A<5)A&B 1 0 1 0 1 A|B 1 1 1 1 1 ~A 0 0 0 1 0 0 1 0 0 1
프로그래밍프로그래밍프로그래밍프로그래밍MatlabMatlabMatlabMatlab■■■■
>> A=[-3 2 9 0 4]; B=[1 0 2 1 8];
>> A&B, A|B, ~A, (A>0) & (A<5)
ans =
1 0 1 0 1
ans =
1 1 1 1 1
ans =
0 0 0 1 0
ans =
0 1 0 0 1
흐름 제어문흐름 제어문흐름 제어문흐름 제어문 (flow control statements)(flow control statements)(flow control statements)(flow control statements)■■■■
일반적인 프로그래밍 언어에서와 같이 에서도 다음과 같은 흐름 제어문을 포함하고 있다MATLAB .
if statements, switch statements, for loops, while loops
문문문문(1) if(1) if(1) if(1) if
단일 조건문-
조건 실행문>> if
>> end
조건이 참일 경우 실행문이 실행되고 조건이 거짓일 경우 문 다음으로 넘어간다, , if .
복수 조건문-
조건 실행문>> if 1 1
조건 실행문>> elseif 2 2
>> .....
실행문>> else n
>> end
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
여러 개의 조건들이 존재할 경우 복수 조건문이 사용된다 조건 이 참일 경우 실행문 이 수행되고 문. n , n if
을 빠져나온다.
행렬- 의 역행렬을 구하기 위하여 가 이 아닌 단일 조건문으로 다음과 구할 수 있다det 0 .
>> A=[2 5; 1 3];
>> if det(A)~=0 inv(A)
>> end
차의 마방진 을 생성하기 위하여 세 가지 조건이 필요하다- n (magic square) .
즉 이 홀수일 때 이 로 나누지 못하는 짝수일 때 이 로 나누어질 때 이다, 1) n , 2) n 4 , 3) n 4 .
>> if rem(n,2) ~= 0
>> M = odd_magic(n)
>> elseif rem(n,4) ~= 0
>> M = single_even_magic(n)
>> else
>> M = double_even_magic(n)
>> end
문문문문(2) switch(2) switch(2) switch(2) switch
문은 변수 또는 수식의 값에 따라 선택된 실행문을 수행한다 기본적인 형식은 다음과 같다switch . .
수식switch (scalar or string)
값case 1
실행문1 % Executes if expression is value1
값case 2
실행문2 % Executes if expression is value2
.
값case n
실행문n % Executes if expression is valuen
otherwise
실행문 % Executes if expression does not match any case
end
문의 수식이 값 이면 실행문 이 수행되며 그렇지 않으면 의 실행문이 수행된다switch n n , otherwise .
>> switch x
>> case -1
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
>> disp('negative one');
>> case 0
>> disp('zero');
>> case 1
>> disp('positive one');
>> otherwise
>> disp('other value');
>> end
변수 의 값이 이면 이 이면 이면 이외의 값이면x -1 ‘negative one' , 0 ’zero', 1 ‘positive one', ’other value'
가 화면에 출력 함수 된다(disp ) .
문문문문(3) for(3) for(3) for(3) for
문 내에 특정수 수만큼 실행문이 반복 수행된다 일반적인 형식은 다음과 같다for . .
변수 수식 초기값 증가값 끝값for = % : :
실행문
end
변수가 초기값으로 시작하여 실행문 수행한 후에 증가 값에 의하여 증가하여 끝 값이 될 때까지 실행문이
반복 수행한다 여기서 증가 값이 없는 경우에는 기본적으로 만큼 증가된다. 1 .
예제[ 1.8]
을 문을 이용하여 구하면 아래와 같다for .
합계 을 우선 으로 초기화한다 다음 을 에서부터 씩 증가하여 일 때까지 을 계속 더한다s 0 . i 1 1 10 i2 .
프로그래밍프로그래밍프로그래밍프로그래밍MatlabMatlabMatlabMatlab■■■■
>> s=0;
>> for i=1:10 는 씩 증가%i 1
>> 는s=s+power(i,2); % power(x,n)
>> end
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
예제[ 1.9] × 행렬Hilbert 을 생성하여라.
먼저 × 행렬 을 으로 초기화한다 행렬 는 차원이므로 이중 구문을 이용하여 번Hilbert a 0 . a 2 , for (i,j)
째 원소 에 을 대입함으로써 아래 프로그램에서와 같이 행렬을 구한다a(i,j) 1/(i+j -1) , Hilbert .
프로그래밍프로그래밍프로그래밍프로그래밍MatlabMatlabMatlabMatlab■■■■
>> a = zeros(n,n) % Preallocate matrix
>> for i = 1:n
>> for j = 1:n
>> a(i,j) = 1/(i+j -1);
>> end
>> end
문문문문(4) while(4) while(4) while(4) while
문과 유사하나 문은 수식의 조건이 참일 때까지 반복 수행한다 즉 이 아닌 원소를 가지는 수식for , while . , 0
이면 실행문을 계속 수행하고 이 되는 조건이면 수행을 멈춘다 일반적인 형식은 다음과 같다, 0 . .
수식 관계 연산식 포함while % ==, <, >, <=, >=, or ~=
실행문
end
예제[ 1.10] f(x ) = e x의 급수는Taylor f̂ ( x ) = 1 + x +x 2
2!+x 3
3!+ ⋯ 이다. 에서 뒤
의 항이 보다 작게 될 때의 급수 합과 을 구하고자 한다.
먼저 반복 횟수 을 급수에 의한 근사값 을 각 항의 값 을 로 초기화한다 구문에i 0, Taylor ex 1, a 1 . while
의하여 다음과 같이 구한다.
가 보다 작을 때까지 다음을 반복 수행한다a 0.00001 .①
에 를 더하고 를 씩 증가한다-1 ex a i 1 .①
을 와 같이 구한다-2 a (0.5^i)/factorial(i) .①
근사값 및 오차 를 계산하여 출력한다ex e = abs(exp(0.5)-ex) .②
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
프로그래밍프로그래밍프로그래밍프로그래밍MatlabMatlabMatlabMatlab■■■■
>> i=0; ex=1; a=1;
>> while a>=0.0001
>> ex=ex+a; i=i+1;
>> a=(0.5^i)/factorial(i);
>> end
>> i, ex, a, abs(exp(0.5)-ex)
그래픽 그리기그래픽 그리기그래픽 그리기그래픽 그리기■■■■
간단한 그래픽 함수간단한 그래픽 함수간단한 그래픽 함수간단한 그래픽 함수(1) MATLAB 2D/3D(1) MATLAB 2D/3D(1) MATLAB 2D/3D(1) MATLAB 2D/3D
에서는 높은 수준의 차원 및 차원 그래픽 함수들을 제공하고 있으며 각 그래프들에 주석을 추MATLAB 2 3 ,
가할 수 있도록 여러 가지 함수들을 제공하고 있다.
먼저 기본적인 차원 그래픽 함수들을 간략히 살펴보면 각각의 함수들은 입력을 행렬 및 벡터의 형태로2 ,
받아들이며 입력 자료에 따라 자동적으로 축의 배율을 설정해서 그래프를 그린다 각 그래프 함수들에 의, .
하여 그래프 형태를 설정한 후에 제목 축명 눈금 격자 및 그래프에 대한 설명 등을 아래의 함수에 의하, , ,
여 추가할 수 있다.
2D
그래픽
함수
plot 벡터 행렬의 열에 대하여 선형 배율의 그래프/
logplot 축 모두 로그 배율의 그래프x, y
semilogx 축은 로그 배율 축은 선형 배율의 그래프x , y
semilogy 축은 선형 배율 축은 로그 배율의 그래프x , y
추가
함수
title 그래프의 제목
xlabel 축명x
ylabel 축명y
text 문장을 그래프 상 임의의 위치에 표시
gtext 문장을 그래프 상 마우스에 의하여 지정된 위치에 표시
grid 눈금 격자 표시
차원 그래픽 함수들을 살펴보면 차원 공간을 표현하기 위하여 선 면 또는 와이어 프레임 등을 사용3 , 3 , ,
한다 함수들에는 등이 있다. plot3, contour, contour3, mesh, meshc, meshz, surf, surfc, surfl, fill3 .
본 교재에서는 함수를 이용한 그래픽을 나타내고자 하므로 나머지 함수들에 대한 자세한 내용plot 2D ,
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
은 를 참고하길 바란다MATLAB Help .
그래픽 함수그래픽 함수그래픽 함수그래픽 함수(2) plot(2) plot(2) plot(2) plot
형식○
plot(y)․가 실수이면 각각의 인덱스에 대한 의 행을 선으로 그림- y , y
가 복소수이면 는 와 동일- y , plot(y) plot(real(y), imag(y))
예제[ 1.11] ≦ ≦ 일 때 의 그래프를 그리시오.
함수 는 이고 는 각각 이다 즉 함수를y sin(x) , x 0:pi/50:2*pi . , x=[0, pi/50, 2*pi/50, 3*pi/50, , 2*pi]. plot…
이용하여 아래와 같이 작성하면 그래프가 출력된다.
프로그래밍프로그래밍프로그래밍프로그래밍MatlabMatlabMatlabMatlab■■■■
>> x=0:pi/50:2*pi; y=sin(x);
>> plot(y)
결과 그래프결과 그래프결과 그래프결과 그래프■■■■
그림 1-3. 의 그래프
plot(x1, y1, ‘LineSpec‘, ...)․의 모든 쌍에 선들을 그림- (xn, yn) .
이 행렬일 때 행렬의 행 또는 열에 대하여 벡터로 선으로 그려진다 이 때 행 또는 열에 대- xn, yn , .
한 벡터의 크기는 행렬의 것과
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
일치된다.
선의 형태 또는 색상 등을 지정- LineSpec :
기호 색상 기호 선의 형태
y yellow . point
m magenta o circle
c cyan x x-mark
r red + plus
g green * star
b blue - solid
w white : dotted
k black -. dashdot
-- dashed
h = plot(...)․선 객체에서 주어진 열벡터를 반환-
plot(... 'PropertyName', PropertyValue, ...)․에 의하여 생성된 모든 선 객체들의- plot ColorOrder,
의 위치 색상 및 크기 등의 성질을 지정LineStyleOrder, Marker ,
에서 디폴트로 지정되어 있음- MATLAB
예제[ 1.12] ≦ ≦ 일 때, 을 선의 형태가 및 이 되도록 그래‘0’ ‘*’
프를 그리시오.
는 예제 에서와 동일하게 작성한다 함수 및 는 및 이다 두 함수를 동일한 상x [ 1.11] . y1 y2 sin(x) cos(x) . x
에서 그리기 위하여 함수 내에 와 을 차례로 작성한다plot x, y1, '0' x, y2, '*' .
프로그래밍프로그래밍프로그래밍프로그래밍MatlabMatlabMatlabMatlab■■■■
>> x=0:pi/50:2*pi;
>> y1=sin(x); y2=cos(x);
>> plot(x,y1, 'o', x, y2, '*')
결과 그래프결과 그래프결과 그래프결과 그래프■■■■
는 으로 그려진 선이고 는 으로 그려진 선이다y1 ‘0’ , y2 ‘*’ .
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
그림 1-4. 의 그래프
예제[ 1.13] - π ≤ x≤π일 때, y= tan (sin (x ))- sin ( tan (x))의 그래프를 마커 및 라벨링을 지정하
여 그리시오.
는 이고 이를 각 에 대한 그래프는 아래의 함수를 이용한다y tan(sin(x)) - sin(tan(x)) , x=-pi:pi/10:pi plot .
함수 내에 를 제외한 인자를 살펴보면plot x, y , ‘-rs-rs-rs-rs는 선의 색상을 로 하고' Red , ’LineWidthLineWidthLineWidthLineWidth 는 선의 굵',2
기를 로 지정한다2 . 'MarkerEdgeColorMarkerEdgeColorMarkerEdgeColorMarkerEdgeColor', 'kkkk 는 마커의 라인 색상을 으로 지정하고' Black ,
'MarkerFaceColorMarkerFaceColorMarkerFaceColorMarkerFaceColor', 'gggg 는 마커의 채우기 색상을 으로 지정한다 마지막으로' Green . ‘MarkerSizeMarkerSizeMarkerSizeMarkerSize 은 마',10
커의 크기를 으로 지정한다10 .
다시 요약하면 다음과 같다.
선의 굵기 지정- LineWidth :
마커의 라인 또는 마커의 색상 지정- MarkerEdgeColor -
마커의 채우기 색상 지정- MarkerFaceColor -
마커의 크기 지정- MarkerSize -
프로그래밍프로그래밍프로그래밍프로그래밍MatlabMatlabMatlabMatlab■■■■
>> x = -pi:pi/10:pi;
>> y = tan(sin(x)) - sin(tan(x));
>> plot(x,y,'--rs','LineWidth',2, 'MarkerEdgeColor','k',...
'MarkerFaceColor','g',‘MarkerSize',10)
결과 그래프결과 그래프결과 그래프결과 그래프■■■■
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
그림 1-5. y= tan (sin (x))- sin ( tan (x))의 그래프
예제[ 1.14] - π ≤ x≤π일 때, y= sin (x )의 그래프를 그리고 그래프 상에 라벨 지정 축 명 및, , x, y
그래프의 제목을 넣으시오.
먼저 에 대한 를 에 의하여 다음과 같이 그린다x y plot(x,y) .
프로그래밍프로그래밍프로그래밍프로그래밍MatlabMatlabMatlabMatlab■■■■
>> x = -pi:.1:pi;
>> y = sin(x);
>> plot(x,y)
>> set(gca,'XTick',-pi:pi/2:pi)
>> set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})
>> xlabel('-\pi \leq \Theta \leq \pi')
>> ylabel('sin(\Theta)')
>> title('Plot of sin(\Theta)')
>> text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi\div4)',...
'HorizontalAlignment','left')
>> set(findobj(gca,'Type','line','Color',[0 0 1]),'Color','red',...
'LineWidth',2)
프로그램의 명령을 살펴보면,
Dept. of Information Security, Tongmyong University, Prof. Suk-Hwan Lee
1) set(gca,'XTick',-pi:pi/2:pi)set(gca,'XTick',-pi:pi/2:pi)set(gca,'XTick',-pi:pi/2:pi)set(gca,'XTick',-pi:pi/2:pi) 축 상의 눈금을, x [ - π π 이내로 하며] ,
set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})은 눈금 라벨을 [ - π , - π /2 , 0, π/2 , π 으로]
한다.
2) xlabel('-\pi \leq \Theta \leq \pi')xlabel('-\pi \leq \Theta \leq \pi')xlabel('-\pi \leq \Theta \leq \pi')xlabel('-\pi \leq \Theta \leq \pi')은 축 명을x - π ≤θ≤π으로 하고, ylabel('sin(\Theta)')ylabel('sin(\Theta)')ylabel('sin(\Theta)')ylabel('sin(\Theta)')
은 축명을y sin (θ)로 한다.
3) title('Plot of sin(\Theta)')title('Plot of sin(\Theta)')title('Plot of sin(\Theta)')title('Plot of sin(\Theta)')은 그래프의 제목을 Plot of sin (θ)로 한다.
4) text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi\div4)','HorizontalAlignment','left')text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi\div4)','HorizontalAlignment','left')text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi\div4)','HorizontalAlignment','left')text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi\div4)','HorizontalAlignment','left')은 그래프 상의
( - π/4 , sin ( - π/4 ) ) 위치에 sin (- π/4 )의 글자를 왼쪽 화살표와 함께 수평으로 왼쪽 정렬하여 나타
나게 한다.
5) set(findobj(gca,'Type','line','Color',[0 0 1]),'Color','red','LineWidth',2)set(findobj(gca,'Type','line','Color',[0 0 1]),'Color','red','LineWidth',2)set(findobj(gca,'Type','line','Color',[0 0 1]),'Color','red','LineWidth',2)set(findobj(gca,'Type','line','Color',[0 0 1]),'Color','red','LineWidth',2)은 그래프의 선을 색상Red
및 의 굵기로 나타나게 한다2 .
결과 그래프결과 그래프결과 그래프결과 그래프■■■■
그림 1-6. y= sin (x )의 그래프