1
+ module PolyCompat
2
+
3
+ using .. Polynomials
1
4
#=
2
5
This type is only here to provide stability while deprecating. This will eventually be removed in favor
3
6
of `Polynomial` =#
@@ -7,7 +10,7 @@ export Poly
7
10
struct Poly{T <: Number } <: AbstractPolynomial{T}
8
11
coeffs:: Vector{T}
9
12
var:: Symbol
10
- function Poly (a:: AbstractVector{T} , var:: SymbolLike = :x ) where {T <: Number }
13
+ function Poly (a:: AbstractVector{T} , var:: Polynomials. SymbolLike = :x ) where {T <: Number }
11
14
# if a == [] we replace it with a = [0]
12
15
# # Base.depwarn("Poly is deprecated and will be removed in a future release. Please use Polynomial instead", :Poly)
13
16
if length (a) == 0
@@ -21,12 +24,16 @@ struct Poly{T <: Number} <: AbstractPolynomial{T}
21
24
end
22
25
end
23
26
24
- @register Poly
27
+ Polynomials. @register Poly
28
+
29
+
30
+
31
+
25
32
26
33
Base. convert (P:: Type{<:Polynomial} , p:: Poly{T} ) where {T} = P (p. coeffs, p. var)
27
34
28
- domain (:: Type{<:Poly} ) = Interval (- Inf , Inf )
29
- mapdomain (:: Type{<:Poly} , x:: AbstractArray ) = x
35
+ Polynomials . domain (:: Type{<:Poly} ) = Interval (- Inf , Inf )
36
+ Polynomials . mapdomain (:: Type{<:Poly} , x:: AbstractArray ) = x
30
37
31
38
function (p:: Poly{T} )(x:: S ) where {T,S}
32
39
oS = one (x)
@@ -39,7 +46,7 @@ function (p::Poly{T})(x::S) where {T,S}
39
46
end
40
47
41
48
42
- function fromroots (P:: Type{<:Poly} , r:: AbstractVector{T} ; var:: SymbolLike = :x ) where {T <: Number }
49
+ function Polynomials . fromroots (P:: Type{<:Poly} , r:: AbstractVector{T} ; var:: Polynomials. SymbolLike = :x ) where {T <: Number }
43
50
n = length (r)
44
51
c = zeros (T, n + 1 )
45
52
c[1 ] = one (T)
@@ -50,7 +57,7 @@ function fromroots(P::Type{<:Poly}, r::AbstractVector{T}; var::SymbolLike = :x)
50
57
end
51
58
52
59
53
- function vander (P:: Type{<:Poly} , x:: AbstractVector{T} , n:: Integer ) where {T <: Number }
60
+ function Polynomials . vander (P:: Type{<:Poly} , x:: AbstractVector{T} , n:: Integer ) where {T <: Number }
54
61
A = Matrix {T} (undef, length (x), n + 1 )
55
62
A[:, 1 ] .= one (T)
56
63
@inbounds for i in 1 : n
@@ -60,7 +67,7 @@ function vander(P::Type{<:Poly}, x::AbstractVector{T}, n::Integer) where {T <: N
60
67
end
61
68
62
69
63
- function integrate (p:: Poly{T} , k:: S ) where {T,S <: Number }
70
+ function Polynomials . integrate (p:: Poly{T} , k:: S ) where {T,S <: Number }
64
71
R = promote_type (eltype (one (T) / 1 ), S)
65
72
if hasnan (p) || isnan (k)
66
73
return Poly ([NaN ])
@@ -75,7 +82,7 @@ function integrate(p::Poly{T}, k::S) where {T,S <: Number}
75
82
end
76
83
77
84
78
- function derivative (p:: Poly{T} , order:: Integer = 1 ) where {T}
85
+ function Polynomials . derivative (p:: Poly{T} , order:: Integer = 1 ) where {T}
79
86
order < 0 && error (" Order of derivative must be non-negative" )
80
87
order == 0 && return p
81
88
hasnan (p) && return Poly (T[NaN ], p. var)
@@ -90,7 +97,7 @@ function derivative(p::Poly{T}, order::Integer = 1) where {T}
90
97
end
91
98
92
99
93
- function companion (p:: Poly{T} ) where T
100
+ function Polynomials . companion (p:: Poly{T} ) where T
94
101
d = length (p) - 1
95
102
d < 1 && error (" Series must have degree greater than 1" )
96
103
d == 1 && return diagm (0 => [- p[0 ] / p[1 ]])
@@ -146,4 +153,33 @@ function Base.divrem(num::Poly{T}, den::Poly{S}) where {T,S}
146
153
return P (q_coeff, num. var), P (r_coeff, num. var)
147
154
end
148
155
149
- showterm (io:: IO , :: Type{Poly{T}} , pj:: T , var, j, first:: Bool , mimetype) where {T} = showterm (io, Polynomial{T}, pj, var, j, first, mimetype)
156
+ Polynomials. showterm (io:: IO , :: Type{Poly{T}} , pj:: T , var, j, first:: Bool , mimetype) where {T} = showterm (io, Polynomial{T}, pj, var, j, first, mimetype)
157
+
158
+
159
+
160
+ # # Compat
161
+ poly (r, var = :x ) = fromroots (Poly, r; var = var)
162
+ polyval (p:: Poly , x:: Number ) = p (x)
163
+ polyval (p:: Poly , x) = p .(x)
164
+
165
+ function Base. getproperty (p:: Poly , nm:: Symbol )
166
+ if nm == :a
167
+ return getfield (p, :coeffs )
168
+ end
169
+ return getfield (p, nm)
170
+ end
171
+
172
+ polyint (p:: Poly , C = 0 ) = integrate (p, C)
173
+ polyint (p:: Poly , a, b) = integrate (p, a, b)
174
+ polyder (p:: Poly , ord = 1 ) = derivative (p, ord)
175
+ polyfit (x, y, n = length (x) - 1 , sym= :x ) = fit (Poly, x, y, n; var = sym)
176
+ polyfit (x, y, sym:: Symbol ) = fit (Poly, x, y, var = sym)
177
+
178
+ export poly, polyval, polyint, polyder, polyfit
179
+
180
+ end
181
+
182
+ # # Ensure compatability for now
183
+ using . PolyCompat
184
+ export Poly
185
+ export poly, polyval, polyint, polyder, polyfit, padeval
0 commit comments