# Find Indefinite Integral from Array Values

7 views (last 30 days)
Mattia Deriu on 31 Mar 2023
Edited: Torsten on 2 Apr 2023
Hi all,
I am trying to obtain indefinite integral of a function described by numerical values inside an array. To build such function i stardet trying to solve a simple integral of sin(x).
The problem i am facing is that i can't get the array containing the points representig the indefinite integral of the function (with constant of integration C=0). In other words vint_theor and vint_numeric must coincide.
a=0;
b=10;
N=10^6;
x=linspace(a,b,N);
v=sin(x);
vint_theor=-cos(x);
vq=(b-a)/N*cumtrapz(v);
vint_numeric=(vq-mean(vq));
plot(x,v,'DisplayName','sin(x)')
hold on
plot(x,vint_theor,'DisplayName','-cos(x)')
plot(x,vint_numeric,'DisplayName','numerical integration')
xlabel('n')
ylabel('Amplitude')
hold off
legend
##### 2 CommentsShow 1 older commentHide 1 older comment
Mattia Deriu on 31 Mar 2023
I'm trying to build a code that works on ARRAY values whose analytic expression is not known.

John D'Errico on 31 Mar 2023
Sorry. there is no need for them to be exactly the same.
Cumtrapz is a simple variation of a fixed stepsize Euler integration, as if you were solving a simple first order ODE, using Euler's method. It is an APPROXIMATION. It is not the exact solution to an integral. Take more terms, the error may decrease. But even then, Euler's method need not always be a viable solution.
Having said that, WHY ARE YOU DOING WHAT YOU DID???????? Why did you subtract off the mean?
a=0;
b=10;
N=10^6;
x=linspace(a,b,N);
v=sin(x);
vint_theor=-cos(x);
vq=(b-a)/N*cumtrapz(v);
What is the step size? linspace genrates a vector of length N. How many intervals are there?
Therefore, what is the step size?
(b-a)/(N-1)
Next, what is the purpose of this next line?
vq is an APPROXIMATE estimate of the integral. Well, it would be if you had divided by N-1.
vint_numeric=(vq-mean(vq));
But then why subtract of the mean? What would the mean of that expression be?
a=0;
b=10;
N=10^6;
x=linspace(a,b,N);
v=sin(x);
vint_theor = 1 - cos(x); % The actual integral of sin(x), from 0 to x
vint_numeric = cumtrapz(v)*(b-a)/(N-1);
plot(x,v,'DisplayName','sin(x)')
hold on
plot(x,vint_theor,'DisplayName','-cos(x)')
plot(x,vint_numeric,'DisplayName','cumtrapz')
xlabel('n')
ylabel('Amplitude')
hold off
legend
As you can see, the yellow and red curves now overlay on top of each other.
Torsten on 2 Apr 2023
Edited: Torsten on 2 Apr 2023
You get -cos(x) + cos(0), as expected which is integral_{t=a}^{t=b} sin(t) dt.
I don't know what you mean with "constant C = 0".

### Categories

Find more on Array and Matrix Mathematics in Help Center and File Exchange

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by