줄리아에서 다항함수 사용하는 법
개요
Polynomials.jl
은 다항 함수의 표현 및 계산 등을 포함한 패키지다. 다항함수라는 게 수학적으로 쉬워서 그런지 코딩도 간단하게 생각하는 경우가 있는데 막상 필요한 기능들을 구현하다보면 꽤 번거롭다. 물론 엄청 어려운 건 아닌데, 어지간하면 패키지를 사용하도록 하자.
패키지의 모든 기능을 정리한 것은 아니고 유용할만한 것만 추렸으니 자세한 것은 리파지터리를 확인하자1.
일반 다항 함수
계수로 다항함수 정의 Polynomial()
julia> using Polynomials
julia> p = Polynomial([1,0,0,1])
Polynomial(1 + x^3)
julia> q = Polynomial([1,1])
Polynomial(1 + x)
julia> r = Polynomial([1,1], :t)
Polynomial(1 + t)
julia> p(0)
1
julia> p(2)
9
Polynomial{T, X}(coeffs::AbstractVector{T}, [var = :x])
- 그 자체로 다항함수를 리턴한다.
coeffs
는 계수들의 배열로, 가장 앞이 상수항이고 뒤로 갈수록 고차항이다. var
에서는 다항함수의 변수를 준다. 위의 예처럼 심볼:t
를 넣으면t
에 대한 다항식이 된다.
데이터로 다항함수 정의 fit()
julia> fit([-1,0,1], [2,0,2])
Polynomial(2.0*x^2)
fit(::Type{RationalFunction}, xs::AbstractVector{S}, ys::AbstractVector{T}, m, n; var=:x)
- $x$-좌표가
xs
고 $y$-좌표가ys
인 점들을 지나는 다항 함수를 리턴한다.
근으로 다항함수 정의 roots()
julia> fromroots([-2,2])
Polynomial(-4 + x^2)
fromroots(::AbstractVector{<:Number}; var=:x)
- 배열로 받은 데이터가 근이 되게끔 하는 다항 함수를 리턴한다.
연산 +
, -
, *
, ÷
julia> p + 1
Polynomial(2 + x^3)
julia> 2p
Polynomial(2 + 2*x^3)
스칼라를 더하거나 곱하면 위와 같이 직관적으로 연산된다.
julia> p + q
Polynomial(2 + x + x^3)
julia> p - q
Polynomial(-x + x^3)
julia> p * q
Polynomial(1 + x + x^3 + x^4)
julia> p ÷ q
Polynomial(1.0 - 1.0*x + 1.0*x^2)
다항 함수 간의 사칙연산은 +
, -
, *
, ÷
에 오버라이딩overriding된다.
근 찾기 roots()
julia> roots(p)
3-element Vector{ComplexF64}:
-1.0 + 0.0im
0.4999999999999998 - 0.8660254037844383im
0.4999999999999998 + 0.8660254037844383im
roots(f::AbstractPolynomial)
미분 derivative()
julia> derivative(p, 3)
Polynomial(6)
derivative(f::AbstractPolynomial, order::Int = 1)
f
의order
계 도함수를 리턴한다.
적분 integrate()
julia> integrate(p, 7)
Polynomial(7.0 + 1.0*x + 0.25*x^4)
integrate(f::AbstractPolynomial, C = 0)
- 적분상수가
C
인f
의 부정적분을 리턴한다.
특수 다항 함수
로랑 다항 함수 LaurentPolynomial()
julia> LaurentPolynomial([4,3,2,1], -1)
LaurentPolynomial(4*x⁻¹ + 3 + 2*x + x²)
LaurentPolynomial{T,X}(coeffs::AbstractVector, [m::Integer = 0], [var = :x])
- 차수가 정수에 대해 확장된 로랑 다항 함수를 리턴한다.
- 최소차항의 차수는
m
으로 주어진다.
체비셰프 다항 함수 ChebyshevT()
julia> ChebyshevT([3,2,1])
ChebyshevT(3⋅T_0(x) + 2⋅T_1(x) + 1⋅T_2(x))
ChebyshevT{T, X}(coeffs::AbstractVector)
- 제1종 체비셰프 다항 함수를 리턴한다. 수식의
T_n(x)
은 $T_{n}(x) = \cos \left( n \cos^{-1} x \right)$ 을 나타낸다.
환경
- OS: Windows
- julia: v1.6.2