MATLAB은 다항식을 다루는 몇 개의 함수를 제공한다. 예를 들어 방정식의 근을 구한다던가, 어떤 다항식의 미분 혹은 적분을 구하는 함수등이 제공된다.

 예를 들어서 x4-12x3+25x+116 이라는 다항식은 다음과 같이 계수들을 순서대로 가지는 p라는 변수에 저장한다.


>> p=[1 -12 0 25 116]
p =
    1   -12     0    25   116


여기서 계수들을 입력할 때 다항식이 사실 x4-12x3+0x2+25x+116 이므로  x2항의 계수인 0도 반드시 써야 한다는 것에 주의하자. 이제 이 방정식의 근은 roots()함수를 이용하여 구할 수 있다.


>> r=roots(p)
r =
11.747282870823
2.702820743841
-1.22505180733187 + 1.46720800872890i
-1.22505180733187 - 1.46720800872890i


위에서 보듯이 roots()함수는 해들은 열벡터에 저장하여 반환한다. 반대로 해로부터 방정식을 구할 수도 있다. 예를 들어 어떤 방정식의 해가 1,2,3,4,5 일 때 이들을 해로 가지는 방정식은 (x-1)(x-2)(x-3)(x-4)(x-5) 일 것이다. 이 방정식의 계수를 구하는 함수가 poly()함수이다.


>> poly([1 2 3 4 5])
ans =
    1   -15    85  -225   274  -120


위에서 1, 2, 3, 4, 5를 해로 가지는 방정식은 x5-15x4+85x3-225x2+274x-120 이라는 것을 알 수 있다. 처음 나왔던 예제에서 roots()함수를 이용하여 방정식의 근을 r에 저장하였다. 이것을 이용하여 원래의 방정식을 구할 수 있다.


>> pp=poly(r)
pp =
1.0000 -12.0000 -0.0000 25.0000 116.0000


입력변수가 nxn 크기의 행렬인 경우 poly()함수는 이 행렬의 특성방정식(characteristic equation)의 계수를 반환한다.


>> A=[1.2 3 -0.9; 5 1.75 6; 9 0 1] 󰎠
A =
1.2000 3.0000 -0.9000
5.0000 1.7500 6.0000
9.0000 0 1.0000
>> poly(A) 󰎠
1.0000 -3.9500 -1.8500 -163.2750


행렬의 특성방정식이란 det(xI-A) 를 말하며 위의 경우 이 특성방정식이 x3-3.95x2-1.85x-163.275 임을 알 수 있다. 이 특성방정식의 해가 바로 행렬의 고유치(eigenvalue)이다. 행렬의 고유치를 구하는 함수는 따로 마련되어 있으며 eig()함수이다.


>> roots(ans)
7.2826
-1.6663 + 4.4321i
-1.6663 - 4.4321i

>> eig(A)
7.2826
-1.6663 + 4.4321i
-1.6663 - 4.4321i


특정한 값에서의 함수값을 구하는 함수는 polyval()함수이다. 예를 들어 x=5에서 p에 저장된 다항식 값을 구하려면


>> polyval(p,5) 󰎠
-634


정방행렬에 대해서 다항식의 값을 구하는 것도 가능하다. 예를 들어서 q(x)=x3-2x-5 라는 함수가 있을때 행렬 A에 대해서 q(A)=A3-2A-5I 가 되는 것이다. 여기서 I는 항등행렬이다. 다항식에 대해서 행렬 계산을 구하는 함수가 polyvalm()함수이다.


>> A=[2 4 5;-1 0 3; 7 1 5]
A =
2 4 5
-1 0 3
7 1 5

>> q=[1 0 -2 -5]
q =
1 0 -2 -5

>> polyvalm(q,A)
377 179 439
111 81 136
490 253 639


위의 결과에 대해서 검산을 하면 다음과 같다.


>> A^3-2*A-5*eye(3) 󰎠
377 179 439
111 81 136
490 253 639


여기서 eye(3)은 3x3 항등행렬을 생성해주는 함수이다.



Posted by 살레시오

댓글을 달아 주세요