옥타브 / 매트랩¶
graphics_toolkit ("gnuplot"); % updated 2023.7
기초 문법¶
코드의 한 줄이 수행될 때마다 그 결과가 출력된다.
x = [ 1 2 3 4 ]
y = 2 * x
x = 1 2 3 4 y = 2 4 6 8
출력을 원하지 않거나 방지하려면, 줄의 끝에 세미콜론을 붙인다.
x = [ 1 2 3 4 ];
y = 2 * x
y = 2 4 6 8
% 기호를 붙이면, 그 다음에 쓰는 내용은 모두 설명문이 된다.
% 이후의 줄 끝까지 쓴 내용은 모두 설명문이다.
% 설명문을 쓰는 습관을 기르는 것이 좋다.
% 그렇지 않으면, 나중에는 자기가 만든 코드를 이해하지 못하게 된다.
printf( "아시겠죠? \n" )
아시겠죠?
두 배열 데이터를 그래프로 그린다.
plot( x, y )
행벡터의 원소는 공백 또는 쉼표 , 로 분리한다.
x = [ 1, 2, 3, 4 ]
x = 1 2 3 4
열벡터는 세미콜론 ; 으로 행을 구분한다.
y = [ 1; 2; 3 ]
y = 1 2 3
행렬을 입력하는 방법¶
세미콜론 또는 줄바꾸기로 행을 구분한다.
a = [ 1 2 3; 4 5 6 ]
a = 1 2 3 4 5 6
a = [ 1 2 3
4 5 6 ]
a = 1 2 3 4 5 6
원소값이 순차적으로 증가하는 배열 만들기
초기값 : 최종값
x = 1:5
x = 1 2 3 4 5
[ ] 안에 넣어줄 수도 있다.
x = [ 1:5 ]
x = 1 2 3 4 5
증가값이 1 이 아닌 경우는, 그 값을 가운데에 써준다.
초기값 : 증가값 : 최종값
x = 1 : 0.5 : 3
x = 1.0000 1.5000 2.0000 2.5000 3.0000
linspace( ) 함수를 이용하여, 구간을 일정한 간격으로 나누는 배열을 생성할 수 있다.
linspace( 초기값, 최종값, 원소들의 갯수 )
x = linspace( 0, 1, 6 )
x = 0 0.2000 0.4000 0.6000 0.8000 1.0000
배열과 숫자의 덧셈¶
배열에 숫자를 더하는 것은, 배열의 각 원소에 그 숫자를 더하는 것이다.
벡터의 수학에서는 허용되지 않는 연산이지만, 데이터를 다룰 때는 편리한 경우가 많다.
a = [ 1 2 3 ] ;
a + 5
ans = 6 7 8
배열과 숫자의 곱셈¶
배열에 숫자를 곱하는 것은, 배열의 각 원소에 그 숫자를 곱하는 것이다.
벡터의 수학에서 허용되는 연산이다.
a = [ 1 2 3 ] ;
a * 2
ans = 2 4 6
배열의 닷곱셈¶
크기가 같은 두 배열의 같은 위치에 있는 원소끼리 곱하는 연산이다.
수학적인 행렬 곱셈과는 다르다.
a = [ 1 2 3 ]
a = 1 2 3
b = [ 10 20 30 ]
b = 10 20 30
닷곱셈을 하는 두 배열은 크기가 같아야 한다.
a .* b
ans = 10 40 90
배열 연산¶
닷곱셈 연산과 비슷하게, 두 배열의 같은 위치에 있는 원소들 사이의 연산을 배열 연산이라 한다.
여러가지 배열 연산에 해당하는 연산자 기호를 나타내었다.
닷곱셈 $\quad .* $
닷나눗셈 $\quad ./ $
닷거듭제곱 $\quad . $ ^
함수 $ y = x^2 + 1 $, $ z = x e^{-x^2}$ 을 배열을 이용하여 만들고, 이를 그래프로 그려보자.
% 구간 [-1,1] 을 일정한 간격으로 100 개의 원소가 되도록 만든다.
% 배열 원소가 상당히 많으므로 출력은 하지 않는다.
x = linspace( -2, 2, 100 ) ;
% 배열 연산으로 y, z 를 구한다.
y = x.^2 + 1 ;
z = x .* exp(-x.^2) ;
% x와 y, x와 z를 그래프에 그린다.
plot( x, y, x, z )
내장 함수¶
함수의 입력 인자는 스칼라와 벡터 모두 가능하다.
x = 4
sqrt( x )
x = 4 ans = 2
x = [ 9, 16, 25 ]
sqrt( x )
x = 9 16 25 ans = 3 4 5
기본 수학 함수¶
함수 $\qquad$ | 반환값 |
---|---|
abs(x) | 절대값 |
exp(x) | 지수함수 |
log(x) | 자연로그 (밑이 e) |
log10(x) | 상용로그 (밑이 10) |
sign(x) | x>0 이면 1, x=0 이면 0, x< 0 이면 -1 |
근사 함수¶
함수 $\qquad$ | 반환값 |
---|---|
round(x) | x에 가장 가까운 정수 |
ceil(x) | ∞ 방향으로 x에 가장 가까운 정수 |
floor(x) | -∞ 방향으로 x에 가장 가까운 정수 |
fix(x) | 0 방향으로 x에 가장 가까운 정수 |
round( ) 는 반올림한 정수를 반환한다.
round(-0.6)
ans = -1
ceil(1.2)
ans = 2
floor(1.2)
ans = 1
ceil(-1.2)
ans = -1
floor(-1.2)
ans = -2
fix(-1.2)
ans = -1
이산수학 함수¶
함수 $\qquad \qquad$ | 반환값 |
---|---|
factor(x) | x의 소인수 |
gcd(x,y) | x 와 y의 최대공약수 |
lcm(x,y) | x 와 y의 최소공배수 |
rats(x) | x 를 분수로 표시 |
factorial(x) | x! = x (x-1) (x-2) ∙∙∙ 1 |
nchoosek(n,k) | $_n$C$_k$ = n! / k! / (n-k)! |
primes(x) | x보다 작은 소수 |
isprime(x) | x가 소수이면 1, 소수가 아니면 0 |
삼각 함수¶
함수 $\qquad$ | 반환값 |
---|---|
sin(x) | sine |
cos(x) | cosine |
tan(x) | tangent |
asin(x) | inverse sine |
sinh(x) | hyperbolic sine |
asinh(x) | inverse hyperbolic sine |
sind(x) | sine (입력이 degree 단위) |
asind(x) | inverse sine (출력이 degree 단위) |
데이터 분석 함수¶
함수 $\qquad$ | 반환값 |
---|---|
max(x) | x의 (각 열의) 최대값 |
min(x) | x의 (각 열의) 최소값 |
mean(x) | x의 (각 열의) 평균값 |
median(x) | x의 (각 열의) 중앙값 |
sum(x) | x의 (각 열의) 원소들의 합 |
prod(x) | x의 (각 열의) 원소들의 곱 |
sort(x) | x의 (각 열의) 원소들을 오름차순 정렬 |
x = [ 1 5 3 ] ;
max( x )
ans = 5
x가 행렬이면 각 열의 최대값을 구한다.
x = [ 1 5 3; 2 4 6 ]
max( x )
x = 1 5 3 2 4 6 ans = 2 5 6
반환값이 두 개인 경우에는 [ 최대값, 최대값의 위치 ] 가 반환된다.
x = [ 1 5 3 ] ;
[ a, b ] = max( x )
a = 5 b = 2
행렬의 크기를 구하는 함수¶
함수 $\quad$ | 반환값 |
---|---|
size(x) | 행의 갯수와 열의 갯수 |
length(x) | 행의 갯수와 열의 갯수 중에서 큰 값 |
x = [ 1 5 3; 2 4 6 ]
x = 1 5 3 2 4 6
size( x )
ans = 2 3
length( x )
ans = 3
복소수에 관한 함수¶
함수 $\qquad $ | 반환값 |
---|---|
complex(x,y) | x + y * i |
real(A) | 복소수 A 의 실수부 |
imag(A) | 복소수 A 의 허수부 |
isreal(A) | 실수이면 1, 복소수이면 0 |
conj(A) | 복소수 A 의 켤레복소수 |
abs(A) | 복소수 A 의 크기 |
angle(A) | 복소수 A 의 각 (radian) |
허수 단위로 i 또는 j 를 쓸 수 있다.
i^2
j^2
ans = -1 ans = -1
매트랩이 처리할 수 있는 가장 큰 수는 $ 10 ^{308}$ 이고,
크기가 가장 작은 수는 $ 10 ^{-308}$ 이다.
realmax
realmin
ans = 1.7977e+308 ans = 2.2251e-308
매트랩이 처리할 수 있는 정수의 범위는 대략 -20억에서 +20억이다.
intmax
intmin
ans = 2147483647 ans = -2147483648
어떤 수를 0 으로 나누면, 무한대를 뜻하는 Inf 가 출력된다.
1 / 0
ans = Inf
매우 작은 수를 나타내는 eps 의 실제 값은 약 $10^{-16}$ 이다.
eps
ans = 2.2204e-16
clock 는 현재 날짜와 시각을 배열로 나타내고,
date 는 현재 날짜를 문자열로 나타낸다.
clock
date
ans = 2.0230e+03 7.0000e+00 1.3000e+01 1.5000e+01 5.7000e+01 1.3827e+01 ans = 13-Jul-2023
행렬 다루기¶
다음 행렬에 대하여
S = [ 3 1.5 3.1 ]
S = 3.0000 1.5000 3.1000
인덱스 번호를 사용하여 행렬의 원소를 변경하거나 추가할 수 있다.
두 번째 원소를 변경한다.
S(2) = 1.0
S = 3.0000 1.0000 3.1000
새 원소를 맨 끝에 추가한다.
S( length(S)+1 ) = 5.5
S = 3.0000 1.0000 3.1000 5.5000
행렬의 특정 원소를 가리키는 방법¶
행과 열을 나타내는 두 개의 인덱스 번호를 사용하여 특정한 원소를 가리킨다.
M = [ 1 2 3 4 5
2 3 4 5 6
3 4 5 6 7 ];
M(3,5)
ans = 7
콜론은 모든 행 또는 모든 열을 가리킬 때 사용된다.
M(:,1) % 모든 행의 1열에 있는 원소
ans = 1 2 3
M(2,:) % 2행의 모든 열에 있는 원소
ans = 2 3 4 5 6
M(2:3,4:5) % 2~3행의 원소 중에서 4~5열에 있는 원소
ans = 5 6 6 7
콜론 하나만을 인덱스로 쓰면, 행렬이 열벡터로 바뀐다.
M
M(:)
M = 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 ans = 1 2 3 2 3 4 3 4 5 4 5 6 5 6 7
열벡터로 나타내질 때, 인덱스는 1열의 위에서 아래 방향, 그 다음은 2열의 위에서 아래 방향의 순서로 매겨진다.
위의 행렬의 경우에, 1열의 원소들은 M(1), M(2), M(3) 가 되고, 2열의 원소들은 M(4), M(5), M(6) 이 된다.
M(4)
ans = 2
zeros(3)
ans = 0 0 0 0 0 0 0 0 0
zeros(2,3)
ans = 0 0 0 0 0 0
ones(2)
ans = 1 1 1 1
단위행렬¶
- $\,$ eye( n )
eye(3)
ans = Diagonal Matrix 1 0 0 0 1 0 0 0 1
diag( [ 1 2 3 4 ] )
ans = Diagonal Matrix 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4
그래프 그리기¶
변수 x와 변수 y를 만든 다음, plot 함수로 그래프를 그린다.
x = [ -pi: pi/100 : pi ] ;
y1 = cos(x) ;
y2 = cos(2*x).^2 ;
plot( x, y1, x, y2 )
타이틀, 레이블, 그리드¶
title('title of graph')
xlabel('x-axis')
ylabel('y-axis')
grid on
plot( x, y1 )
선, 마크, 색상 종류¶
선의 종류 | 기호 | 점의 종류 | 기호 | 색 | 기호 |
---|---|---|---|---|---|
실선 | - | 점 | . | 빨간색 | r |
점선 | : | 원형 | o | 녹색 | g |
일점쇄선 | -. | x기호 | x | 파란색 | b |
쇄선 | -- | +기호 | + | 노란색 | y |
별표 | * | 검은색 | k | ||
사각형 | s | 청록색(cyan) | c | ||
다이아몬드 | d | 자주색(magenta) | m | ||
위 삼각형 | ^ | ||||
아래 삼각형 | v | ||||
왼쪽 삼각형 | < | ||||
오른쪽 삼각형 | > | ||||
오각형 | p | ||||
육각형 | h |
x = 0:0.1:2 ;
plot( x, x.^2 ,'-or', x, 1./(1+x.^2), 'sb')
축의 크기 조정 $\quad$ axis( [xmin,xmax,ymin,ymax] )
fplot( 'sin(x)', [-pi,pi] )
axis( [-2*pi,2*pi,-2, 2] )
다중 그래프 $\quad $ subplot(m,n,p)¶
subplot 명령은 그래픽 창을 m개의 행과 n개의 열로 이루어진 격자 모양으로 나누어, p번째 위치에 그래프를 그린다.
x = 0:pi/20:2*pi ;
subplot(2,1,1)
plot(x,sin(x))
subplot(2,1,2)
plot(x,sin(2*x))
댓글 없음:
댓글 쓰기