@@ -14,15 +14,13 @@ export Pade, padeval
14
14
15
15
import Base: length, endof, getindex, setindex!, copy, zero, one, convert, norm, gcd
16
16
import Base: show, print, * , / , // , - , + , == , divrem, div, rem, eltype, .* , .- , .+
17
- import Base: promote_rule, truncate, chop
18
- if VERSION >= v " 0.4"
19
- import Base. call
20
- end
17
+ import Base: promote_rule, truncate, chop, call, conj, ctranspose, dot, hash
21
18
22
19
eps {T} (:: Type{T} ) = zero (T)
23
20
eps {F<:AbstractFloat} (x:: Type{F} ) = Base. eps (F)
24
21
eps {T} (x:: Type{Complex{T}} ) = eps (T)
25
22
23
+ typealias SymbolLike Union{AbstractString,Char,Symbol}
26
24
27
25
"""
28
26
@@ -60,22 +58,22 @@ p + q # ERROR: Polynomials must have same variable.
60
58
```
61
59
62
60
"""
63
- immutable Poly{T<: Number }
64
- a:: Vector{T}
65
- var:: Symbol
66
- function Poly (a:: Vector{T} , var)
67
- # if a == [] we replace it with a = [0]
68
- if length (a) == 0
69
- return new (zeros (T,1 ), @compat Symbol (var))
70
- else
71
- # determine the last nonzero element and truncate a accordingly
72
- a_last = max (1 ,findlast (x-> x!= zero (T), a))
73
- new (a[1 : a_last], @compat Symbol (var))
74
- end
61
+ immutable Poly{T}
62
+ a:: Vector{T}
63
+ var:: Symbol
64
+ @compat function (:: Type{Poly} ){T<: Number }(a:: Vector{T} , var:: SymbolLike = :x )
65
+ # if a == [] we replace it with a = [0]
66
+ if length (a) == 0
67
+ return new {T} (zeros (T,1 ), @compat Symbol (var))
68
+ else
69
+ # determine the last nonzero element and truncate a accordingly
70
+ a_last = max (1 ,findlast (x-> x!= zero (T), a))
71
+ new {T} (a[1 : a_last], @compat Symbol (var))
75
72
end
73
+ end
76
74
end
77
75
78
- @compat Poly {T<:Number} (a :: Vector{T} , var:: Union{AbstractString,Symbol,Char} = :x ) = Poly {T} (a , var)
76
+ Poly (n :: Number , var:: SymbolLike = :x ) = Poly ([n] , var)
79
77
80
78
# create a Poly object from its roots
81
79
"""
@@ -90,7 +88,7 @@ Example:
90
88
poly([1,2,3]) # Poly(-6 + 11x - 6x^2 + x^3)
91
89
```
92
90
"""
93
- function poly {T} (r:: AbstractVector{T} , var= :x )
91
+ function poly {T} (r:: AbstractVector{T} , var:: SymbolLike = :x )
94
92
n = length (r)
95
93
c = zeros (T, n+ 1 )
96
94
c[1 ] = one (T)
@@ -101,9 +99,7 @@ function poly{T}(r::AbstractVector{T}, var=:x)
101
99
end
102
100
return Poly (reverse (c), var)
103
101
end
104
- poly (A:: Matrix , var= :x ) = poly (eigvals (A), var)
105
- poly (A:: Matrix , var:: AbstractString ) = poly (eigvals (A), @compat Symbol (var))
106
- poly (A:: Matrix , var:: Char ) = poly (eig (A)[1 ], @compat Symbol (var))
102
+ poly (A:: Matrix , var:: SymbolLike = :x ) = poly (eigvals (A), var)
107
103
108
104
109
105
include (" show.jl" ) # display polynomials.
@@ -148,9 +144,9 @@ Return the indeterminate of a polynomial, `x`.
148
144
* `variable([var::Symbol])`: return polynomial 1x over `Float64`.
149
145
150
146
"""
151
- variable {T<:Number} (:: Type{T} , var= :x ) = Poly ([zero (T), one (T)], var)
147
+ variable {T<:Number} (:: Type{T} , var:: SymbolLike = :x ) = Poly ([zero (T), one (T)], var)
152
148
variable {T} (p:: Poly{T} ) = variable (T, p. var)
153
- variable (var:: Symbol = :x ) = variable (Float64, var)
149
+ variable (var:: SymbolLike = :x ) = variable (Float64, var)
154
150
155
151
"""
156
152
@@ -206,7 +202,7 @@ norm(q::Poly, args...) = norm(coeffs(q), args...)
206
202
* `conj(p::Poly`): return conjugate of polynomial `p`. (Polynomial with conjugate of each coefficient.)
207
203
208
204
"""
209
- Base . conj {T<:Complex} (p:: Poly{T} ) = Poly (conj (coeffs (p)))
205
+ conj {T<:Complex} (p:: Poly{T} ) = Poly (conj (coeffs (p)))
210
206
211
207
"""
212
208
@@ -228,21 +224,21 @@ function setindex!(p::Poly, vs, idx::AbstractArray)
228
224
[setindex! (p, v, i) for (i,v) in zip (idx, vs)]
229
225
p
230
226
end
231
- Base. eachindex {T} (p:: Poly{T} ) = 0 : (length (p)- 1 )
227
+ eachindex {T} (p:: Poly{T} ) = 0 : (length (p)- 1 )
228
+
232
229
233
-
234
230
copy (p:: Poly ) = Poly (copy (p. a), p. var)
235
231
236
- zero {T} (p:: Poly{T} ) = Poly ([ zero (T) ], p. var)
232
+ zero {T} (p:: Poly{T} ) = Poly (T[ ], p. var)
237
233
zero {T} (:: Type{Poly{T}} ) = Poly (T[])
238
234
one {T} (p:: Poly{T} ) = Poly ([one (T)], p. var)
239
235
one {T} (:: Type{Poly{T}} ) = Poly ([one (T)])
240
236
241
237
# # Overload arithmetic operators for polynomial operations between polynomials and scalars
242
238
* {T<: Number ,S}(c:: T , p:: Poly{S} ) = Poly (c * p. a, p. var)
243
239
* {T<: Number ,S}(p:: Poly{S} , c:: T ) = Poly (p. a * c, p. var)
244
- Base . dot {T<:Number,S} (p:: Poly{S} , c:: T ) = p * c
245
- Base . dot {T<:Number,S} (c:: T , p:: Poly{S} ) = c * p
240
+ dot {T<:Number,S} (p:: Poly{S} , c:: T ) = p * c
241
+ dot {T<:Number,S} (c:: T , p:: Poly{S} ) = c * p
246
242
.* {T<: Number ,S}(c:: T , p:: Poly{S} ) = Poly (c * p. a, p. var)
247
243
.* {T<: Number ,S}(p:: Poly{S} , c:: T ) = Poly (p. a * c, p. var)
248
244
/ (p:: Poly , c:: Number ) = Poly (p. a / c, p. var)
@@ -348,7 +344,7 @@ function ==(p1::Poly, p2::Poly)
348
344
end
349
345
end
350
346
351
- Base . hash (f:: Poly , h:: UInt ) = hash (f. var, hash (f. a, h))
347
+ hash (f:: Poly , h:: UInt ) = hash (f. var, hash (f. a, h))
352
348
353
349
"""
354
350
* `polyval(p::Poly, x::Number)`: Evaluate the polynomial `p` at `x` using Horner's method.
382
378
383
379
polyval (p:: Poly , v:: AbstractVector ) = map (x-> polyval (p, x), v)
384
380
385
- if VERSION >= v " 0.4"
386
- @compat (p:: Poly )(x) = polyval (p, x)
387
- end
381
+ @compat (p:: Poly )(x) = polyval (p, x)
388
382
389
383
"""
390
384
@@ -437,7 +431,7 @@ function polyder{T}(p::Poly{T}, order::Int=1)
437
431
return Poly (a2, p. var)
438
432
end
439
433
end
440
- Base . ctranspose {T} (p:: Poly{T} ) = polyder (p)
434
+ ctranspose {T} (p:: Poly{T} ) = polyder (p)
441
435
442
436
polyint {T} (a:: Array{Poly{T},1} , k:: Number = 0 ) = [ polyint (p,k) for p in a ]
443
437
polyder {T} (a:: Array{Poly{T},1} , order:: Int = 1 ) = [ polyder (p,order) for p in a ]
0 commit comments