2017년 7월 7일 금요일

옥타브/매트랩 - 3. 데이터 형변환, 회귀 곡선, 수치 적분

octave_matlab__3

옥타브 / 매트랩


데이터형 변환

옥타브/매트랩에서 숫자 데이터의 기본형은 배정밀도 실수이다. 정수형 데이터는 수치 계산에서는 거의 사용하지 않는다.

문자 데이터를 배정밀도 실수로 변환하면, 그 문자를 나타내는 아스키 코드를 얻을 수 있다.

In [1]:
double('a')
ans =  97

숫자를 문자로 변화하려면, char( ) 함수를 사용한다.

In [2]:
char(98)
ans = b

배열에 문자와 숫자가 같이 있으면, 옥타브/매트랩은 모두 문자로 인식하여 처리한다.

In [3]:
['a' 98 99]
warning: implicit conversion from numeric to char
ans = abc

숫자 데이터를 문자열 데이터로 바꾸려면, num2str( ) 함수를 사용한다.

In [4]:
num2str( 123 )
ans = 123

문자열 데이터를 숫자 데이터로 바꾸려면, str2num( ) 함수를 사용한다.

In [5]:
str2num('123')
ans =  123

선형 회귀법 (Linear regression)

선형 회귀법은 실제 데이터를 근사적으로 표현하는 직선을 얻는 방법이다.

실제 데이터 값과 직선에 의한 추정값의 차이를 제곱한 값을 모두 더한 합을 최소화하는 원리에 근거하며, 이를 최소 제곱법 (least square method)라고 한다.

회귀법은 polyfit( ) 함수를 사용한다.

In [6]:
x = 0:4 ;
y = [ 0, 2.1, 4.2, 5.9, 8.3 ] ;
coef = polyfit( x, y, 1 )       % 1 은 곡선의 차수로서 직선을 뜻한다
coef =

   2.040000   0.020000

직선의 기울기와 절편이 얻어졌다.

회귀 직선으로 데이터를 추정한 값을 얻으려면, polyval( ) 함수를 쓴다.

In [7]:
ynew = polyval( coef, x )
ynew =

   0.020000   2.060000   4.100000   6.140000   8.180000

실제 데이터와 추정값을 비교하여 본다.

In [8]:
plot( x, y, 'o',  x, ynew, '-' )

2차 곡선으로 회귀 곡선을 구하는 예를 보자.

In [9]:
x = 0:4 ;
y = [ 0.1, 1.1, 4.2, 8.7, 16.3 ] ;
coef = polyfit( x, y, 2 )       % 2는 곡선의 차수로서 2차 곡선을 뜻한다
coef =

   1.04286  -0.17143   0.16571

데이터와 회귀 곡선을 그래프로 그려 비교한다.

In [10]:
xfit = 0:0.1:4 ;
yfit = polyval( coef, xfit ) ;

plot( x, y, 'o',  xfit, yfit, '-' )

수치 적분

옥타브/매트랩에서는 quad( ) 함수를 이용하여 수치 적분을 계산할 수 있다.

● quad ( 피적분 함수, 하한, 상한 )

다음 적분을 구한다.

$$ \int _0 ^1 x^2 dx \,=\, \frac 1 3 $$

In [11]:
quad( 'x.^2', 0, 1 )
warning: quad: passing function body as a string is obsolete; please use anonymous functions
ans =  0.33333

피적분 함수를 문자열로 입력하는 것은 옛날 방식이므로 익명 함수(anonymous function)를 사용하라고 경고를 주고 있다.

적분을 계산할 때 내부적으로 배열을 이용하므로, 피적분함수를 나타낼 때 닷거듭제곱을 써야한다는 것을 유의하자.

익명 함수는 "함수 핸들" 이라고도 부른다. 익명 함수를 정의한 다음, 이를 인자로 넘겨준다.

In [12]:
f =@(x)  x.^2 ;

quad( f, 0, 1 )
ans =  0.33333

$$ \int _{-\infty} ^{\infty} e^{-x^2} dx \,=\, \sqrt \pi $$

무한대는 Inf 로 나타낸다. 또한, 닷거듭제곱을 쓰는 것에 유의한다.

In [13]:
f =@(x)  exp(-x.^2) ;

quad( f, -Inf, Inf )
ans =  1.7725

적분값은 $\sqrt \pi$ 와 같다.

In [14]:
sqrt( pi )
ans =  1.7725

댓글 없음:

댓글 쓰기

Numeric Analysis 4 - Numeric Linear Algebra

Numeric Analysis 4 - Numeric Linear Algebra Numeric Linear Algebra ¶ ...