Matlab and Pendulum function - Need Help - Thank you.

조회 수: 2 (최근 30일)
DJ V
DJ V 2016년 12월 6일
답변: Weronika Izdebska 2018년 9월 4일
function T= pendulum( L, a0 )
%PENDULUM Summary of this function goes here
% Detailed explanation goes here
%initializing variables
alpha = a0;
delta_t = 1*10^-6;
g = 9.8;
stop = false;
theta = a0;
t = 0;
omegalast =0
%Set stop = falsE so that loop stop isn't true at start
while stop == false;
%increment t for each step into loop
t = t+ delta_t;
%compute alpha using given formula
alpha = - g/L*sin(theta);
%compute omega as alpha times timestep, delta_t
omega = alpha*delta_t;
%theta is then theta plus omega times delta_t
theta = theta + omega*delta_t;
%check to see if pendulum speed has
%slowed down from the last timestep
%This indicatest that pendulum is now past the
%minimum point so stop program
if abs(omega) <abs(omegalast)
stop = true;
end
%IF THE SOFTWARE SHOULD STOP IT IS NOW SET TO DO SO
%SET OMEGALAST EQUAL TO OMEGA FOR CHECK IN NEXT TIME STEP
omegalast = omega;
end
%COMPUTE PERIOD AS 4 TIMES ELAPSED TIME TO BOTTOM OF PENDULUM
T = 4*t;
end
This isn't producing the right answers,and I don't know why. Perhaps a physic or math major can help me?
The problem is stated as:
* Write a function called pendulum that is called like this: T = pendulum(L,a0), where all arguments are scalars and a0 is a positive number less than π. The function calculates the period T of a simple pendulum, which is the time required for a weight attached to a rod of length L and negligible weight to start from rest, swing with no friction under the influence of gravity from an initial angle a0, to – a0 and back to a0 again, as shown in the figure. The motion is determined by physics using the following definitions, where units [square brackets] are provided but are not needed: θ = angle [radians]
  댓글 수: 7
DJ V
DJ V 2016년 12월 6일
편집: DJ V 2016년 12월 6일
DJ V
DJ V 2016년 12월 6일
CODE WITH INDENTS:
function T= pendulum( L, a0 )
%PENDULUM Summary of this function goes here
% Detailed explanation goes here
%initializing variables
alpha = a0;
delta_t = 1*10^-6;
g = 9.8;
stop = false;
theta = a0;
t = 0;
omegalast =0
%Set stop = false so that loop stop isn't true at start
while stop == false;
%increment t for each step into loop
t = t+ delta_t;
%compute alpha using given formula
alpha = - (g/L)*sin(theta);
%compute omega as alpha times timestep, delta_t
omega = alpha*delta_t;
%theta is then theta plus omega times delta_t
theta = theta + omega*delta_t;
%check to see if pendulum speed has
%slowed down from the last timestep
%This indicatest that pendulum is now past the
%minimum point so stop program
if abs(omega) <abs(omegalast)
stop = true;
end
%IF THE SOFTWARE SHOULD STOP IT IS NOW SET TO DO SO
%SET OMEGALAST EQUAL TO OMEGA FOR CHECK IN NEXT TIME STEP
omegalast = omega;
end
%COMPUTE PERIOD AS 4 TIMES ELAPSED TIME TO BOTTOM OF PENDULUM
T = 4*t;
end

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

채택된 답변

Geoff Hayes
Geoff Hayes 2016년 12월 6일
DJ - you've missed two important points in the problem description. The first is the
...the angular velocity omega is increased by the product of the angular acceleration and delta t..
This means that instead of
omega = alpha*delta_t;
you would initialize omega to zero (outside of your while loop since the pendulum is initially at rest) and then increase it (on each iteration) as
omega = omega + alpha*delta_t;
And the algorithm
...continues until the pendulum has passed its lowest point, at which theta equals zero...
So you would break out of your while loop once theta is near or less than zero.
  댓글 수: 2
DJ V
DJ V 2016년 12월 6일
That was it. Thanks a lot!
Souvik singha
Souvik singha 2017년 6월 11일
please sir if you can showcase your final and correct code here, it would be very helpful.

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

추가 답변 (3개)

Abid  Rizvi
Abid Rizvi 2018년 2월 16일
Try this code:
function [T] = pendulum(L,a0)
T = 0;
if L > 0
dt = 1.e-6;
a_velocity = 0;
g = 9.8;
theta = abs(a0);
while theta > 0
a_acceleration = g*sin(theta)/L;
a_velocity = a_velocity + dt * a_acceleration;
theta = theta - dt * a_velocity;
T = T + dt;
end
T = T*4;
end
end

Huan Yang
Huan Yang 2017년 6월 8일
function T=pendulum(L,a0) cta=a0; t=10^-6; w=0; T=0; while cta>0 T=T+t; a=-9.8/L*sin(cta); w=w+a*t; cta=cta+w*t; end
T=T*4;
end
  댓글 수: 1
Hasan Emre Tekce
Hasan Emre Tekce 2017년 8월 29일
Thanks Huan Yang but there is a lil bit mistake in this code. In order to fix this code to work properly is to just add to while loop L~= 0 since the division cannot be infinite and this is exact solution.
....
while cta>0 && L~= 0 may fix your solution.

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


Weronika Izdebska
Weronika Izdebska 2018년 9월 4일
function T = pendulum(L,angle0) T = 0; if L > 0 dt = 1e-6; g = 9.8; angle = abs(angle0); omega = 0; T = 0; while angle > 0 a = g*sin(angle)/L; omega = omega + dt * a; angle = angle - dt * omega; T = T + dt; end T = T * 4; end end

카테고리

Help CenterFile Exchange에서 Classical Mechanics에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by