NumericalAnalysis.Fundamentals

NumericalAnalysis.Fundamentals.PolynomialType
Polynomial{T}(coe::Vector{<:Real}, roots::Vector{<:Real}) where T <: Real

Polynomial(coe::Vector{<:Real}, roots::Vector{<:Real}=Vector{Int}())

(实)多项式类

\[p(x)=a_nx^n+a_{n-1}x^{n-1}+\cdots+a_1x+a_0, \quad a_n\neq 0.\]

参数

  • T<:Real : 类型参数, 若没有显式给定, 则隐式地由多项式系数 coe 的元素类型决定. 若显式给出, 可与 coe 的元素类型不一致, 但必须要有 promote_type(T, eltype(coe))==T, 此时将会对 coe 做类型提升处理.
  • coe::Vector{<:Real} : 多项式的系数 $[a_n,a_{n-1},\cdots,a_1, a_0]$, 按幂次降序排列, 并且对于非常数多项式要求 coe[1] 非零, 即最高次项系数不为零.
  • roots::Vector{<:Real} : 多项式的根, 默认为(整型)空向量

例子

coe = [1, 2, 0, 4]              # 系数
p = Polynomial(coe)             # Polynomial(x^3+2x^2+4) 
q = Polynomial{Float64}(coe)    # Polynomial(x^3+2.0x^2+4.0)
source
NumericalAnalysis.Fundamentals.PolynomialMethod
(::Polynomial)(::Real)

将多项式实例变为一个函数, 调用 evaluateqevaluate 计算多项式的值.

例子

p = Polynomial(rand(4))
x = randn()
p(x)  # == evaluate(p, x)
source
Base.:*Method
*(::Polynomial, ::Polynomial)

多项式的乘法, 利用快速傅立叶变换.

source
Base.:*Method
*(::Real, ::Polynomial)

多项式标量乘法

source
Base.:+Method
+(::Polynomial, ::Polynomial)

多项式加法.

source
Base.:-Method
-(::Polynomial, ::Polynomial)

多项式减法.

source
Base.:-Method
-(p::Polynomial)

给定多项式 p, 返回其加法逆元 -p.

source
Base.:==Method
==(::Polynomial, ::Polynomial)

通过比较两个多项式的系数向量(值与类型)比较两个多项式是否相等.

source
Base.getpropertyMethod

将上面求出的多项式次数作为多项式本身的性质.

例子

p = Polynomial([1, 3, 4])
p.degree
source
Base.iszeroMethod
iszero(::Polynomial)

判断一个多项式是否为 0 多项式.

source
Base.showMethod
show(::io, ::MIME"text/plain", ::Polynomial)

输出可视化

source
Base.zeroMethod
zero(::Type{Polynomial{T}}) 

zero(::Type{Polynomial})

生成 T 类型的 0 多项式, 若 T 未给出, 则默认为整型.

source
NumericalAnalysis.Fundamentals.qevaluateMethod
qevaluate(p::Polynomial, x::Real)

已知多项式 p 的根全为实根, 并且由 p.roots 给出, 使用 $\Pi_{1\leqslant k\leqslant n}(x-x_i)$ 计算值 p(x), 这里 $(x_1,x_2,\cdots, x_n)$=p.roots, $n$=p.degree.

source