Verfasst am: 07.03.2013, 20:15
Titel: break funktioniert nicht ?
Hallo Leute !
Ich habe ein Problem mit der break-Anweisung.Innerhalb eines while-loops habe lasse ich 2 DGL lösen, deren Integration unterbrochen wird, wenn y==0 wird.
Der Zeitpunkt und die Werte dieses Punktes werden herausgegeben und dienen denn wieder als Anfangbedingungen für die nächste Intergration, die mit der gleichen Bedingung abgebrochen wird.Somit wechseln sich die beiden Integrationen ab.
Da nah an der oberen ( vorher definierten ) Zeitschranke irgendwann der Punkt kommt, wo bevor y== wird, die obere Zeitschranke (tmax ) ereicht wird ( was im allgemeinen der Fall ist ), wird in disem Fall ein leeres array [] als Zeit ausgegeben ( und ich schätze auch als y) , da ja y nicht null wird.
Da aber noch zur nächsten Intergration gesprungen wird, falls man sich noch im loop befindet, werden leere arrays an den intergrator übergeben, was eine Fehlermeldung hervorruft.
Somit wollte ich den while -loop unterbrechen mit "break ", falls nach einer INtergration eine leeres array wiedergegebn wird, was ich aber irgendwie nicht hinbekomme....
Woran könnte das liegen ?
Hier der relevante Codeausschnitt:
Code:
while te<=tmax,
% if te is smaller than the upper time limit, the loop will start [t y te ye]=ode113(@ode_oneblock__case_1,[te tmax],ye,options,p);
% solution of the ode for rocking about pivot point 1 % intergration terminates if y=0
tp=[tp; t];
yp=[yp; y];
e=0.5*(Is+m*R^2)*y(:,2).^2+m*g*R*cos(alpha-y(:,1));
ep=[ep; e];
%start of integration of the equation of pivot point 2,
%because the block has tilted
[t y te ye]=ode113(@ode_oneblock_case_2,[te tmax],ye,options,p);
%solution of the oder for rocking about pivot point 2
%intergration terminates if y=0
tp=[tp; t];
yp=[yp; y];
e=0.5*(Is+m*R^2)*y(:,2).^2+m*g*R*cos(alpha+y(:,1));
ep=[ep; e];
function[value,isterminal,direction] = events(t,y,p)%Definition des Events, d.h. wenn y ==0, wird die Integration gestoppt
value = y(1);
isterminal = 1;
direction = 0;
function dy=ode_oneblock__case_1(t,y,p); %Definition der 1. DGL , als Parameter wird, Zeit, y und zusätzloche Parameter (Konstanten)übergeben
Nach dem Code kommen in dem vollständigen Code noch plot-anweisungen , woran ich sehen, kann , dass der Code schon das gewünsche Ergebnis liefert,da ja der Fehler erst zum Ende del loops auftaucht.....aber trotzdem wäre es cool, die fehlermeldung loszuwerden:
Code:
Error using odearguments (line19)
When the first argument to ode113is a function
handle, the tspan and y0 arguments must be supplied.
Jetzt funktioniert es so, wie ich mir es vorstelle, das war der Fehler.
Vielen Vielen Danke
Gruß,
Denys
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.