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: http://math.stackexchange.com/questions/1326854/looking-for-a-particular-algorithm-for-numerical-integration
Best How To :
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
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
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