A Julia package for solving Riemann–Hilbert problems

A Riemann–Hilbert problem is a certain type of boundary value problem in the complex plane where an analytic function has prescribed jumps. They arise in integrable systems, random matrices, spectral analysis, orthogonal polynomials, and elsewhere. This package implements the numerical method of [Olver 2011, Olver 2012] (see also review in [Trogodon & Olver 2015]) for solving Riemann–Hilbert problems, and is very much related to RHPackage.

For an example, the following calculates the Hastings–McLeod solution to Painlev'e II at the origin, which is posed on 4 rays:

```
# Define the contour
Γ = Segment(0, 2.5exp(im*π/6)) ∪ Segment(0, 2.5exp(5im*π/6)) ∪
Segment(0, 2.5exp(-5im*π/6)) ∪ Segment(0, 2.5exp(-im*π/6))
# Defe the jump function
G = Fun( z -> if angle(z) ≈ π/6
[1 0; im*exp(8im/3*z^3) 1]
elseif angle(z) ≈ 5π/6
[1 0; -im*exp(8im/3*z^3) 1]
elseif angle(z) ≈ -π/6
[1 im*exp(-8im/3*z^3); 0 1]
elseif angle(z) ≈ -5π/6
[1 -im*exp(-8im/3*z^3); 0 1]
end, Γ)
# Solve the Riemann–Hilbert problem. We transpose to recast a left
# Riemann–Hilbert problem as a left one.
Φ = transpose(rhsolve(transpose(G), 4*200)) # use 200 collocation points per ray
z = Fun(ℂ) # The function z in the complex plane
2(z*Φ[1,2])(Inf) # Evaluate 2lim_{z -> ∞} zΦ(z)_{1,2}
```

- T. Trogdon & S. Olver (2015), Riemann–Hilbert Problems, Their Numerical Solution and the Computation of Nonlinear Special Functions, SIAM.
- S. Olver (2012), A general framework for solving Riemann–Hilbert problems numerically, Numer. Math., 122: 305–340.
- S. Olver (2011), Numerical solution of Riemann–Hilbert problems: Painlevé II, Found. Comput. Maths, 11: 153–179.