logo

ジュリアで多項式を使用する方法 📂ジュリア

ジュリアで多項式を使用する方法

概要

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)

多項式関数間の四則演算は、+, -, *, ÷でオーバーライドされる。

根を求める 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])

チェビシェフ多項式関数 ChebyshevT()

julia> ChebyshevT([3,2,1])
ChebyshevT(3⋅T_0(x) + 2⋅T_1(x) + 1⋅T_2(x))

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

環境

  • OS: Windows
  • julia: v1.6.2