[T,Z] = ode45(@bouncing, [0 12], [100 0],'tspan','options','events');
options = odeset('events');
events(t,z) = [y(1)-10,1,-1]
value = y(1)-10;
isterminal = 1;
direction = -1;
axis([-5 5 0 120])
a = 0;
y = Z(:,1);
while a < 69
viscircles([0,y(1+a)],10,'Linewidth',10');
pause(0.1);
cla;
a = a+1;
end

 Akzeptierte Antwort

Walter Roberson
Walter Roberson am 25 Jun. 2015

1 Stimme

events = @(t,y) [y(1)-10, 1, -1];
options = odeset('events', events);
[T,Z] = ode45(@bouncing, [0 12], [100 0], options);
axis([-5 5 0 120])
y = Z(:,1);
for a = 1 : 69
viscircles([0,y(a)],10,'Linewidth',10');
pause(0.1);
cla;
end
However, I do not see any reason to assume you will get at least 69 results. It would make more sense to use length(y) instead of 69.

3 Kommentare

daniel parker
daniel parker am 25 Jun. 2015
Bearbeitet: Walter Roberson am 25 Jun. 2015
because i have 69 columns i used it. thank you for your comment but when i try to perform your the code i get this error
Error in deneme (line 3)
[T,Z] = ode45(@bouncing, [0 12], [100 0], options);
did i called the function wrongly ? this is my bouncing function code
function dz = bouncing(t,z) %situation 0
dz = zeros(2,1);
g=10;
dz(1) = z(2);
dz(2) = -g;
second error is that
Error using feval
Output argument "varargout{2}" (and maybe others) not assigned during call to "@(t,y)[y(1)-10,1,-1]"
function deneme
options = odeset('events', @bb_events);
[T,Z] = ode45(@bouncing, [0 12], [100 0], options);
axis([-5 5 0 120])
y = Z(:,1);
for a = 1 : length(y)
viscircles([0,y(a)],10,'Linewidth',10');
pause(0.1);
end
end
function dz = bouncing(t,z) %situation 0
dz = zeros(2,1);
g=10;
dz(1) = z(2);
dz(2) = -g;
end
function [value, isterminal, direction] = bb_events(t, y)
value = y(1)-10;
isterminal = 1;
direction = -1;
end
daniel parker
daniel parker am 25 Jun. 2015
thank you :)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by