Changing a variable when calling a function
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Jesse Olson
am 2 Okt. 2018
Bearbeitet: Stephen23
am 2 Okt. 2018
So I have a value 'r' that I'm trying to change from a constant (r=5) to time-dependent (r=1.5*t) when I call a function and redefine 'r'. So far, no luck, I'm new at MATLAB and still don't know a lot of syntax. Here's one of my attempts (the third plot has the changing r):
%function file:
function ydot = ode5_39 (t,y,r)
r=5;
L = 1;
g = 9.81;
ydot(1) = y(2);
ydot(2) = (1/L)*(r*cos(y(1))-g*sin(y(1)));
ydot=ydot';
%plot file:
[t,y,r]=ode45('ode5_39', [0 10], [0.5 0]);
subplot(3,1,1);
plot(t,y(:,1));
ylim([-0.5 1]);
hold on
plot(t,y(:,2));
title('part (a)')
legend('x','xdot');
[t,y,r]=ode45('ode5_39', [0 10], [3 0]);
subplot(3,1,2);
plot(t,y(:,1));
hold on
plot(t,y(:,2));
title('part (b)')
legend('x','xdot');
[t,y,r]=ode45('ode5_39', [0 10], [3 0]);
r=1.5*t;
subplot(3,1,3);
plot(t,y(:,1));
hold on
plot(t,y(:,2));
title('part (c)')
legend('x','xdot');
1 Kommentar
KALYAN ACHARJYA
am 2 Okt. 2018
You assigned r=5 within the function, also you listed r in the function inputs lists, why??
Akzeptierte Antwort
Walter Roberson
am 2 Okt. 2018
function ydot = ode5_39 (t, y, rf, rc)
r = rf*t + rc;
L = 1;
g = 9.81;
ydot(1) = y(2);
ydot(2) = (1/L)*(r*cos(y(1))-g*sin(y(1)));
ydot=ydot';
with
[t, y] = ode45(@(t,y) ode5_39(t, y, 0, 5), [0 10], [0.5 0]); %r = 0*t + 5
and
[t, y] = ode45(@(t,y) ode5_39(t, y, 1.5, 0), [0 10], [3 0]); %r = 1.5*t + 0
If you wanted something more complicated than linear for finding r, then probably the easiest way to do that would be to use an anonymous function. No point in describing that unless you need it, though.
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!