Norms

The choice of the Banach space to apply the Radii Polynomial Theorem (cf. Section Radii polynomial approach) is integral to the success of the computer-assisted proof. In practice, it is useful to tune the Banach space on the fly to adjust the norm estimates.

Accordingly, the spaces introduced in Section Vector spaces are not normed a priori. The norm of a Sequence or a LinearOperator is obtained via the functions norm and opnorm respectively; in both cases, one must specify a BanachSpace.

BanachSpace
├─ NormedCartesianSpace
├─ Ell1
├─ Ell2
└─ EllInf

$\ell^1$, $\ell^2$ and $\ell^\infty$

Let $\mathscr{I}$ be a set of indices such that $\mathscr{I} \subset \mathbb{Z}^d$ for some $d \in \mathbb{N}$. Consider the weighted $\ell^1, \ell^2, \ell^\infty$ spaces (cf. $\ell^p$ spaces) defined by

\[\begin{aligned} \ell^1_w &\bydef \left\{ a \in \mathbb{C}^\mathscr{I} \, : \, | a |_{\ell^1_w} \bydef \sum_{\alpha \in \mathscr{I}} |a_\alpha| w(\alpha) < \infty \right\}, \\ \ell^2_w &\bydef \left\{ a \in \mathbb{C}^\mathscr{I} \, : \, | a |_{\ell^2_w} \bydef \sqrt{\sum_{\alpha \in \mathscr{I}} |a_\alpha|^2 w(\alpha)} < \infty \right\}, \\ \ell^\infty_w &\bydef \left\{ a \in \mathbb{C}^\mathscr{I} \, : \, | a |_{\ell^\infty_w} \bydef \sup_{\alpha \in \mathscr{I}} | a_\alpha | w(\alpha) < \infty \right\}, \end{aligned}\]

where $w : \mathscr{I} \to (0, \infty)$ is a weight function.

The Banach spaces Ell1, Ell2 and EllInf wraps one or multiple Weight.

Weight
├─ AlgebraicWeight
├─ BesselWeight
├─ GeometricWeight
└─ IdentityWeight

Given a set of indices $\mathscr{I}^\prime \subset \mathbb{Z}$:

  • an AlgebraicWeight of rate $s \ge 0$ is defined by $w(\alpha) \bydef (1 + |\alpha|)^s$ for all $\alpha \in \mathscr{I}^\prime$.

  • a BesselWeight of rate $s \ge 0$ is defined by $w(\alpha) \bydef (1 + \alpha^2)^s$ for all $\alpha \in \mathscr{I}^\prime$. This weight is specific to Ell2 and Fourier as it describes the Sobolev space $H^s$.

  • a GeometricWeight of rate $\nu > 0$ is defined by $w(\alpha) \bydef \nu^{|\alpha|}$ for all $\alpha \in \mathscr{I}^\prime$.

  • an IdentityWeight is defined by $w(\alpha) \bydef 1$ for all $\alpha \in \mathscr{I}^\prime$. This is the default weight for Ell1, Ell2 and EllInf.

julia> a = Sequence(Taylor(2), [1.0, 1.0, 1.0]); # 1 + x + x^2
julia> norm(a, Ell1(AlgebraicWeight(1.0)))6.0
julia> b = Sequence(Fourier(1, 1.0), [0.5, 0.0, 0.5]); # cos(x)
julia> norm(b, Ell2(BesselWeight(2.0)))1.4142135623730951
julia> c = Sequence(Chebyshev(2), [1.0, 0.5, 0.5]); # 1 + 2(x/2 + (2x^2 - 1)/2)
julia> norm(c, EllInf()) # EllInf() == EllInf(IdentityWeight())1.0

Note that ℓ¹ (\ell<tab>\^1<tab>), ℓ² (\ell<tab>\^2<tab>) and ℓ∞ (\ell<tab>\infty<tab>) are the respective unicode aliases of Ell1, Ell2 and EllInf.

In the context of a $d$-dimensional TensorSpace, one prescribes weights $w_1, \dots, w_d$ for each dimension. The weight is defined by $w(\alpha) = w_1(\alpha_1) \times \ldots \times w_d(\alpha_d)$ for all $\alpha = (\alpha_1, \dots, \alpha_d) \in \mathscr{I}^{\prime\prime}$ where $\mathscr{I}^{\prime\prime} \subset \mathbb{Z}^d$ is the appropriate set of indices.

julia> a = ones(Taylor(2) ⊗ Fourier(2, 1.0) ⊗ Chebyshev(2));
julia> norm(a, Ell1((AlgebraicWeight(1.0), GeometricWeight(2.0), IdentityWeight())))390.0

