Finding the Velocity at Different intervals

조회 수: 4 (최근 30일)
Kudzanai Sekerere
Kudzanai Sekerere 2019년 8월 24일
댓글: Star Strider 2019년 8월 26일
tryng to write a code to display the velocity and displacement given a time interval and acceleration at those intervals using integration. getting an error in my for loop what might be the reason
clear all
close all
% Acceleration Vector
a = [0 2 4 7 11 17 24 32 41 48 51];
% define time interval
k =1;
%define time vector
t = 0:k:10;
%initialize velocity
for ii = 1:11
v(ii) = trapz(a(1:ii),k);
end
% calculate the displacement d at each time interval
for jj = 1:11
d(jj) = trapz(v(1:jj),k);
end
% display a table of the velocity values
v = table(t,v,'VariableNames',{'Time(Sec)' 'Velocity(m/s)'})
% display a table of the displacement values
d = table(t',d','VariableNames',{'Time(Sec)' 'Displacement(m)'})

채택된 답변

Star Strider
Star Strider 2019년 8월 24일
You can solve the problem of varying numbers of elements in each iteration by using cell arrays for ‘v’ and ‘d’:
for ii = 1:11
v{ii} = trapz(a(1:ii),k);
end
% calculate the displacement d at each time interval
for jj = 1:11
d{jj} = trapz(v{jj},k);
end
The best solution would likely be to use the cumtrapz function instead, and avoid the loops entirely.
  댓글 수: 10
Kudzanai Sekerere
Kudzanai Sekerere 2019년 8월 25일
@Star Strider thank you for your assistance finally noticed that when using the function trapz or cumtrapz interchanging what starts within the bracket affects the results it is (t,v) and not (v,t) and (t,a) not (a,t) that was my main error
Star Strider
Star Strider 2019년 8월 25일
As always, my pleasure.
I posted the correct code, and didn’t take a close look at yours. I just ran it to see if there were problems, and it ran without error.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Kudzanai Sekerere
Kudzanai Sekerere 2019년 8월 25일
After abit of research have come up with these 3 codes that produce the desired results
%Matlab Code (Third Variation)
clear all
close all
% Acceleration Vector
a = [0 2 4 7 11 17 24 32 41 48 51];
%define time vector
t = 0:10;
%initialize velocity
v(1)=0;
for ii = 1:10
v(ii+1) = trapz(t(ii:ii+1),a(ii:ii+1))+v(ii);
end
% calculate the displacement d at each time interval
d(1)= 0;
for jj = 1:10
d(jj+1) = trapz(t(jj:jj+1),v(jj:jj+1))+d(jj);
end
% display a table of the velocity values
tv = table(t(:),v(:),'VariableNames',{'Time_sec' 'Velocity_mps'})
% display a table of the displacement values
td = table(t(:),d(:),'VariableNames',{'Time' 'Displacement'})
%plot graph of the change of the acceleration with time
plot(t,a)
title('Acceleration against time Graph')
xlabel('Time(Sec)')
ylabel('Acceleration(m/s^2)')
%plot graph of the change of the velocity with time
figure(2)
plot(t,v)
title('Velocity against time Graph')
xlabel('Time(Sec)')
ylabel('Velocity(m/s)')
%plot graph of the change of the displacement with time
figure(3)
plot(t,d)
title('Displacement against time Graph')
xlabel('Time(Sec)')
ylabel('Displacement(m)')
%Matlab Code (Second Variation)
clear all
close all
% Acceleration Vector
a = [0 2 4 7 11 17 24 32 41 48 51];
%define time vector
t = 0:10;
%initialize velocity
for ii = 2:11
v(ii) = trapz(t(1:ii),a(1:ii));
end
% calculate the displacement d at each time interval
for jj = 2:11
d(jj) = trapz(t(1:jj),v(1:jj));
end
% display a table of the velocity values
tv = table(t(:),v(:),'VariableNames',{'Time_sec' 'Velocity_mps'})
% display a table of the displacement values
td = table(t(:),d(:),'VariableNames',{'Time' 'Displacement'})
%plot graph of the change of the acceleration with time
plot(t,a)
title('Acceleration against time Graph')
xlabel('Time(Sec)')
ylabel('Acceleration(m/s^2)')
%plot graph of the change of the velocity with time
figure(2)
plot(t,v)
title('Velocity against time Graph')
xlabel('Time(Sec)')
ylabel('Velocity(m/s)')
%plot graph of the change of the displacement with time
figure(3)
plot(t,d)
title('Displacement against time Graph')
xlabel('Time(Sec)')
ylabel('Displacement(m)')
%Matlab Code (Third Variation)
clear all
close all
clc
% initialize time interval
k = 1;
% define time vector
t = 0:k:10;
% define acceleration vector
a = [0,2,4,7,11,17,24,32,41,48,51];
% calculate the velocity
v = cumtrapz(t,a);
d = cumtrapz(t,v);
% display a table of the velocity values
tv = table(t(:),v(:),'VariableNames',{'Time_Sec' 'Velocity_mps'})
% display a table of the displacement values
td = table(t(:),d(:),'VariableNames',{'Time_Sec' 'Displacement_m'})
%plot graph of the change of the acceleration with time
plot(t,a)
title('Acceleration against time Graph')
xlabel('Time(Sec)')
ylabel('Acceleration(m/s^2)')
%plot graph of the change of the velocity with time
figure(2)
plot(t,v)
title('Velocity against time Graph')
xlabel('Time(Sec)')
ylabel('Velocity(m/s)')
%plot graph of the change of the displacement with time
figure(3)
plot(t,d)
title('Displacement against time Graph')
xlabel('Time(Sec)')
ylabel('Displacement(m)')
  댓글 수: 3
Kudzanai Sekerere
Kudzanai Sekerere 2019년 8월 26일
Yes cumtrapz works just fine thanx. and even a loop works. just tried both out and ultimately it is the same result
Star Strider
Star Strider 2019년 8월 26일
The cumtrapz function is more efficient. I would use it and eliminate the loops.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Numerical Integration and Differentiation에 대해 자세히 알아보기

제품


릴리스

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by