Search code examples
algorithmnumerical-methodsnumericalnumerical-integration

Looking for a particular algorithm for numerical integration


Consider the following differential equation
f(x) = g'(x)
I have a build a code that spits out values of the function f(x) for the variable x, where x goes from 0 to very large.

Now, I'm looking for a scheme that will analyse these values of f(x) in order to determine g(x). Does anybody have any suggestions? The main problem is that if I would calculate g(x) = Integral (f(x) * dx), then I'll end up with just a number (i.e. the area under the graph), but I need to know the actual function of g(x).

I've cross-posted this question here: https://math.stackexchange.com/questions/1326854/looking-for-a-particular-algorithm-for-numerical-integration


Solution

    1. numerical integration always return just a number

      • if you do not want the number but function instead
      • then you can not use numerical integration for this task directly
    2. Polynomial approach

      • you can use any approximation/interpolation technique to obtain a polynomial representing f(x)
      • then integrate as standard polynomial (just change in exponent and multiplication constant)
      • this is not suited for transcendent, periodical or complex shaped functions
      • most common approaches is use of L'Grange or Taylor series
      • for both you need a parser capable of returning value of f(x) for any given x
    3. algebraic integration

      • this is not solvable for any f(x) because we do not know how to integrate everything
      • so you would need to program all the rules for integration
      • like per-partes,substitutions,Z or L'Place transforms
      • and write a solver within string/symbol paradigm
      • that is huge amount of work
      • may be there are libs or dlls that can do that
      • from programs like Derive or Matlab ...

    [edit1] As the function f(x) is just a table in form

    • double f[][2]={ x1,f(x1),x2,f(x2),...xn,f(xn) };
    • you can create the same table for g(x)=Integral(f(x)) at interval <0,x>
    • so:

      g(x1)=f(x1)*(x1-0)
      g(x2)=f(x1)*(x1-0)+f(x2)*(x2-x1)
      g(x3)=f(x1)*(x1-0)+f(x2)*(x2-x1)+f(x3)*(x3-x2)
      ...
      
    • this is just a table so if you want actual function you need to convert this to polynomial via L'Grange or any other interpolation...

    • you can also use DFFT and for the function as set of sin-waves