Reputation: 14016
consider the two arrays:
x = [0 .05 .1 .3 .32 .4 .55 .7 1 1.3 1.4 1.45 1.6 1.8 1.9 2 2.2 2.3 2.6 2.8 2.91 3];
y = x.^2;
I want to integrate y
over x
. So far, I have figured out that I can use the trapz()
function in a for loop:
y1 = zeros(length(x));
for ii = 1:length(x)
y1(ii) = trapz(x(1:ii), y(1:ii));
end
plot(x, y1, x, y);
However, I wondered if there is a canonical way to do this without using a for loop.
P.S.1. I suppose MATLAB/Octave are vectorized functions, and there should be predefined functions to take care of this sort of stuff.
P.S.2. I do not own a MATLAB license now, but the answer must be compatible with both MATLAB and Octave.
Upvotes: 2
Views: 315
Reputation: 15837
You can use cumsum
and diff
:
y1 = [0 cumsum((y(1:end-1) + diff(y)/2) .* diff(x))];
Upvotes: 1
Reputation: 2636
Sounds like you want the cumtrapz( )
function:
y1 = zeros(length(x), 1);
y1 = cumtrapz(x, y)
plot(x, y1, x, y);
Upvotes: 4