여기서는 이전 포스트에 이어서 다항식 관련 함수들에 대해서 알아보겠다. 두 다항식의 곱셈은 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 4b =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 5b =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 -2d =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 8b =-4 8>> [r1,p1,k1]=residue(b,a)r1 =-128p1 =-4-2k1 =Empty matrix: 0-by-0 |
이것으로 부터 다음을 알 수 있다.
다음과 같이 다중근을 가지는 경우를 살펴보자.
이 식을 부분분수전개를 하려면 예를 들어 다음과 같이 하면 된다.
>> [r2, p2, k2] = residue( 1, poly([1 0.5 0.5]) )r2 =4.0000-4.0000-2.0000p2 =1.00000.50000.5000k2 =Empty matrix: 0-by-0 |
이 예에서 분모항 을 입력하기 위해서 poly()함수를 사용다. 반환된 벡터 r2,p2 그리고 k2로부터 다음과 같은 결과로 해독한다.
여기서 p2벡터의 세 번째 요소인 두 번째 0.5 는 이중근임을 나타냄에 유의해야 한다.
지금까지 소개한 다항식에 관련된 함수들을 표로 정리하면 다음과 같다.
[표 1] 다항식에 관련된 함수들 정리
함수 | 기능 |
roots() | 방정식의 해를 구한다 |
poly() | 해로부터 방정식을 구한다 |
polyval() | 특정한 스칼라값에서의 방정식의 값을 구한다 |
polyvalm() | 특정한 행렬을 대입한 방정식의 값을 구한다 |
residue() | 부분분수전개를 한다. |
polyder() | 방정식의 미분을 구한다. |
conv() | 방정식의 곱을 구한다. |
deconv() | 방정식의 나눗셈을 수행한다. |
'프로그래밍언어.Lib > MATLAB' 카테고리의 다른 글
MATLAB의 ezplot()함수 (1) | 2015.06.27 |
---|---|
MATLAB의 기본적인 수학 함수들 (0) | 2015.06.27 |
MATLAB의 다항식(polynimial) 다루기 (part 1) (0) | 2015.06.27 |
MATLAB의 행렬 간 논리 연산과 관련 함수 (0) | 2015.06.27 |
MATLAB의 행렬 간 관계 연산 (0) | 2015.06.27 |