Simulating pendulum with a for loop

6 views (last 30 days)
Laidog
Laidog on 26 Aug 2022
Commented: Voss on 26 Aug 2022
I was asked to simulate a pendulum with a for loop. However, I was struggling with the hold on and off command, and the animation I generated only consists of the x and y points, but the line that connects to moving x and y points remains at the original position. Any help or explanation will be appreicated.
Below is my code so far
L = 2;
g = 9.81;
squarerootvalue_gl = sqrt(g./L);
squarerootvalue_lg = sqrt(L./g);
T = 2 .* pi .* squarerootvalue_lg;
t = 0:0.01:T;
theta = pi./3 .* cos(squarerootvalue_gl*t);
x = L .* sin(theta);
y = L .* (1 - cos(theta));
A = [0 x];
B = [L y];
figure
line(A,B)
hold on
axis equal
for i = 1:length(t)
plot (A(i),B(i),'b.', 'MarkerSize', 10)
drawnow
end

Answers (1)

Voss
Voss on 26 Aug 2022
Notice that in each iteration of your loop you plot one point: (A(i),B(i)). That's why only the end of the pendulum shows up. If you want to show the entire pendulum moving, you have to plot two points - the other one being the fixed point at the top of the pendulum, (0,L), which is also (A(1),B(1)).
L = 2;
g = 9.81;
squarerootvalue_gl = sqrt(g./L);
squarerootvalue_lg = sqrt(L./g);
T = 2 .* pi .* squarerootvalue_lg;
t = 0:0.01:T;
theta = pi./3 .* cos(squarerootvalue_gl*t);
x = L .* sin(theta);
y = L .* (1 - cos(theta));
A = [0 x];
B = [L y];
figure
temp = [min(A) max(A)];
axis([temp 1+temp]);
p = line(NaN, NaN, 'Color','b', 'Marker','.', 'MarkerSize', 10);
for i = 2:length(t)
set(p,'XData',A([1 i]),'YData',B([1 i]));
drawnow
end
  4 Comments
Voss
Voss on 26 Aug 2022
Post your code as it is now.

Sign in to comment.

Categories

Find more on Classical Mechanics in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!