Undefined function or variable 'm'

Good evening, I am a fairly new matlab user and am trying to run ode45 to output a graph of a change in theta over time. I am using a friends code as a template and can't figure out where I am going wrong. I appreciate the help that anyone can offer. For context, the problem is of someone rappelling from a helicopter, and I want to graph the change in theta with different values for mass, wind force (Fw), and Length.
global Fw, m, g, L
R2D= 180/pi;
m= 97; % mass of soldier [Kg]
L= -5; % Length of soldier on rope (relative to helicopter)
g= 9.81; % gravity in m/s^2
dt=.01; % step size for time
tspan= 0:dt:tf;
the= 1*(pi/180); %initial angle in degrees
y0=[0, 0, the, 0];
[t,x]= ode45(@AA,tspan,y0);
figure
plot(t,x(:,1)*R2D)
title('Pendulum angle over time')
xlabel('Time [s]')
ylabel('\theta [deg]')
[n,m] = size(t);
W = -m*g.*ones(n,1);
function dxdt = AA(t,x)
global g L m Fw
dxdt = zeros(2,1);
dxdt(1) = x(2);
dxdt(2) = (Fw*cos(x(1)))/(m*L)-(g/L)*sin(x(1));
end

回答(2 个)

Replace line:
global Fw, m, g, L
with :
global Fw m g L
don't use commas.

7 个评论

There are other errors....this code works:
global Fw m g L
Fw = rand ;
R2D= 180/pi;
m = 97; % mass of soldier [Kg]
L= -5; % Length of soldier on rope (relative to helicopter)
g= 9.81; % gravity in m/s^2
dt=.01; % step size for time
tf = 100 ;
tspan= 0:dt:tf;
the= 1*(pi/180); %initial angle in degrees
y0=[0,the];
[t,x]= ode45(@PD,tspan,y0);
figure
plot(t,x(:,1)*R2D)
title('Pendulum angle over time')
xlabel('Time [s]')
ylabel('\theta [deg]')
[nx,ny] = size(t);
W = -m*g.*ones(nx,1);
end
function dxdt = PD(t,x)
global g L m Fw
dxdt = zeros(2,1);
dxdt(1) = x(2);
dxdt(2) = (Fw*cos(x(1)))/(m*L)-(g/L)*sin(x(1));
end
Thank you for your help. It does indeed work now, although it is a few thousand degrees too high. Any suggestions? Thank you again, I appreciate the speedy reply.
Dude..please note that I have used some random values for Fw..As you have not defined them, I had to make them random. you have to give your values......make a note of that....
Ya I noticed that, changed it to a normal value (12) and still end up with degrees in the thousands.
It's fixed. Gravity was 9.81, not -9.81.
Good......
And don't use globals. Search this forum to know why.

请先登录,再进行评论。

Hello Cory,
Read the documentation of 'global'. Don't put comma and it will work (line 1).
global Fw m g L

类别

帮助中心File Exchange 中查找有关 Mathematics 的更多信息

标签

提问:

2017-11-29

评论:

2017-11-29

Community Treasure Hunt

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

Start Hunting!

Translated by