Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm trying to solve something like: f[x] == Integrate[f[x]*g[x]] where g[x] is known and f[x] is the function to solve (numerically is fine).

I've seen some examples of integral equations but wonder if there is a direct way to solve it with Mathematica.

share|improve this question
NDSolve[] is meant for differential equations, and there isn't a built-in function (yet) for solving integral equations. OTOH, solutions to an inhomogeneous Fredholm equation of the second kind, like in your example, can be solved with the Liouville-Neumann series; such an expansion ought to be doable with the built-in functions of Mathematica. – J. M. Oct 5 '12 at 10:46
Would you care to comment about the field in which you've found this problem? (seems pretty difficult!) – Dr. belisarius Oct 5 '12 at 11:49
Oh dear, your actual problem looks nothing like f[x] == Integrate[f[x] g[x], x] (thus, your "a bit more complex" is one hell of an understatement). This is a nonlinear problem, whose solution is much more difficult... – J. M. Oct 5 '12 at 12:04
PCL, thanks for registering an account. I merged it with the unregistered one so you should now be able to edit your own posts without the edit needing approval. – Mr.Wizard Oct 5 '12 at 12:51
There are a few examples of numerically solving integral eqns in and the older StackOverflow version. A search should locate them. That said, I do not know if any will help for your particular problem. – Daniel Lichtblau Oct 5 '12 at 15:42

If you want to solve the Fredholm equation of the second kind which is an integral equation of the form

$$f(x) - \lambda\int_{a}^{b} K(x,y)f(y)dy = g(x), \quad \forall x \in [a, b]$$ you can use the following code. We follow the simplistic source. One can make it much better by considering further implementation aspects as well as injecting more state of the art algorithmic antibiotic!!


Options[FredholmKind2] = {Method -> Automatic};
FredholmKind2[{a_, b_, lambda_, k_, g_}, n_?IntegerQ,OptionsPattern[]] := 
Block[{step, SI, GI, KMatrix, W, DMatrix, f, deltaX, delta},
     step = (b - a)/n;
     SI = Range[a, b, step];
     GI = g /@ SI;
     KMatrix = Outer[k, SI, SI];
     W = {step/2}~Join~ConstantArray[step, n - 1]~Join~{step/2};
     DMatrix = DiagonalMatrix[W];
     f = If[OptionValue[Method] === NIntegrate,
            deltaX[x_?NumericQ] := W . (k[x, #] & /@ SI) - 
            NIntegrate[k[x, y], {y, a, b},AccuracyGoal -> 4];
            (*If the integral is expensive ParallelMap is an option here *)
            delta = deltaX /@ SI;
             LinearSolve[IdentityMatrix[n + 1] + lambda*(DiagonalMatrix[delta] -
                          KMatrix . DMatrix), GI]}]
             LinearSolve[IdentityMatrix[n + 1] - lambda*(KMatrix . DMatrix),GI]}]


Now lets test it for the following equation which has an exact solution Sin[x]!! $$f(x) - \frac{4}{\pi}\int_{0}^{\frac{\pi}{2}} \cos(x-y)f(y)dy = -\frac{2}{\pi}\cos(x), \quad \forall x \in \left[0, \frac{\pi}{2}\right]$$ There are two separate methods available called Automatic and NIntegrate. The second method is computationally more expensive but produces better result. The above function returns the solution f as an InterpolatingFunction which you can later use an ordinary function in MMA.

n=90;(*number of discretization*)
a = 0.;
b = 0.5*Pi;
lambda = 4./Pi;
Kpart[x_, y_] := Cos[x - y];
Gpart[x_] := -2. Cos[x]/Pi;
f1 = FredholmKind2[{a,b,lambda,Kpart, Gpart},n,Method -> Automatic];
f2 = FredholmKind2[{a,b,lambda,Kpart, Gpart},n,Method -> NIntegrate];
Plot[Evaluate@Sqrt@((Sin[x] - #)^2 & /@ {f1[x], f2[x]}), {x, a, b},Frame -> True,
Axes -> False,PlotLegend -> {"Automatic", "NIntegrate"},LegendPosition -> {1.1, -0.4}]

enter image description here

In the above plot one can see how accurate the numerical solutions perform w.r.t the exact solution.

To Do!

Now if you want to solve the Fredholm integral equation of the first kind which looks like

$$\int_{a}^{b} K(x,y) f(y) dy = g(x), \quad \forall x \in [a,b],$$

I suggest that you take look at this at page 213. After the above example it will be easy for you to implement the solution for the problem of first kind.


share|improve this answer
Awake dead thread! @PlatoManiac, should you expect things to go badly for homogeneous equations (that is, with g(x) = 0)? – Ian Nov 30 '12 at 16:59
@plato Please take a look at this one – Dr. belisarius Aug 25 '14 at 17:14
@belisarius Done! Thx for notifying though..:) – PlatoManiac Aug 25 '14 at 20:50

I was not going to post this because in a previous edit (now gone) you showed a very difficult problem.

Anyway, the current question could be answered as follows:

You want to find f[x] satisfying

f[x] == Integrate[f[x] g[x], x] 

for a known g[x].


f'[x] == g[x] f[x]  

So for example

g[x_] := Sin@x^2;
fs = DSolve[f'[x] == g[x] f[x] && f[0] == 1, f, x]  
 ->{{f -> Function[{x}, E^(x/2 - 1/4 Sin[2 x])]}}

Testing it

Integrate[g[u] (f /. fs[[1]])[u], u]  
-> E^(u/2 - 1/4 Sin[2 u])
share|improve this answer
Sometimes, one is lucky, and integral equations (as well as integro-differential equations) can be reformulated as DEs. Still, one hopes that one does not have to resort to such trickery in future versions of Mathematica... – J. M. Oct 5 '12 at 13:30
@J.M. SolveForUniverseHamiltonian[ currentUniverse ] – Dr. belisarius Oct 5 '12 at 13:32

protected by Community Feb 17 at 6:13

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.