줄리아에서 다항함수 사용하는 법

줄리아에서 다항함수 사용하는 법

How to Use Polynomials.jl in julia

개요

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)

  • forder계 도함수를 리턴한다.

적분 integrate()

julia> integrate(p, 7)
Polynomial(7.0 + 1.0*x + 0.25*x^4)

integrate(f::AbstractPolynomial, C = 0)

  • 적분상수가 Cf의 부정적분을 리턴한다.

특수 다항 함수

로랑 다항 함수 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(3T_0(x) + 2T_1(x) + 1T_2(x))

ChebyshevT{T, X}(coeffs::AbstractVector)

환경

  • OS: Windows
  • julia: v1.6.2

  1. https://juliamath.github.io/Polynomials.jl/stable/ ↩︎

댓글