MATLAB Answers

Why is this giving me an error message when trying to use trapz.

3 views (last 30 days)
Saruultugs Batzorig
Saruultugs Batzorig on 23 Aug 2019
Answered: Allen on 24 Aug 2019
Hello, I'm trying to integrate for each time step the following. But it keeps giving me an error message.
B=18.6;
t0=0;
step=0.5;
tmax=90;
npas=tmax/step+1;
U=60;
for i= 1:npas
t0=t0+step;
s = (U.*t0)./B;
fun3 = @(s) (0.0081*(exp(-0.0058.*s))-0.0392.*exp(-0.0833.*s));
y3 = fun3(s);
q3(i) = trapz(s,y3);
end
B=18.6;
t0=0;
step=0.5;
tmax=90;
npas=tmax/step+1;
U=60;
for i= 1:npas
t0=t0+step;
s = (U.*t0)./B;
fun3 = @(s) (0.0081*(exp(-0.0058.*s))-0.0392.*exp(-0.0833.*s));
y3 = fun3(s);
q3(i) = trapz(s,y3);
end

  6 Comments

Show 3 older comments
Walter Roberson
Walter Roberson on 23 Aug 2019
Geoff's hint is correct:
trapz() with two parameters can be either
trapz(X, Y)
or
trapz(X, dimension)
The way it tells the two apart is that if the second parameter is a scalar, it assumes that it is a dimension.
You should not be using trapz step by step: you should be recording all of those s and y3 values and doing a trapz() on the final vector of them.
Walter Roberson
Walter Roberson on 23 Aug 2019
fun3 = @(s) (0.0081*(exp(-0.0058.*s))-0.0392.*exp(-0.0833.*s)); %does not change with i
for i= 1:npas
t0=t0+step;
s(i) = (U.*t0)./B;
y3(i) = fun3(s(i));
end
q3 = trapz(s, y3);
Though I suspect you would prefer to use cumtrapz() instead of trapz() here.

Sign in to comment.

Answers (1)

Allen
Allen on 24 Aug 2019
A more concise aproach.
B = 18.6;
step = 0.5;
tmax = 90;
npas = tmax/step+1;
U = 60;
fun3 = @(s) (0.0081*(exp(-0.0058.*s))-0.0392.*exp(-0.0833.*s));
s = U/B*step*(1:npas/2/step);
y3 = fun3(s);
q3 = trapz(s,y3);

  0 Comments

Sign in to comment.

Sign in to answer this question.

Products