1 | initial version |

`Sagemath`

has currently no "canned" solution for this kind of integro-differential equations. However, such a problem can sometimes be transformed in (a system of) `sagemath`

-solvable differential equations.

In the example given by Daniel Volinski in the second comment :

```
var("x, t")
y = function("y")
E1 = y(x) == integrate(e^(-t + x)*y(t), t, 0, x)
E1
y(x) == integrate(e^(-t + x)*y(t), t, 0, x)
```

[ Note : This does not seem to fullfill the definition of a [Volterra equation](https://en.wikipedia.org/wiki/Volterra_integral_equation)]

One can clean up the problem by noting that in the righ-hand size, $e^x$ is a constant not dependent of the integration variable $t$, hence expressed out of the integrand :

```
with assuming(x>0): E2=E1.subs(E1.rhs()==e^x*integrate(e^-t*y(t),t,0,x))
with assuming(x<0): E3=E1.subs(E1.rhs()==e^x*integrate(e^-t*y(t),t,0,x))
```

The identity of `E2`

and `E3`

is easily checked :

```
sage: E2
y(x) == e^x*integrate(e^(-t)*y(t), t, 0, x)
sage: E3
y(x) == -e^x*integrate(e^(-t)*y(t), t, x, 0)
```

Differentiating (the two sides of) this equation with respect to $x$ gives a differential equation solvable by `Sagemath`

```
with assuming(x>0): S2=desolve((E2/e^x).diff(x),y(x), ivar=x)
S2
_C*e^(2*x)
# Declare the integration constants :
[var(str(u)) for u in S2.variables()]
[_C, x]
```

However, this candidate solution satisfies the original equation only for the trivial case of the null function :

```
E1.substitute_function(y,S2.function(x)).unhold().solve(_C)
[_C == 0]
```

By the way :

```
sage: E1.substitute_function(y,S2.function(x)).unhold()
_C*e^(2*x) == _C*(e^(2*x) - e^x)
sage: E2.substitute_function(y,S2.function(x)).unhold()
_C*e^(2*x) == _C*(e^x - 1)*e^x
```

HTH,

2 | No.2 Revision |

`Sagemath`

has currently no "canned" solution for this kind of integro-differential equations. However, such a problem can sometimes be transformed in (a system of) `sagemath`

-solvable differential equations.

In the example given by Daniel Volinski in the second comment :

```
var("x, t")
y = function("y")
E1 = y(x) == integrate(e^(-t + x)*y(t), t, 0, x)
E1
y(x) == integrate(e^(-t + x)*y(t), t, 0, x)
```

[ Note : This does not seem to fullfill the definition of a [Volterra equation](https://en.wikipedia.org/wiki/Volterra_integral_equation)]

One can clean up the problem by noting that in the righ-hand size, $e^x$ is a constant not dependent of the integration variable $t$, hence expressed out of the integrand :

```
with assuming(x>0): E2=E1.subs(E1.rhs()==e^x*integrate(e^-t*y(t),t,0,x))
with assuming(x<0): E3=E1.subs(E1.rhs()==e^x*integrate(e^-t*y(t),t,0,x))
```

The identity of `E2`

and `E3`

is easily checked :

```
sage: E2
y(x) == e^x*integrate(e^(-t)*y(t), t, 0, x)
sage: E3
y(x) == -e^x*integrate(e^(-t)*y(t), t, x, 0)
```

Differentiating (the two sides of) this equation with respect to $x$ gives a differential equation solvable by `Sagemath`

```
with assuming(x>0): S2=desolve((E2/e^x).diff(x),y(x), ivar=x)
S2
_C*e^(2*x)
# Declare the integration constants :
[var(str(u)) for u in S2.variables()]
[_C, x]
```

However, this candidate solution satisfies the original equation only for the trivial case of the null function :

```
E1.substitute_function(y,S2.function(x)).unhold().solve(_C)
[_C == 0]
```

By the way :

```
sage: E1.substitute_function(y,S2.function(x)).unhold()
_C*e^(2*x) == _C*(e^(2*x) - e^x)
sage: E2.substitute_function(y,S2.function(x)).unhold()
_C*e^(2*x) == _C*(e^x - 1)*e^x
```

~~HTH, ~~

`Sagemath`

. Feel free to submit one... For the hell of it, I verified that a similar procedure was able to solve the equation proposed in the Mathematica example :

```
var("x, t, lambda_")
assume(x>0)
y = function("y")
E1 = y(x) == x^3 + lambda_*integrate((t-x)*y(t), t, 0, x)`
```

One notes that `Sagemath`

insists to reformat this equation "its way" :

$$ y\left(x\right) = x^{3} - \lambda {\left(\int_{0}^{x} -t y\left(t\right)\,{d t} + \int_{0}^{x} x y\left(t\right)\,{d t}\right)} $$

Isolating the integral terms and differentiating *twice* gives us a second-order differential equation :

```
((E1-x^3)/lambda_).diff(x,2)
-(6*x - diff(y(x), x, x))/lambda_ == -y(x)
```

`Sagemath`

default ODE solver (i. eI `Maxima`

's) depends on the sign of $\lambda$ :

```
with assuming(lambda_>0): Sp = desolve(((E1-x^3)/lambda_).diff(x, 2), y(x), ivar=x)
[var(str(u)) for u in Sp.variables()] # Declaring the integration constants...
[_K1, _K2, lambda_, x]
Sp
_K2*cos(sqrt(lambda_)*x) + _K1*sin(sqrt(lambda_)*x) + 6*x/lambda_
```

Determining the constants is done by substituting in the original equation, simplifying a bit and solving for them the resulting polynomial in $x$ :

```
Ep = E1.substitute_function(y,Sp.function(x)).unhold().expand()-_K1*sin(x*sqrt(lambda_))-_K2*cos(x*sqrt(lambda_))
Consp = solve((Ep.lhs()-Ep.rhs()).coefficients(x, sparse=False),[_K1, _K2], solution_dict=True)
Solp = [Sp.subs(u).function(x) for u in Consp]
sage: Ep
6*x/lambda_ == -_K1*sqrt(lambda_)*x - _K2
sage: Consp
[{_K1: -6/lambda_^(3/2), _K2: 0}]
sage: Solp
[x |--> 6*x/lambda_ - 6*sin(sqrt(lambda_)*x)/lambda_^(3/2)]
```

$$\left[x \ {\mapsto}\ \frac{6\,x}{\lambda} - \frac{6 \, \sin\left(\sqrt{\lambda} x\right)}{\lambda^{\frac{3}{2}}}\right]$$

This unique solution is identical to `Mathematica`

's proposed solution.

Similarly, for $\lambda<0$, we get :

```
with assuming(lambda_<0): Sn = desolve(((E1-x^3)/lambda_).diff(x, 2), y(x), ivar=x)
En = E1.substitute_function(y,Sn.function(x)).unhold().expand()-_K1*e^(-sqrt(-lambda_)*x)-_K2*e^(sqrt(-lambda_)*x)
Consn = solve((En.lhs()-En.rhs()).coefficients(x, sparse=False),[_K1, _K2], solution_dict=True)
Soln = [Sn.subs(u).maxima_methods().demoivre().trig_reduce().function(x) for u in Consn]
sage: Soln
[x |--> 6*x/lambda_ - 6*sin(sqrt(lambda_)*x)/lambda_^(3/2)]
```

This solution is formally identical to the solution obtained for $\lambda>0$ ; however, its meaning is different, $\lambda$ being negative...

HTH,

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.