Transcript 강의자료.
전산물리학 및 실습
담당 교수 이훈경
과학관 430호
교재 및 성적산출
An introduction to numerical methods: A matlab approach,
3rd edition, Abdelwahab Kharb & Ronald B. Guenther
중간시험(35)+기말시험(35)+레포트(15)+출석(15) = 100 점
추가점수 5점=태도 및 질문
수업 게시판, 조교, 실습실
과목게시판
http://hklee.konkuk.ac.kr/xe 에서 Lecture/2016 1학기/전산물리학
수업 조교
박민우 박사학생, 이메일: [email protected]
배현후 석사학생, 이메일: [email protected]
내용
• 프로그램을 활용하여 물리학의 이해를 목표로 한다.
• 이학 및 공학에서 널리 사용되는 Gnuplot, Matlab을 사용한다.
• Gnuplot, Matlab의 기본 언어 및 문법을 익히고 활용한다.
• Gnuplot, Matlab를 활용하여 역학 등 문제를 풀어 물리현상의 이해를 돕는다.
• Analytic하게 풀리지 않는 문제를 수치방법을 도입해 푼다.
Gnuplot
a command-line program that can generate two- and
three-dimensional plots of functions, data, and data fits
Download:
http://sourceforge.net/projects/gnuplot/files/
Addresses
http://people.duke.edu/~hpgavin/gnuplot.html
http://www.cs.hmc.edu/~vrable/gnuplot/using-gnuplot.html
http://www.packtpub.com/article/3d-plot-using-gnuplot
http://stackoverflow.com/questions/9080832/output-png-from-gnuplot-is-not-asgood-as-the-figure-from-prompt-shell
http://www2.yukawa.kyoto-u.ac.jp/~akira.ohnishi/Lib/gnuplot.html
http://stackoverflow.com/questions/19412382/gnuplot-line-types
그래프 선 및 색 조절
• linetype (lt)
• pointsize (ps)
• linewidth (lw)
• dashtype (dt)
• linecolor (lc)
•
•
•
•
plot sin(x) linetype 4 # use linetype color 4
plot sin(x) lt rgb "violet"
# one of gnuplot's named colors
plot sin(x) lt rgb "#FF00FF"
# explicit RGB triple in hexadecimal
plot sin(x) lt palette cb -45 # whatever color corresponds to -45
예
set linestyle 1 lt 2 lw 2 pt 3 ps 0.5 # in gnuplot 3.7
set style line 1 lt 2 lw 2 pt 3 ps 0.5 # in gnuplot 4.x
set linestyle 1 lt 1 lc 7 # black-solid
set linestyle 2 lt 2 lc 1 # red-dashed
set style line 1 lt 3 lw 8 # blue
set style line 2 lt 1 lw 4 # red
set style line 3 lt 2 lw 4 # blue
set colorsequence default|podo|classic
set terminal pngcairo dashed
set output 'test.png'
test
set output
set terminal postscript eps color colortext
set output 'test.eps'
test
set output
Filled curves (with filledcurves)
set size ratio 1
set parametric
set tra [0:2*pi]
set xra [-2:2]
set yra [-2:2]
plot cos(t),sin(t) w filledcu lt 3
Practices 1
set size ratio 1
set parametric
set tra [0:2*pi]
set xra [-2:2]
set yra [-2:2]
plot cos(t),sin(t) w filledcu lt 3
Matlab 기본 과 문법
Matlab의 특성
•
Matrix Laboratory = Matlab
•
수치 해석, 행렬 연산, 신호 처리 및 간단한 그래픽 기능
•
Fortran, C, Pascal 등 프로그래밍 언어를 사용하지 않고 수치 해석가능
•
User-friendly 한 특징을 가지고 있다.
•
•
이 장의 내용
–
MATLAB의 여러 창(window)들의 특성과 목적 기술
–
스칼라의 산술연산 및 기본 수학함수의 사용.
–
스칼라 변수들(할당 연산자)의 정의 및 변수들의 사용 방법
–
스크립트(script) 파일에 대한 소개와 간단한 MATLAB 프로그램의 작성, 저장 및 실행
MATLAB의 특징
–
Interpreter 방식의 언어
•
Compiler 방식의 언어( C, Pascal, Fortran 등)
–
수학계산 및 가시화(visualization)에 매우 편리함
–
선형대수, 데이터 분석, 신호처리, 수치적분 등 많은 과학계산용 내장함수를 제공함
–
사용자에 의한 함수 작성이 편리
–
배우기 쉽고 사용이 편하다.
–
다양한 분야의 광범위한 Toolbox를 제공
•
MATLAB을 실행하면, 데스크탑 창이 열리며, 기본 화면에는 Command Window, Current Directory
Window, Command History Window 등 세 개의 작은 창이 포함되어 있다.
•
창의 왼쪽 하단부에 있는 Start 버튼을 이용하여 MATLAB의 여러 도구와 기능에 접근할 수 있다.
•
명령어 창(Command Window)
–
–
MATLAB을 실행시키면 나타나는 메인 창.
Desktop 메뉴→Desktop Layout 메뉴에서 명령어 창의 모양을 선택함. “Command Window Only”
를 선택하면, 명령어 창 하나만 보임.
Default desktop layout
Command Window Only
창의 분리(undock)와 재결합(dock)
•
명령어 창은 MATLAB의 메인 창으
로 명령어의 실행, 사용자가 작성한
프로그램의 실행, 다른 창 열기, 소
프트웨어의 관리 등에 사용된다.
명령어 입력을 위해서는 커서 ‘|’ 가 프롬프트
‘ >> ’ 바로 뒤에 놓여야 함
명령어 입력을 위해서는 커서 | 가 프롬프트 >> 바로 뒤에 놓여야 한다.
명령어를 표시하고 Enter 키를 누르면, 명령어가 실행된다. 항상 직전에 입력한 명령어만 실
행되며, 전에 실행된 다른 것들은 변동이 없다.
명령어 창에서 커서를 윗줄로 옮겨서 이전 명령어를 수정하여 다시 실행시키는 것은 불가
능하다.
명령어와 명령어 사이에 콤마(,)를 넣어 여러 명령
어를 한 줄에 표시할 수 있으며, Enter 키를 누르면
왼쪽에서 오른쪽 순서대로 명령어가 수행된다.
명령어 창에서 커서를 윗줄로 옮겨서 이전 명령어
를 수정하여 다시 실행시키는 것은 불가능하다.
위쪽 방향키 ↑를 누를 때마다 이전에 입력했던 명령어가 역순으로 프롬프트 >> 다음에 나타난다. 명령어
가 >> 다음에 나타나면, 명령어를 수정하거나 그대로 실행시킬 수 있다. 아래쪽 방향키 ↓는 위쪽 방향키
와 반대의 순서대로 이전 명령어들을 불러낼 수 있다.
명령어가 너무 길어 한 줄에 쓸 수 없는 경우, 마침표 세 개 ...을 찍고 Enter 키를 누르면 다음 줄에서 이어
서 쓸 수 있다(총 4096 글자까지)
명령어 창에 명령어를 표시하고 Enter 키를 누르면, 명령어가 실행되어 출력이 명령어 창에
표시되는데, 명령어 끝에 세미콜론(;)을 붙이면 출력이 표시되지 않는다.
기호 %를 명령어 줄 제일 앞에 쓰면 이 줄은 주석문(comment)으로 지정되어 Enter 키를 눌러
도 실행이 되지 않는다. 같은 줄에서 명령어 다음에 % 기호와 텍스트를 같이 쓰게 되면, 주석
문은 명령어의 수행에 전혀 영향을 주지 않는다.
세미콜론은 결과의 양이 상당히 많거나 결과를 이미 알고 있을 때 유용하다.
여러 명령어를 한 줄에 쓸 때 명령어와 명령어 사이에 콤마 대신 세미콜론을 쓰면 출력이 화면에 표시
되지 않는다.
일반적으로 명령어 창에서 주석문을 붙일 필요는 없으나, 프로그램에서는 기술할 사항을 추가하거나
프로그램 설명을 위해 종종 주석문을 사용한다.
clc 명령어는 명령어 창에서 입력한 명령어들과 결과 출력물들을 지워서 명령어 창을 깨끗이
만든다.
clc 명령어로 이전에 수행된 어떠한 것도 변하지는 않으며, 이전에 정의된 변수들도 존재하며 재사용
이 가능하다. 방향키 ↑를 이용하여 이전 명령어를 불러낼 수도 있다.
스칼라 연산
•
MATLAB에서 사용하는 산술연산자들의 기호 :
연산
기호
예
덧셈
+
5+3
뺄셈
-
5-3
곱셈
*
5*3
오른쪽 나
눗셈
/
5/3
왼쪽 나눗
셈
\(\)
5\3(=3/5)
^
5^3(53 을 의미함)
지수연산
왼쪽 나눗셈을 제외한 나머지 기호들은 대부분의 계산기에서와 같다. 스칼라의 경우, 왼쪽 나눗셈
(left division)은 오른쪽 나눗셈(right division)의 역수이지만, 배열에 대한 연산(3장 참조)에 대해서는
왼쪽 나눗셈이 주로 사용된다.
•
MATLAB에서의 산술 연산 우선 순위
수학 연산
우선순위
1순위
괄호 ※ 괄호가 중첩된 경우, 가장 안쪽의 괄호부터 수행됨
2순위
거듭제곱
3순위
곱하기, 나누기(우선순위가 동등함)
4순위
더하기와 빼기
여러 연산이 포함된 식에서, 우선 순위가 더 높은 연산이 더 낮은 연산보다 먼저 수행된다.
둘 이상의 연산이 같은 우선순위를 가지면, 왼쪽에서 오른쪽으로 식이 수행된다.
계산 순서를 바꾸기 위해 괄호를 사용할 수 있다.
산술연산 예
소수점이하 15자리까지 표현
소수점이하 4자리까지 표현
명령어
설명
예
format short
0.001<수≤1000인 수를 소수점 이하 네 자리수의 고정소수점으로 표시함. 그
외의 범위의 수는 short e 형식으로 표시함.
>> 290/7
ans =
41.4286
format long
0.001<수≤1000인 수를 소수점 이하 15자리의 고정소수점으로 표시함. 그 외
범위의 수는 long e의 형식으로 표시함.
>> 290/7
ans =
41.42857142857143
명령어
format short e
설명
소수점 이하 네 자리수의 과학적 표기법으로 표
시함.
예
>> 290/7
ans =
4.1429e+001
>> 290/7
ans =
4.142857142857143e+001
format long e
소수점 이하 15 자리수의 과학적 표기법으로 표
시함.
format short g
고정소수점 표시와 부동소수점 표시 중에서 더
편한 방법으로 표시. 유효숫자는 5개
>> 290/7
ans =
41.429
format long g
고정소수점 표시와 부동소수점 표시 중 더 편한
방법으로 표시. 유효숫자는 15개.
>> 290/7
ans =
41.4285714285714
format bank
소수점 이하 두 자리까지만 표시함.
>> 290/7
ans =
41.43
format compact
화면에 많은 정보가 표시되도록 하기 위해 빈 줄을 제거함
format loose
format compact와 반대로 빈 줄을 삽입함
내장 함수
함수
예
설명
sqrt(x)
제곱근
>> sqrt(81)
ans = 9
nthroot(x, n)
실수 x의 실수 n제곱근.
(x가 음수이면, n은 홀수 정수이어야 함)
>> nthroot(80, 5)
ans = 2.4022
exp(x)
지수함수(ex)
>> exp(5)
ans = 148.4132
abs(x)
절대값
>> abs(-24)
ans = 24
log(x)
자연로그.
밑이 e인 로그(ln)
>> log(1000)
ans = 6.9078
log10(x)
밑이 10인 로그
>> log10(1000)
ans = 3.0000
factorial(x)
계승함수 x!
(x는 양의 정수이어야 함)
>> factorial(5)
ans = 120
•
전체 내장함수 목록은 Help Window에서 종류별로 분류된 목록을 참조한다.
variable_name = 수치 값 또는 계산 가능한 식
할당 연산자 =의 좌변은 한 개의 변수이름만을 포함할 수 있다. 우변이 수식인 경우 수치 값이 할당된 변수들은 수식
에 포함될 수 있다.
Enter 키를 누르면 우변의 수치 값이 변수에 할당되며, MATLAB은 다음 두 줄에 걸쳐 변수와 할당된 값을 화면에 표시
한다.
>> x=15 % 수 15가 변수 x에 할당됨
x=
15
>> x=3*x-12 % 새로운 값이 x에 할당됨
x=
33
명령어
설 명
clear
메모리에서 모든 변수들을 제거한다.
clear x y z
메모리에서 변수 x, y, z 만을 제거한다.
who
현재 메모리에 있는 변수들의 목록을 화면에 출력한다.
whos
현재 메모리에 있는 변수들의 이름과 크기, 바이트와 클래스에 대한 정보를 화면에
출력한다.
명령창의 내용을 모두 지운다 (Clears the Command window)
•
clc
•
exist(‘var’)
•
quit
•
helpwin
•
help 명령어
명령창에서 ‘명령어’에 간단한 설명을 보여준다
•
lookfor 단어
단어와 관련된 명령어를 찾아준다
‘var’ 이름의 파일이나 변수가 있는지 확인한다
MATLAB을 끝낸다
도움말 창을 연다
(명령어를 잘 모를 때 사용함)
•
cd
디렉토리 위치를 변경하거나 현재 위치를 알려준다
2 주차
벡터, 행렬, 함수
MATLAB 벡터, 행렬
•
행 벡터
– a=[1 2 3 4 5]
•
열 벡터
– b = [ 2 ; 4 ; 6 ; 8 ; 10 ]
– b = [ 2 4 6 8 10 ] ‘
– b(4)
•
‘ : 전치행렬
인덱스번호는 1부터 시작, 8출력
행렬
– c=[123;456;789]
– c(2,3)
(행번호, 열번호) 6출력
41
MATLAB 벡터, 행렬
• 콜론(:) 연산자
1부터 5까지 1씩 증가하는 행벡터
1부터 3까지 0.5씩 증가하는 행벡터
인덱스 2~4까지의 벡터 추출
42
MATLAB 벡터, 행렬
• 콜론(:) 연산자
2행, 인덱스 생략
3행, 1열과 2열
2~3행, 1~2열로 구성된 2x2 행렬 반환
43
MATLAB 벡터, 행렬
•
linspace(x1, x2, n)
– x1과 x2 사이의 등 간격 n개의 포인트 생성
•
logspace(x1, x2, n)
– 10x1과 10x2 사이에 지수적 등 간격 n개의 포인트 생성
44
MATLAB 벡터, 행렬
•
eye(n)
– nxn 단위행렬(identity matrix)
•
zeros(n,m)
– nxm 0행렬
•
ones(n,m)
– mxm 행렬(모든 원소의 값이 1)
•
…
45
행렬 연산
Operation
MATLAB Form
Comments
Array Addition
a+b
Array addition and matrix addition are identical
Array Subtraction
a–b
Array subtraction and matrix subtraction are identical
Array Multiplication
a.*b
Element-by-element multiplication of a and b. Both arrays
must be the same shape, or one of them must be a scalar
Matrix Multiplication
a*b
Matrix multiplication of a and b. The number of columns in
a must equal the number of rows in b.
Array Right Division
a ./ b
Element-by-element division of a and b : a(i,j) / b(i,j). Both
arrays must be the same shape, or one of them must be a
scalar.
a. ^ b
Element-by-element exponentiation of a and b : a(i,j) ^
b(i,j). Both arrays must be the same shape, or one of them
must be a scalar
Array Exponentiation
46
MATLAB을 이용한 행렬계산 3
• 행렬의 사칙연산
더하기
+
행렬간의 차원이 같아야 한다.
빼기
-
행렬간의 차원이 같아야 한다.
행렬간 곱하기
*
행렬간의 내부 차원이 같아야 한다.
/ (AB¹)
행렬간 나누기
\(A¹B)
행렬의 행렬식이 존재해야 한다.
행렬간의 내부 차원이 같아야 한다.
행렬요소간 곱하기
.*
행렬간의 차원이 같아야 한다.
행렬요소간 나누기
./
행렬간의 차원이 같아야 한다.
MATLAB을 이용한 행렬계산 1
•
variable = expression
* variable : 변수, 기본적으로 타
language에서의 지원 변수와 거의
유사한 형태를 지원
•
주석문 처리는 문장앞에 “%”.
•
행렬에서 행 구분은 “;”,
열 구분은 “ ” 또는 “,”.
•
– EX.
>> a = [1,2,3;4,5,6;7,8,9]
a=
1
4
7
>>
Command Windows에 출력되지 않는
다.
•
2
5
8
3
6
9
수식 표현 뒤에 “;”를 붙이면 결과값이
입력한 행렬은 Workspace에서 확인 가
능.
•
콜론(:)을 사용해서 증가나 감소하는 벡
터를 쉽게 만들 수 있다.
MATLAB을 이용한 행렬계산 2
>> a(1,3)
ans =
3
>> a(1,3)=4
a=
1 2 4
4 5 6
7 8 9
>> a(1:2,3)
ans =
4
6
>> a(1,1:3)
ans =
1 2 4
>> a(1,:)
ans =
1 2
4
>> a(:,:)
ans =
1 2
4 5
7 8
4
6
9
>> i = 0:0.1:0.5
i=
0 0.1000 0.2000
0.4000 0.5000
0.3000
행렬 연산 예제
• 덧셈/뺄셈
– a = [ 1 2 3 4 5 ]; b = [ 2 4 6 8 10];
– c=a+b
• 곱셈
– a = [ 1 2 3 4 5 ]; b = [ 2 4 6 8 10 ]’
– c=2*a
– a*b
• 외적(outer product)
– b*a
50
행렬 연산 예제
• 지수
– 정방행렬 ^지수승
• 배열 연산자(.연산자)
– 각 원소끼리 연산
– .*
– ./
– .^
51
Multi graphic 객체 사용하기
• subplot(MNI) or subplot(M,N,I)
– M(행의 갯수), N(열의 갯수), I(하부영역의 순서)
>> subplot(221)
>> subplot(222)
>> subplot(212)
•subplot(221)•subplot(222
•subplot(212)
PLOT 사용하기
• plot(xdata, ydata, 'color_linestyle_marker')
– xdata와 ydata의 크기가 일치해야 한다.
– 그래프의 속성은 무시해도 된다.
– 하나의 창 안에 여러 그래프를 동시에 그리려면..
• plot(x1, y1,’속성1’, x2, y2,’속성2’, x3, y3,’속성3’, ...)
그래프의 속성
가능한 선의 Color
가능한 선의 marker
Matlab
Symbol
Color
Matlab
Symbol
Color
Matlab
Symbol
Marker Style
Matlab
Symbol
Marker Style
c
하늘
g
초록
+
+
^
△
m
자주
b
파랑
o
o
v
▽
y
노랑
w
흰색
*
*
>
▷
r
빨강
k
검은색
.
●
<
◁
x
×
pentagram
☆
가능한 선의 Style
Matlab
Symbol
Style
Matlab
Symbol
Style
Square
□
hexagram
¤
-
Solid line
:
Dotted line
Diamond
◇
none
No marker
(default)
--
Dashed
line
-.
Dash-dot line
none
No Line
실 습 1.
• -pi < x < pi 일 때(단 x의 스텝은 0.05),
– figure(1)의 subplot(211)에
X축에 x, Y축에 a=cos(x)를 plot 하라.
– figure(1)의 subplot(212)에
X축에 x, Y축에 b=sin(x)를 plot 하라.
– figure(2)의 X축에 a, Y축에 b를 plot하라
실 습 1.
% 실습 1.
x= -pi:0.05:pi;
a=cos(x);
b=sin(x);
figure(1);
subplot(211);
plot(x,a);
subplot(212);
plot(x,b);
figure(2)
plot(a,b);
제목, 각 축의 이름, 격자 넣기
• title(‘그래프의 제목’)
– 그래프의 제목을 나타낼 때 사용한다.
• xlabel(‘X축 이름’)
– x축의 이름을 넣을 때 사용한다.
• ylabel(‘Y축 이름’)
– y축의 이름을 넣을 때 사용한다.
• zlabel(‘Z축 이름’)
– z축의 이름을 넣을 때 사용한다.
• grid
– 그래프 객체에 격자를 더하거나 없앤다.
범례, 축의 한계값 사용하기
• legend(‘문자열1’,‘문자열2’,...,정수)
• 문자열1:첫번째 그래프에 대한 범례
• 문자열2:두번째 그래프에 대한 범례
• axis([x1,x2,y1,y2])
• x1 : x축의 최소값, x2 : x축의 최대값
• y1 : y축의 최소값, y2 : y축의 최대값
• xlim([x1,x2]) : x축 제한
• ylim([y1,y2]) : y축 제한
실습 2.
• 실습 1의 각 그래프에 축의 이름을 붙인다.
• 실습 1의 각 그래프에 제목을 붙인다.
• 실습 1의 각 그래프에 격자를 넣는다.
• 실습 1의 cos(x), sin(x) 그래프를 하나의 그래프
(figure(3))에 그리고, 범례를 넣는다.
% 실습 2.
figure(1)
subplot(211)
xlabel('x');
ylabel('a');
title('a=cos(x)');
grid on;
figure(2)
xlabel('x');
ylabel('y');
axis([-2,2,-2,2]);
title('Graph of Circle');
grid on;
subplot(212)
xlabel('x');
ylabel('b');
title('b=sin(x)');
grid on;
figure(3)
plot(x,a,x,b);
legend('cos(x)','sin(x)');
xlabel('x');
ylabel('y');
grid on;
기본적인 그래픽 함수들
함 수
설
명
plot
x와 y축에 대해서 모두 선형 배율로 된 그래프
loglog
x와 y축에 대해서 모두 log배율로 된 그래프
semilogx
x축에 대해서는 log배율, y축에 대해서는 선형 배율로 된 그래
프
semilogy
x축에 대해서는 선형 배율, y축에 대해서는 log배율로 된 그래
프
plotyy
두 개의 y축 선형 배율을 가진다.
내장 함수
• Trigonometric Functions
Function
Description
cos(x)
Calculates cos x, with x in radians.
acos(x)
Calculates cos-1x, with the results in radians.
sin(x)
Calculates sin x, with x in radians.
asin(x)
Calculates sin-1x, with the results in radians.
tan(x)
Calculates tan x, with x in radians.
atan(x)
Calculates tan
mod(x,y)
Remainder, or modulo, function.
sqrt(x)
Calculates the square root of x.
>> sqrt(2)
ans =
1.4142
-1x,
with the results in radians.
64
내장 함수
• Round, Exponential, Logarithm
Function
Description
[value,index] =
max(x)
Returns the maximum value in vector x, and optionally the location of that
value.
[value,index] =
min(x)
Returns the minimum value in vector x, and optionally the location of that
value.
ceil(x)
Rounds x to the nearest integer towards positive infinity :
ceil ( 3.1 ) = 4 and ceil ( -3.1 ) = -3
fix(x)
Rounds x to the nearest integer towards zero :
fix ( 3.1 ) = 3 and fix ( -3.1 )= -3
floor(x)
Rounds x to the nearest integer towards minus infinity :
floor ( 3.1 ) = 3 and floor ( -3.1 ) = -4
round(x)
Rounds x to the nearest integer
exp(x)
Calculates ex.
log(x)
Calculates the natural logarithm log e x.
log2(x)
Calculates the natural logarithm log 2 x.
65
내장 함수
• Complex & Rational Numbers
Function
Description
abs(x)
Calculates |x|.
angle(x)
Returns the phase angle of the complex value x, in radians
conj(z)
Calculates conjugate of z.
imag(z)
Calculates imaginary part of z.
real(z)
Calculates real part of of z.
rat(x)
Calculates rational approximation of x
rats(x)
Calculates rational output of x
• Help
– help 함수명
66
함수 활용 예
• 자유낙하 속도 측정
v
gm
tanh
cd
gcd
m
t
v : 속도(m/s)
g : 중력가속도(9.81m/s2)
m : 질량(kg)
cd : 항력계수(kg/m)
t : 시간(s)
v=
0
18.7292
33.1118
42.0762
46.9575
49.4214
50.6175
51.1871
51.4560
51.5823
51.6416
t=[0:2:20]’;
g=9.81; m=68.1; cd=0.25;
v=sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t)
67
그래픽 표현
• Figure
–
–
–
–
–
–
–
–
–
plot
stem
stairs
bar
compass
pie
semilog
semilogx
semilogy
plot
stem
stairs
bar
compass
pie
68
그래픽 표현
•
Label
– xlabel (‘x_string’)
– ylabel (‘y_string’)
•
Title
– title (‘string’)
•
Legend
– Legends can be created with the legend function.
– The basic form of this function is
•
pos
legend(‘string1’, ’string2’, . . . , pos)
설명
pos
설명
0
Automatic “best” placement (least conflict with
data)
1
Upper right-hand corner (default)
2
Upper left-hand corner
3
Lower left-hand corner
4
Lower right-hand corner
-1
To the right of the plot
69
그래픽 표현
• Colors & Styles
Color
Marker Style
Line Style
y
yellow
.
point
-
solid
m
magenta
o
circle
:
dotted
c
cyan
x
x-mark
-.
dash-dot
r
red
+
plus
--
dashed
g
green
*
star
<none>
no line
b
blue
s
square
w
white
d
diamond
k
black
v
triangle (down)
^
triangle (up)
<
triangle (left)
>
triangle (right)
p
pentagram
h
hexagram
<none>
no marker
70
그래픽 표현
x=0:pi/100:2*pi;
y1=sin(2*x);
y2=2*cos(2*x);
plot(x,y1,'k-o',x,y2,'b--v')
title('Plot of f(x)=sin(2x)
and its derivative')
xlabel('x')
ylabel('y')
legend('f(x)','d/dx f(x)',4)
71
그래픽 표현
• 사랑의 방정식
17 x 2 16 x y 17 y 2 225
x=[-4.15:0.001:4.15];
a=17;
b=-16*abs(x);
c=17*x.^2 - 225;
y1=(-b+sqrt(b.^2 - 4*a.*c))/(2*a);
y2=(-b-sqrt(b.^2 - 4*a.*c))/(2*a);
plot(x,real(y1))
hold on
plot(x,real(y2))
grid on
72
함수 파일
• 함수 형식
function outvar = function_name(arglist)
% help comments
statements
outvar = value
– 예제) freefallvel.m
function velocity = freefallvel(m,cd,t)
% 자유낙하 속도 계산
% 입력) m:질량(kg), cd:항력계수, t:시간(초)
% 출력) t초 후 낙하 속도 출력
g = 9.81;
velocity=sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t);
>> freefallvel(68.1, 0.25, 12)
73
여러 개의 값 반환
• stats.m
–
function [ mean, stdev ] = stats (x)
n = length(x);
mean = sum(x) / n;
stdev = sqrt ( sum((x-mean).^2 / (n1)));
>> y =
>> [ m
m =
s =
[ 8 5 10 12 6 7.5 4 ]
, s ] = stats(y)
7.5000
2.8137
74
input 함수
• 형식
– n = input(‘prompt string’)
• 설명
– 명령창에 ‘prompt string’ 을 출력하고 값을 입력 받음
• 예제
– m = input(‘Mass (kg): ’)
>> Mass (kg): 68.1_
– name = input(‘Enter your name: ’,‘s’)
% 문자열 입력
>> enter your name: Matlab_
75
disp 함수
• 형식
– disp( value )
• 설명
– 명령창에 value 값 출력
• 예제
76
fprintf 함수
• 형식
– fprintf( ‘ format ’, arglist … )
• 설명
– 주어진 format에 맞춰 값을 출력
• 포맷 / 제어 코드
코드
설명
%d
정수 포맷
%e
e를 사용하는 과학 포맷
%E
E를 사용하는 과학 포맷
%f
소수 포맷
%g
%e나 %f 중에서 간단한 포맷
\n
새로운 줄로 시작
\t
탭
77
fprintf 예제
• fprintfdemo.m
– function fprintfdemo
x = [ 1 2 3 4 5 ];
y = [ 20.4 12.6 17.8 88.7 120.4 ];
z = [ x ; y ];
fprintf(‘
x
y \n’);
fprintf(‘ %5d %10.3f \n’, z);
– 결과
1
2
3
20.400
12.600
17.800
……
78
대화식 M-파일 작성
• freefallinteract.m
– function velocity = freefallinteract
% freefallinteract() : 자유낙하 속도 계산
g = 9.81;
m = input( ‘무게(kg) : ’);
cd = input( ‘항력계수(kg/m) : ’);
t = input( ‘시간(s) : ’);
disp( ‘낙하속도 (m/s) : ’ )
disp( sqrt(g*m/cd)*tanh(sqrt(g*cd/m)* t) )
• 실행
– >> freefallinteract
무게(kg) : 68.1
항력계수(kg/m) : 0.25
시간(s) : 12
낙하속도(m/s) : 50.6175
79
함수호출
• freefallinteract.m 수정
– function velocity = freefallinteract
% freefallinteract() : 자유낙하 속도 계산
m = input( ‘무게(kg) : ’);
cd = input( ‘항력계수(kg/m) : ’);
t = input( ‘시간(s) : ’);
disp( ‘낙하속도 (m/s) : ’ )
disp( freefallvel(m,cd,t) )
freefallvel.m의 freefallvel함수를 호출
80
관계/논리 연산
• 관계연산자
x == 0
==
Equal
unit ~= ‘m’
~=
Not equal
a<0
<
Less than
s>t
>
Greater than
3.9 <= a / 3
<=
Less than or equal to
r >= 0
>=
Greater than or equal to
~x
&y
• 논리x 연산자
x|y
~
Not
&
And
|
Or
81
판정 : if 구문
• 형식
– if condition
statements
end
• 설명
– condition 이 참(1)이면 statements 수행 거짓(0)이면 수행 안함
•
예제
– if grade >= 60
disp( ‘ passing grade: ’ )
disp( grade );
end
– if grade >= 60, disp( ‘ passing grade: ’ ), end
82
에러함수 : error
• 형식
– error( msg )
• 설명
– 텍스트 메시지 msg를 출력하고 m-파일 종료
• 예제
– if x == 0, error(‘Zero value encountered’), end
f = 1 / x;
83
if / else 구문
• mysign.m
– function sgn = mysign (x)
% mysign(x) : return 1 if x is greater then zero
%
-1 if x is less then zero
%
0 if x is equal to zero
if x > 0
sgn = 1;
elseif x < 0
sgn = -1;
else
sgn = 0;
end
84
for 구문
•
형식
–
•
설명
–
•
for index = start : step : finish
statements
end
index값을 start부터 finish까지 step씩 증가/감소 시키면서 statements를 반복 실
행
예제
–
i = 0;
for t = 0:0.02:50
i = i + 1;
y(i) = cos(t)
end
t = 0:0.02:50;
y = 5 * cos(t)
85
메모리 사전 할당
• t = 0:0.01:5;
for i = 1:length(t)
if t(i) > 1
y(i) = 1 / t(i);
else
y(i) = 1;
end
end
• t = 0:0.01:5;
y = ones( size(t) );
for i = 1:length(t)
if t(i) > 1
y(i) = 1 / t(i);
end
배열의 크기가 예측 가능하면
end
미리 메모리를 할당
86
while 구조
• 형식
–
while condition
statements
end
• 설명
– condition이 참(1)인 동안 statements를 반복 수행
• 예제
– while x > 0
x = x – 3;
disp( x )
end
while(1)
if x < 0, break, end
x = x – 5;
end
87
Gauss Elimination
function [ x ] = GaussNaive( A, b )
% GaussNaive(A,b) :
%
Gauss elimination without pivoting
% input:
%
A = coefficient matrix
%
b = right hand side vector
% output:
%
x = solution vector
[m,n] = size(A);
if m~=n, error('Matrix A must be square'); end
nb = n+1;
Aug = [A b];
88
Gauss Elimination
% forward elimination
for k = 1:n-1
for i = k+1:n
factor = Aug(i,k)/Aug(k,k);
Aug(i,k:nb) = Aug(i,k:nb)-factor*Aug(k,k:nb);
end
end
% back substitution
x = zeros(n,1);
x(n) = Aug(n,nb)/Aug(n,n);
for i = n-1:-1:1
x(i) = (Aug(i,nb)-Aug(i,i+1:n)*x(i+1:n))/Aug(i,i);
end
89
Gauss Elimination
• 실행결과
x1 + x2 + 2x3 = 9
2x1 + 4x2 – 3x3 = 1
3x1 + 6x2 – 5x3 = 0
>> A = [ 1 1 2 ; 2 4 -3 ; 3 6 -5 ];
>> b = [ 9 1 0 ]’;
>> GaussNaive(A,b)
ans =
1
2
3
90
Homework
• Gauss-Jordan Elimination
– Make a MATLAB program ‘GaussJordan.m’ runs as follows
>> A = [ 1 1 2 ; 2 4 -3 ; 3 6 -5 ];
>> b = [ 9 1 0 ]’;
>> GaussJordan(A,b)
ans =
1 0 0 1
0 1 0 2
0 0 1 3
– Refer two samples: GaussNaive.m, GaussianElimination.m
– Reference for MATLAB syntax: Matlab.pdf
91
Plots
x=[-1:0.02:2];
Y=x.^2+1
plot(x,y)
[x y]=meshgrid(-4.0:0.2:4.0,-4.0:0.2:4.0);
z=exp(-x.^2-y.^2);
mesh(x,y,z)
Other 3D plot commands: plots, surf
92
스크립트 파일
• M-파일 작성
– scriptdemo.m
g=9.81; m=68.1; t=12; cd=0.25;
v=sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t)
>> scriptdemo
93
MATLAB 파일
MATLAB은 명령창에서 명령어를 한 줄씩 직접 수행시키거나 파일에 수행할 모든 명령
어를 기록하고 저장한 후 파일을 수행시킬 수 있다.
반복된 명령어들을 수행시켜야 하거나, 어떤 조건이나 앞의 계산결과에 따라 후속 명령
어를 결정해야 하는 경우, 또는 다양한 입력데이터에 대해 같은 일련의 명령어들을 수행
해야 하는 경우에는 명령창에서의 대화식 모드는 불편하며 명령어가 저장된 파일을 이
용하여 실행시키는 것이 편리하다.
MATLAB용 파일 종류
M 파일, MAT 파일, MEX 파일, diary 파일, 입력데이터용 text
M 파일
스크립트(script) 파일과 함수(function) 파일 두 가지가 있으며, 매트랩에 내장된
Editor나 WINDOWS의 메모장을 이용하여 표준 ASCII 파일로 작성한다.
확장자는 m이다. 예) test.m
스크립트(Script) 파일의 특징
스크립트(script) 파일은 명령창에서 입력하는 명령들을 파일에 모두 저장한 형태로서, 프로그램이라고
도 한다.
스크립트 파일을 실행시키면, MATLAB은 파일 내의 명령어들을 명령어 창에서 입력하는 것처럼 파일
에 기록된 순서대로 실행시킨다.
스크립트 파일이 결과를 출력하는 명령어를 포함하고 있다면, 출력은 명령어 창에 표시되며, 그래픽 출
력은 그림 창(Figure Window)에 출력된다.
스크립트 파일은 편집, 수정, 변경이 가능하며 여러 번 실행시킬 수 있으므로 스크립트 파일을 이용하
는 것이 편리하다.
스크립트 파일은 어떠한 텍스트 편집기에서도 작성과 편집이 가능하며, MATLAB 편집기로 붙여넣기
할 수 있다.
스크립트 파일은 저장이 되면 확장자 .m이 사용되므로 M-파일이라고도 한다.
스크립트 파일의 실행으로 만들어진 변수는 전역변수(global variable)로서 workspace에서 저장되어 명
령어 창에서 언제든지 이용할 수 있다.
MATLAB m 파일의 생성
MATLAB 메뉴의 File→New→M-File을 선택하거나, 메뉴 밑의 Toolbar에서 아이콘 을 선
택하면, Editor 창이 실행된다. 이 Editor 창에서 프로그램을 작성하고 예를 들어 test.m으로
저장을 한 후, 매트랩 명령어 창에서 >> test 라고 입력하면 프로그램이 수행된다.
스크립트 파일의 생성과 저장
스크립트 파일의 이름은 MATLAB 변수 규칙을 따르며 MATLAB이 사용하는 변
수명이나 파일 내에서 사용하는 변수명과 같은 이름을 사용해서는 안 된다.
파일 저장은 File 메뉴에서 Save 또는 Save As...를 선택하고, 저장위치를 선택한
후 파일 이름을 입력한다. 저장할 때 MATLAB이 확장자 .m을 파일이름에 붙인
다.
•줄 번호
스크립트 파일 생성시 주의할 점
스크립트 파일의 이름은 변수 이름과 마찬가지로 문자로 시작해야 하며, 숫
자를 포함할 수 있고 이름의 길이는 31글자까지이다.
스크립트 파일의 이름을 파일 내의 변수 이름과 같이 하게 되면, 프로그램 수
행을 위해 스크립트 파일 이름을 입력했을 때 MATLAB은 변수 값을 돌려주
게 되므로 변수를 메모리에서 제거하지 않는 한 스크립트 파일을 실행시킬
수 없게 된다.
스크립트 파일 이름으로 MATLAB 명령어나 함수 이름을 붙이면 안 된다.
3차원 그래프 그리기
3차원 그래프 그리기
사용자 정의 함수 스크립트
1.수치 방법: Bisection method
f ( x) 0
Suppose f(a)f(b)<0
Let a0=a, b0=b
For n=0,1,…,ITMAX
c ← (an+bn)/2
if f(a)f(b)<0, set an+1=an, bn+1=c
Otherwise, set an+1=c, bn+1=bn
False position method
x3 x2 f ( x2 )
x2 x1
f ( x2 ) f ( x1 )
Suppose f(a)f(b)<0
Let a0=a, b0=b
For n=0,1,…,ITMAX
c ← ((f(bn)an−f(an)bn)/(f(bn)−f(an))
if f(a)f(b)<0, set an+1=an, bn+1=c
Otherwise, set an+1=c, bn+1=bn
Scant method
xn 1 xn f ( xn )
xn xn 1
f ( xn ) f ( xn 1 )
Newton’s method
xn 1 xn
f ( xn )
f ( xn )
연습 과제
f ( x) x 3 x 2 1
[1,2] 범위 안에서 f(x)가 영(zero)의 값을 갖는 x가 하나 존재한다.
1. 위 함수 f(x)를 범위 [0,5]에서 그래프를 그리시오.
2. Bisection method를 이용해 f(x)가 영이 되는 근사 값 x 를 f < 10-4 만족하는 범위에서 구하시오.
3. False position method를 이용해 f(x)가 영이 되는 근사 값 x 를 f < 10-4 만족하는 범위에서 구하시오.
4. Newton’s method를 이용해 f(x)가 영이 되는 근사 값 x 를 f < 10-4 만족하는 범위에서 구하시오.
Numerical differentiation
Numerical integration
몬테카룰로 방법을 이용한 적분
몬테카를로 방법(Monte Carlo method)은 난수를 이용하여 함수
의 값을 확률적으로 계산하는 알고리즘을 부르는 용어이다. 수학
이나 물리학 등에 자주 사용되며, 계산하려는 값이 닫힌 형식으로
표현되지 않거나 복잡한 경우에 근사적으로 계산할 때 사용된다.
스타니스와프 울람이 모나코의 유명한 도박의 도시 몬테카를로의
이름을 본따 명명하였다. 몬테카를로 방법은 적분을 할 때 활용된
다. f(x)를 (a,b)에서 정의된 확률밀도함수하고 하면 임의의 함수
의 적분은 다음과 같이 표현된다.
따라서, 을 에서 생성된 확률표본(난수) 이면,
으로 표현된다.
몬테카를로 알고리즘을 이용하여 원주율 (π)
를 계산하는 알고리즘을 제시하시오.