WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

break funktioniert nicht ?

 

dero1690
Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 03.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2013, 20:15     Titel: break funktioniert nicht ?
  Antworten mit Zitat      
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];
       
       
         if te==[]
         break
         end
       
                    %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];
         
         if te==[]
         break
         end
       
         end






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

    global Is m R g alpha
    dy=zeros(2,1);  

    dy(1)=y(2);
    dy(2)=-(m*g*R*sin(alpha-y(1)))/(Is+m*R^2);

function dy=ode_oneblock_case_2(t,y,p);% Definition der 2. DGL , an sich wie 1. DGL

    global Is m R g alpha

    dy=zeros(2,1);

    dy(1)=y(2);
    dy(2)=(m*g*R*sin(alpha+y(1)))/(Is+m*R^2);




 





z.B. tmax=20,
erstinitialisierung te=0,ye=[0.1 0]


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 (line 19)
When the first argument to ode113 is a function
handle, the tspan and y0 arguments must be supplied.

Error in ode113 (line 114)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0,
odeArgs, odeFcn, ...

Error in oneblock_free_osz (line 63)
         [t y te ye]=ode113(@ode_oneblock_case_2,[te
         tmax],ye,options,p);


 




vielen vielen dank !


Grüße, Denys
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.03.2013, 00:08     Titel:
  Antworten mit Zitat      
Hallo,

ich vermute, das Problem liegt eher in der if-Abfrage. Probier mal
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
dero1690
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 03.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2013, 16:37     Titel:
  Antworten mit Zitat      
Super !

Jetzt funktioniert es so, wie ich mir es vorstelle, das war der Fehler.

Vielen Vielen Danke


Gruß,
Denys
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.