However, the $d$-dimensional version of BesselWeight is defined by $w(\alpha) \bydef (1 + \alpha_1^2 + \ldots + \alpha_d^2)^s$ for all $\alpha = (\alpha_1, \dots, \alpha_d) \in \mathbb{Z}^d$. Only one BesselWeight is required for every Fourier space composing the TensorSpace.

julia> a = ones(Fourier(2, 1.0) ⊗ Fourier(3, 1.0));
julia> norm(a, Ell2(BesselWeight(2.0)))47.25462940284264

Normed cartesian space

For the norm of a CartesianSpace, one may use a NormedCartesianSpace to either:

julia> a = Sequence(Taylor(1)^2, [1.0, 2.0, 3.0, 4.0]);
julia> norm(a, NormedCartesianSpace(ℓ¹(), ℓ∞()))7.0
julia> norm(a, NormedCartesianSpace((ℓ¹(), ℓ²()), ℓ∞()))5.0

API

RadiiPolynomial.Ell1Type
Ell1{T<:Union{Weight,Tuple{Vararg{Weight}}}} <: BanachSpace

Weighted $\ell^1$ space.

Field:

  • weight :: T

Constructors:

  • Ell1(::Weight)
  • Ell1(::Tuple{Vararg{Weight}})
  • Ell1(): equivalent to Ell1(IdentityWeight())
  • Ell1(weight::Weight...): equivalent to Ell1(weight)

Unicode alias ℓ¹ can be typed by \ell<tab>\^1<tab> in the Julia REPL and in many editors.

See also: Ell2 and EllInf.

Examples

julia> Ell1()
ℓ¹()

julia> Ell1(GeometricWeight(1.0))
ℓ¹(GeometricWeight(1.0))

julia> Ell1(GeometricWeight(1.0), AlgebraicWeight(2.0))
ℓ¹(GeometricWeight(1.0), AlgebraicWeight(2.0))
source
RadiiPolynomial.Ell2Type
Ell2{T<:Union{Weight,Tuple{Vararg{Weight}}}} <: BanachSpace

Weighted $\ell^2$ space.

Field:

  • weight :: T

Constructors:

  • Ell2(::Weight)
  • Ell2(::Tuple{Vararg{Weight}})
  • Ell2(): equivalent to Ell2(IdentityWeight())
  • Ell2(weight::Weight...): equivalent to Ell2(weight)

Unicode alias ℓ² can be typed by \ell<tab>\^2<tab> in the Julia REPL and in many editors.

See also: Ell1 and EllInf.

Examples

julia> Ell2()
ℓ²()

julia> Ell2(BesselWeight(1.0))
ℓ²(BesselWeight(1.0))

julia> Ell2(BesselWeight(1.0), GeometricWeight(2.0))
ℓ²(BesselWeight(1.0), GeometricWeight(2.0))
source
RadiiPolynomial.EllInfType
EllInf{T<:Union{Weight,Tuple{Vararg{Weight}}}} <: BanachSpace

Weighted $\ell^\infty$ space.

Field:

  • weight :: T

Constructors:

  • EllInf(::Weight)
  • EllInf(::Tuple{Vararg{Weight}})
  • EllInf(): equivalent to EllInf(IdentityWeight())
  • EllInf(weight::Weight...): equivalent to EllInf(weight)

Unicode alias ℓ∞ can be typed by \ell<tab>\infty<tab> in the Julia REPL and in many editors.

See also: Ell1 and Ell2.

Examples

julia> EllInf()
ℓ∞()

julia> EllInf(GeometricWeight(1.0))
ℓ∞(GeometricWeight(1.0))

julia> EllInf(GeometricWeight(1.0), AlgebraicWeight(2.0))
ℓ∞(GeometricWeight(1.0), AlgebraicWeight(2.0))
source
RadiiPolynomial.NormedCartesianSpaceType
NormedCartesianSpace{T<:Union{BanachSpace,Tuple{Vararg{BanachSpace}}},S<:BanachSpace} <: BanachSpace

Cartesian Banach space.

Fields:

  • inner :: T
  • outer :: S

See also: Ell1, Ell2 and EllInf.

Examples

julia> NormedCartesianSpace(Ell1(), EllInf())
NormedCartesianSpace(ℓ¹(), ℓ∞())

