2015년 6월 27일 토요일

MATLAB의 다항식(polynimial) 다루기 (part 2)

 여기서는 이전 포스트에 이어서 다항식 관련 함수들에 대해서 알아보겠다. 두 다항식의 곱셈은 conv()함수에 의해서 구해진다. 두 함수 a(x)=x3+2x2+3x+4 와 b(x)=x3+4x2+9x+16의 곱을 구해보자.

>> a=[1 2 3 4], b=[1 4 9 16]
a =
  1   2   3   4
b =
   1    4    9   16

>> c=conv(a,b)
c =
   1    6   20   50   75   84   64

이 결과로부터
c(x) = x6+6x5+20x4+50x3+75x2+84x+64
임을 알 수 있다.

 방정식간의 나눗셈은 deconv()함수를 이용한다. 앞에서 구한 방정식 c(x)와 b(x)를 이용하여 를 구하면 다음과 같다.

>> deconv(c,b) 󰎠
1.0000 2.0000 3.0000 4.0000

결과가 a(x)와 같음을 알 수 있다.

다항식의 미분을 계산하는 함수로 polyder()함수가 있다. 예를 들어 p(x)=x3-2x-5 의 미분함수를 계산하려고 한다면

>> p=[1 0 -2 -5]
p =
1 0 -2 -5
>> q=polyder(p)
q =
3.0000 0 -2.0000

여기서 p’(x)=3x2-2임을 알 수 있다. 만약 함수 polyder()로의 입력벡터가 두 개면 두 다항식의 곱의 미분을 구해준다.

>> a=[1 3 5], b=[2 4 6]
a =
1 3 5
b =
2 4 6

>> polyder(a,b)
8.0000 30.0000 56.0000 38.0000

여에서 a(x)=x2+3x+5와 b(x)=2x2+4x+6의 곱함수 a(x)b(x)을 미분한 결과는 8x3+30x2+56x+38 이라는 것을 알 수 있다. 마지막으로 입력도 두개이고 출력도 두개라면, 예를 들어서

>> [q,d]=polyder(a,b) 󰎠
q =
-2 -8 -2
d =
4 16 40 48 36

와 같이 사용한다면 a(x)/b(x)를 미분한 결과를 q(x)/d(x)로 반환해 준다. 즉 다음과 같은 다항식
을 미분한 결과는 다음과 같다는 것을 알 수 있다.

 이제 역라플라스 변환이나 역z변환에서 자주 쓰이는 부분분수전개 (partial fraction expansion) 에 대해서 살펴보자. 부분분수 전개를 수행하는 함수는 residue()함수이다. 어떤 다항식 a(x)와 b(x)에 대해서 a(x)가 다중근을 갖지 않는다면 분수식은 다음과 같이 전개될 수 있다.
예를 들어서
를 부분분수전개한 결과를 보려면 다음과 같이 하면 된다.

>> a=[1 6 8], b=[-4 8]
a =
1 6 8
b =
-4 8

>> [r1,p1,k1]=residue(b,a)
r1 =
-12
8
p1 =
-4
-2
k1 =
Empty matrix: 0-by-0

이것으로 부터 다음을 알 수 있다.
다음과 같이 다중근을 가지는 경우를 살펴보자.
이 식을 부분분수전개를 하려면 예를 들어 다음과 같이 하면 된다.

>> [r2, p2, k2] = residue( 1, poly([1 0.5 0.5]) )
r2 =
4.0000
-4.0000
-2.0000
p2 =
1.0000
0.5000
0.5000
k2 =
Empty matrix: 0-by-0

이 예에서 분모항 을 입력하기 위해서 poly()함수를 사용다. 반환된 벡터 r2,p2 그리고 k2로부터 다음과 같은 결과로 해독한다.
여기서 p2벡터의 세 번째 요소인 두 번째 0.5 는 이중근임을 나타냄에 유의해야 한다.

 지금까지 소개한 다항식에 관련된 함수들을 표로 정리하면 다음과 같다.

[표 1] 다항식에 관련된 함수들 정리
함수
기능
roots()
방정식의 해를 구한다
poly()
해로부터 방정식을 구한다
polyval()
특정한 스칼라값에서의 방정식의 값을 구한다
polyvalm()
특정한 행렬을 대입한 방정식의 값을 구한다
residue()
부분분수전개를 한다.
polyder()
방정식의 미분을 구한다.
conv()
방정식의 곱을 구한다.
deconv()
방정식의 나눗셈을 수행한다.


댓글 없음:

댓글 쓰기