# Integro-differential equation and 2nd order differential equation

**URL:** https://discourse.julialang.org/t/integro-differential-equation-and-2nd-order-differential-equation/78799
**Category:** New to Julia
**Tags:** question, package, diffeq, differentialequation
**Created:** [March 31, 2022, 11:04am UTC](https://discourse.julialang.org/t/integro-differential-equation-and-2nd-order-differential-equation/78799 "2022-03-31T11:04:28Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![MartinMikkelsen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/martinmikkelsen/32/35068_2.png) [@MartinMikkelsen](https://discourse.julialang.org/u/MartinMikkelsen)
#### Post date: [March 31, 2022, 11:04am UTC](https://discourse.julialang.org/t/integro-differential-equation-and-2nd-order-differential-equation/78799/1 "2022-03-31T11:04:28Z")

</div>

I’m very new to Julia and want to convert from Python to Julia. I have a system of equations that I want to solve numerically in Julia. The system is

 ![Skærmbillede 2022-03-31 kl. 12.49.16](https://global.discourse-cdn.com/julialang/original/3X/9/d/9df7090bd65452955bf759e15d86e89ff628e746.png)  
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](https://idesolver.readthedocs.io/en/latest/index.html) – but this approach is very slow.  
Any suggestions as to how this can be done using [DifferentialEquations.jl](https://diffeq.sciml.ai/dev/index.html)?  
Thanks

---

<div class="post-metadata">

### Author: ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)
#### Post date: [March 31, 2022, 11:53am UTC](https://discourse.julialang.org/t/integro-differential-equation-and-2nd-order-differential-equation/78799/2 "2022-03-31T11:53:08Z")

</div>

I would recommand ApproxFun

---

<div class="post-metadata">

### Author: ![MartinMikkelsen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/martinmikkelsen/32/35068_2.png) [@MartinMikkelsen](https://discourse.julialang.org/u/MartinMikkelsen)
#### Post date: [March 31, 2022, 12:06pm UTC](https://discourse.julialang.org/t/integro-differential-equation-and-2nd-order-differential-equation/78799/3 "2022-03-31T12:06:31Z")

</div>

I will look into it. How would you use it?

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [March 31, 2022, 1:16pm UTC](https://discourse.julialang.org/t/integro-differential-equation-and-2nd-order-differential-equation/78799/4 "2022-03-31T13:16:56Z")

</div>

Basically, ApproxFun allows you to represent both the integral and derivative operators as matrices in your equation (see [ApproxFun: Operators](https://juliaapproximation.github.io/ApproxFun.jl/latest/usage/operators/)). Then you can just rearrange your equation into \phi = (\mbox{some operator}) \backslash f.

I’m not sure offhand [which function space](https://juliaapproximation.github.io/ApproxFun.jl/latest/usage/spaces/) 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.)

---

<div class="post-metadata">

### Author: ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)
#### Post date: [March 31, 2022, 1:50pm UTC](https://discourse.julialang.org/t/integro-differential-equation-and-2nd-order-differential-equation/78799/5 "2022-03-31T13:50:35Z")

</div>

Sorry @ChrisRackauckas 🤣

I saved you from a technical answer though 😋

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [March 31, 2022, 2:00pm UTC](https://discourse.julialang.org/t/integro-differential-equation-and-2nd-order-differential-equation/78799/6 "2022-03-31T14:00:59Z")

</div>

> [@stevengj](#):
>
> Then you can just rearrange your equation into \phi = (\mbox{some operator}) \backslash f ϕ=(some operator)∖f\phi = (\mbox{some operator}) \backslash f .

On second glance, it’s not that simple, unfortunately, because your equation is nonlinear in \phi.

However, you can linearize it in \phi + \delta\phi, solve the linearized equations for \delta\phi given some \phi, and then perform Newton iterations.

---

<div class="post-metadata">

### Author: ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)
#### Post date: [March 31, 2022, 2:01pm UTC](https://discourse.julialang.org/t/integro-differential-equation-and-2nd-order-differential-equation/78799/7 "2022-03-31T14:01:43Z")

</div>

Oh no, this is the right answer. Another answer could be NeuralPDE.jl, here’s a Physics-Informed Neural Network Integro-Differential Equation tutorial:

[https://neuralpde.sciml.ai/dev/pinn/integro\_diff/](https://neuralpde.sciml.ai/dev/pinn/integro_diff/)

that said, PINNs are a very slow method, especially at lower dimensions. This will be an easy but not efficient way of doing it.

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [March 31, 2022, 2:05pm UTC](https://discourse.julialang.org/t/integro-differential-equation-and-2nd-order-differential-equation/78799/8 "2022-03-31T14:05:09Z")

</div>

Another possible approach:

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.

---

<div class="post-metadata">

### Author: ![MartinMikkelsen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/martinmikkelsen/32/35068_2.png) [@MartinMikkelsen](https://discourse.julialang.org/u/MartinMikkelsen)
#### Post date: [March 31, 2022, 2:26pm UTC](https://discourse.julialang.org/t/integro-differential-equation-and-2nd-order-differential-equation/78799/9 "2022-03-31T14:26:44Z")

</div>

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 😅