julia> NormedCartesianSpace((Ell1(), Ell2()), EllInf())
NormedCartesianSpace((ℓ¹(), ℓ²()), ℓ∞())
source
RadiiPolynomial.ℓ²Type
ℓ²(::Weight)
ℓ²(::Tuple{Vararg{Weight}})
ℓ²()
ℓ²(::Weight...)

Unicode alias of Ell2 representing the weighted $\ell^2$ space.

Examples

julia> ℓ²()
ℓ²()

julia> ℓ²(BesselWeight(1.0))
ℓ²(BesselWeight(1.0))

julia> ℓ²(BesselWeight(1.0), GeometricWeight(2.0))
ℓ²(BesselWeight(1.0), GeometricWeight(2.0))
source
RadiiPolynomial.ℓ¹Type
ℓ¹(::Weight)
ℓ¹(::Tuple{Vararg{Weight}})
ℓ¹()
ℓ¹(::Weight...)

Unicode alias of Ell1 representing the weighted $\ell^1$ space.

Examples

julia> ℓ¹()
ℓ¹()

julia> ℓ¹(GeometricWeight(1.0))
ℓ¹(GeometricWeight(1.0))

julia> ℓ¹(GeometricWeight(1.0), AlgebraicWeight(2.0))
ℓ¹(GeometricWeight(1.0), AlgebraicWeight(2.0))
source
RadiiPolynomial.ℓ∞Type
ℓ∞(::Weight)
ℓ∞(::Tuple{Vararg{Weight}})
ℓ∞()
ℓ∞(::Weight...)

Unicode alias of EllInf representing the weighted $\ell^\infty$ space.

Examples

julia> ℓ∞()
ℓ∞()

julia> ℓ∞(GeometricWeight(1.0))
ℓ∞(GeometricWeight(1.0))

julia> ℓ∞(GeometricWeight(1.0), AlgebraicWeight(2.0))
ℓ∞(GeometricWeight(1.0), AlgebraicWeight(2.0))
source
LinearAlgebra.normFunction
norm(a::AbstractSequence, p::Real=Inf)

Compute the p-norm of a. Only p equal to 1, 2 or Inf is supported.

This is equivalent to:

  • norm(a, Ell1(IdentityWeight())) if p == 1
  • norm(a, Ell2(IdentityWeight())) if p == 2
  • norm(a, EllInf(IdentityWeight())) if p == Inf

See also: norm(::Sequence, ::BanachSpace).

source
LinearAlgebra.opnormFunction
opnorm(A::LinearOperator, p::Real=Inf)

Compute the operator norm of A induced by the p-norm. Only p equal to 1, 2 or Inf is supported.

This is equivalent to:

  • opnorm(A, Ell1(IdentityWeight())) if p == 1
  • opnorm(A, Ell2(IdentityWeight())) if p == 2
  • opnorm(A, EllInf(IdentityWeight())) if p == Inf

See also: opnorm(::LinearOperator, ::BanachSpace), opnorm(::LinearOperator, ::BanachSpace, ::BanachSpace) and opnorm(::LinearOperator{<:VectorSpace,ParameterSpace}, ::BanachSpace).

source
RadiiPolynomial.algebraicweightMethod
algebraicweight(a::Sequence{<:SequenceSpace})

Compute an approximation of the algebraic decay rate of a by performing the ordinary least squares method on the logarithm of the absolute value of the coefficients of a.

See also: AlgebraicWeight, IdentityWeight, GeometricWeight, geometricweight and BesselWeight.

Examples

julia> rate(algebraicweight(Sequence(Taylor(10), [inv((1.0 + i)^2) for i in 0:10]))) ≈ 2
true

julia> rate.(algebraicweight(Sequence(Taylor(10) ⊗ Fourier(3, 1.0), vec([inv((1.0 + i)^2 * (1.0 + abs(j))^3) for i in 0:10, j in -3:3])))) .≈ (2, 3)
(true, true)
source
RadiiPolynomial.geometricweightMethod
geometricweight(a::Sequence{<:SequenceSpace})

Compute an approximation of the geometric decay rate of a by performing the ordinary least squares method on the logarithm of the absolute value of the coefficients of a.

See also: GeometricWeight, IdentityWeight, AlgebraicWeight, algebraicweight and BesselWeight.

Examples

julia> rate(geometricweight(Sequence(Taylor(10), [inv(2.0^i) for i in 0:10]))) ≈ 2
true

julia> rate.(geometricweight(Sequence(Taylor(10) ⊗ Fourier(3, 1.0), vec([inv(2.0^i * 3.0^abs(j)) for i in 0:10, j in -3:3])))) .≈ (2, 3)
(true, true)
source