Documentation

BSeries.Numerics.AdjointScheme

The adjoint of a Runge–Kutta scheme at tableau level #

The adjoint method of a Runge–Kutta scheme (A, b) is again a Runge–Kutta scheme, with tableau (𝟙bᵀ - A, b), i.e. a*ᵢⱼ = bⱼ - aᵢⱼ (Hairer–Nørsett–Wanner, Theorem II.8.3; arXiv:2507.21006, Section 3).

The proof factors through two facts:

Combining, adjointScheme = negSchemeinverseScheme realizes ψ* = (ψ⁻¹)̄ at the level of tableaux.

def BSeries.RungeKutta.negScheme {ι : Type u} {R : Type v} [Neg R] (rk : RungeKutta ι R) :

The scheme with negated tableau: one step of size -h.

Equations
  • rk.negScheme = { A := fun (i j : ι) => -rk.A i j, b := fun (j : ι) => -rk.b j }
Instances For
    def BSeries.RungeKutta.inverseScheme {ι : Type u} {R : Type v} [Sub R] [Neg R] (rk : RungeKutta ι R) :

    The scheme inverting one step of rk: tableau (A - 𝟙bᵀ, -b).

    Equations
    Instances For
      def BSeries.RungeKutta.adjointScheme {ι : Type u} {R : Type v} [Sub R] (rk : RungeKutta ι R) :

      The adjoint scheme: tableau (𝟙bᵀ - A, b), i.e. a*ᵢⱼ = bⱼ - aᵢⱼ (Hairer–Nørsett–Wanner, Theorem II.8.3).

      Equations
      Instances For
        @[simp]
        theorem BSeries.RungeKutta.negScheme_A {ι : Type u} {R : Type v} [Neg R] (rk : RungeKutta ι R) (i j : ι) :
        rk.negScheme.A i j = -rk.A i j
        @[simp]
        theorem BSeries.RungeKutta.negScheme_b {ι : Type u} {R : Type v} [Neg R] (rk : RungeKutta ι R) (j : ι) :
        rk.negScheme.b j = -rk.b j
        @[simp]
        theorem BSeries.RungeKutta.inverseScheme_A {ι : Type u} {R : Type v} [Neg R] [Sub R] (rk : RungeKutta ι R) (i j : ι) :
        rk.inverseScheme.A i j = rk.A i j - rk.b j
        @[simp]
        theorem BSeries.RungeKutta.inverseScheme_b {ι : Type u} {R : Type v} [Neg R] [Sub R] (rk : RungeKutta ι R) (j : ι) :
        rk.inverseScheme.b j = -rk.b j
        @[simp]
        theorem BSeries.RungeKutta.adjointScheme_A {ι : Type u} {R : Type v} [Sub R] (rk : RungeKutta ι R) (i j : ι) :
        rk.adjointScheme.A i j = rk.b j - rk.A i j
        @[simp]
        theorem BSeries.RungeKutta.adjointScheme_b {ι : Type u} {R : Type v} [Sub R] (rk : RungeKutta ι R) (j : ι) :
        rk.adjointScheme.b j = rk.b j

        The adjoint tableau is the negation of the inverting tableau.

        theorem BSeries.RungeKutta.stageWeight_negScheme {ι : Type u} {R : Type v} [Fintype ι] [CommRing R] (rk : RungeKutta ι R) (t : HopfAlgebras.PTree) (i : ι) :
        rk.negScheme.stageWeight t i = (-1) ^ (t.order + 1) * rk.stageWeight t i

        Stage weights change sign according to the subtree order under tableau negation.

        theorem BSeries.RungeKutta.weight_negScheme {ι : Type u} {R : Type v} [Fintype ι] [CommRing R] (rk : RungeKutta ι R) (t : HopfAlgebras.PTree) :
        rk.negScheme.weight t = (-1) ^ t.order * rk.weight t

        Elementary weights change sign according to the tree order under tableau negation: negating the tableau is a step of size -h.

        Negating the tableau realizes the grading involution of the character.

        In the composition of a scheme with its inverting scheme, the second-block stages collapse onto the first-block stages.

        All elementary weights of the composed scheme rk ∘ rk⁻¹ vanish: the composition is the identity method.

        The inverse method is a Runge–Kutta method: the tableau (A - 𝟙bᵀ, -b) realizes the convolution inverse of the character.

        The adjoint method is a Runge–Kutta method (Hairer–Nørsett–Wanner, Theorem II.8.3; arXiv:2507.21006, Section 3): the tableau a*ᵢⱼ = bⱼ - aᵢⱼ, b* = b realizes the adjoint character ψ*.

        Composing a scheme with its adjoint yields a symmetric method: the character of rk* ∘ rk is odd (arXiv:2507.21006, Theorem thm:main, the constructive direction, at tableau level).

        A scheme and its adjoint have the same order (Hairer–Nørsett–Wanner, Theorem II.8.3; arXiv:2507.21006, Proposition 7.1(1) at tableau level).