-
Notifications
You must be signed in to change notification settings - Fork 0
/
project-appendix-1.tex
98 lines (95 loc) · 2.98 KB
/
project-appendix-1.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
\chapter{Julia Implementations}
Proof of concept implementations of the numerical calculations and algorithms are presented
in the Julia scientific computing language. All the algorithms will need careful
optimization, debugging, unit testing, error catching and documentation before they can be
released on a production scale.
The symbolic computation of the $\left[n/m\right]_f\left(x\right)$ Pad\'{e} approximation of
the inverse arithmetic coefficient Taylor series
\begin{IEEEeqnarray*}{rCl}
f\left(x\right)
& = & \sum_{n=0}^\infty \frac{cn+d}{\left(an+d\right)!}x^n
\end{IEEEeqnarray*}
carried out in Julia using polynomials over arbitrary precision integers is presented in
listing \ref{lst:padeprogression}.
The numerical computation of the Pythagorean coefficients
\begin{IEEEeqnarray*}{rCl}
\alpha_n
& = &
\begin{cases}
\left(-1\right)^{n+1}\frac{\pi}{p}\csc\left(\frac{n\pi}{p}\right)e^{\mathrm{i}\frac{n\pi}{p}} & p \text{ even}\\
\left(-1\right)^{n+1}\frac{\pi}{p}\csc\left(\frac{n\pi}{p}\right) & p \text{ odd}
\end{cases}
\end{IEEEeqnarray*}
of the permutation matrix of period $p$ is presented in listing \ref{lst:pythagoreancoefficients}.
The function returns a vector containing all the Pythagorean coefficients for a given
period $p$. It is further overloaded to compute in multiple types, and as listed denotes the
period of the permutation as $n$.
\begin{lstlisting}[language=Julia,label={lst:padeprogression},caption={Poor man's symbolic computation of the Pad\'{e} coefficients of the Taylor series with coefficients given by inverse of the factorial of the arithmetic progression. This function requires the Polynomials package.}]
function padeprogression(
n::Int64,
m::Int64,
a::Int64,
b::Int64,
c::Int64,
d::Int64
)
if n < 1 || m < 1 || a < 1 || b < 0
error("Arguments out of range")
end
l = n + m + 1
u = Poly(ones(Rational{BigInt}, l))
aB = convert(BigInt, a)
cB = convert(BigInt, c)
dB = convert(BigInt, b - a)
nB = convert(BigInt, d - c)
for k = 1:l
nB += cB
dB += aB
@inbounds u.a[k] = Rational{BigInt}(
nB,
factorial(dB)
)
end
Pade(u, n, m)
end
\end{lstlisting}
\begin{lstlisting}[language=Julia,label={lst:pythagoreancoefficients},caption={Computation of the Pythagorean coefficients of the logarithm of the permutation matrix of period $n$.}]
function pythagoreancoefficients{S<:Integer, T<:Real}(
::Type{T},
n::S
)
if n < 2
error("Arguments out of range")
end
u = Vector{Complex{T}}(n - 1)
nT = convert(T, n)
piT = convert(T, pi)
oT = convert(T, 1)
noT = convert(T, -1)
zT = convert(T, 0)
sT = noT
aT = zT
if iseven(n)
for m = 1:(n - 1)
sT *= noT
aT += oT
@inbounds u[m] = complex(
sT * piT / (nT * tan(piT * (aT / nT))),
sT * piT / nT
)
end
else
for m = 1:(n - 1)
sT *= noT
aT += oT
@inbounds u[m] = complex(
sT * piT / (nT * sin(piT * (aT / nT))),
zT
)
end
end
return u
end
pythagoreancoefficients{S<:Integer}(n::S) =
pythagoreancoefficients(Float64, n::S)
\end{lstlisting}