where f(r)=S*exp(-r^2/b^2), S, b and m_π are constants. In Python I used a general-purpose numerical integro-differential equation solver, IDEsolver – but this approach is very slow.
Any suggestions as to how this can be done using DifferentialEquations.jl?
Thanks
Basically, ApproxFun allows you to represent both the integral and derivative operators as matrices in your equation (see ApproxFun: Operators). Then you can just rearrange your equation into \phi = (\mbox{some operator}) \backslash f.
I’m not sure offhand which function space you should use here, given the 1/r singularity at the origin or the fact that you want to go to r = \infty. The latter would seem to suggest a Laguerre space, but that won’t get rid of the origin singularity. What are your boundary conditions on \phi? (Maybe you can do a change of variables.)
Oh no, this is the right answer. Another answer could be NeuralPDE.jl, here’s a Physics-Informed Neural Network Integro-Differential Equation tutorial:
Given any value of E, you can solve your differential equation to find the corresponding \phi[E]. Conversely, given any \phi(r), you can perform the integral to compute E[\phi]. The combination of these is the fixed-point equation:
E[\phi[\mathcal{E}]] = \mathcal{E}
which is a nonlinear equation in a single variable that can be solved easily by a variety of root-finding algorithms.
The advantage of this is that you don’t need to implement an integro-differential solver directly — you just need an integration code for E[\phi] and a linear-ODE boundary-value solver for \phi[E], and then throw them at a root-finding algorithm.
That’s the approach I initially used in Python and it works out. I wanted to solve the same problem using DifferentialEquations.jl but turns out the problem is harder than I thought