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

Function neu starten bei Fehlermeldung

 

Claudi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2012, 08:53     Titel: Function neu starten bei Fehlermeldung
  Antworten mit Zitat      
Hallo ih Lieben,
ich habe mal wieder eine Frage.
Ich habe eine Funktion geschrieben, die in einer For-Schleife eingebettet ist.
Mitten in dieser Funktion wird mittels eine if - Schleife geprüft, ob der Wert vorhanden ist. Wenn dies nicht der Fall ist, dann kommt eine Fehlermeldung und die Funktion soll wieder neu starten.
Soweit, so gut.

Problem ist jetzt nur, dass wenn die Funktion neu gestartet wird, auch Matlab bei der For-Schleife wieder bei "1" beginnt, er soll aber, wenn bei "1" die Fehlermeldung kommt mit der Funktion bei "2" beginnen.

Hier mal der Code in Auszügen:

Code:
function [BP_NRG_PH] = Temperatur_Auswertung_Fruehling

load NRG_Temp_Stationen

for p = 1:length(NRG_Temp_Stationen) % Das ist die For-Schleife, die um die ganze Funktion gelegt ist
   
NRG01 = NRG_Temp_Stationen(p,1);
   
%[.....] --> hier fehlt ein Teil des Codes, der uninteressant ist

% Hier nun der interessante Teil:
% Matlab soll was suchen und das dann ausgeben
xyz = find(NRG1_PH1(:,1)==NRG_Temp_Stationen(p,2));
for i = 1:length(xyz)
    Station1(i,1:8)=NRG1_PH1(xyz(i,1),1:8);
end

% Schlecht ist, wenn mein xyz leer ist,dann kommt die Fehlermeldung
A = isempty(xyz);
if A==1
    disp 'ABBRUCH! Station 1 nicht vorhanden'
    NRG01
    Temperatur_Auswertung_Fruehling
 % --> hier soll neu mit der Funktion begonnen werden, allerding diesmal nicht mit p=1, sondern p=2
end


%[.....] --> hier fehlt ein Teil des Codes, der uninteressant ist

end
end


 


Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 11.07.2012, 09:32     Titel:
  Antworten mit Zitat      
Hey Claudi,

vor ab kurz, If "Schleifen" gibt es nicht Wink, sind Bedingungen Wink

Das deine Funktion immer bei 1 anfängt ist klar, entweder du übergibst auch einen Startwert mit bei der Funktion

Code:
function [BP_NRG_PH] = Temperatur_Auswertung_Fruehling(StartValue)


und lässt dann dir for Schleife von dort weg starten:

Code:

for p = StartValue:length(NRG_Temp_Stationen) % Das ist die For-Schleife, die um die ganze Funktion gelegt ist


oder du rufst die Funktion nicht neu auf sondern machst einfach nichts wenn in xyz steht und lässt die for Schleife weiterlaufen bis etwas in xyz steht.

Wieso willst du eigentlich in einer for Schleife einen rekursiven Aufruf machen?

Gruß Goofy
Private Nachricht senden Benutzer-Profile anzeigen
 
Claudi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2012, 10:57     Titel:
  Antworten mit Zitat      
mmmh ....

wenn ich das mit dem startvalue mache, dann habe ich doch aber das gleiche problem, oder?

dann muss ich ja in meiner if Bedingung Wink irgendwie auch reinschreiben, dass mein startvalue nicht 1 ist sondern bspw 2

geht das dann einfach so:

Code:
if A==1
    disp 'ABBRUCH! Station 1 nicht vorhanden'
    NRG01
    Temperatur_Auswertung_Fruehling
    startvalue = startvalue +1 % neu!!!!!!!!!!

end


ich will jetzt ungern alles ummodeln, weil meine Funktion auch so zufriedenstellend läuft und ich glücklich drüber bin.
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 11.07.2012, 11:14     Titel:
  Antworten mit Zitat      
im Funktionsaufruf musst du dann den Startwert übergeben

Code:
if A==1
    disp 'ABBRUCH! Station 1 nicht vorhanden'
StartValue = StartValue +1;
    NRG01
    Temperatur_Auswertung_Fruehling(neuerStartwert)
 % --> hier soll neu mit der Funktion begonnen werden, allerding diesmal nicht mit p=1, sondern p=2
end


damit sollte es dann gehen.

Die Gefahr bei der Rekursion ist der Speicher, weil er ja jedes Mal die Daten anlegt und die alten aber im Speicher behält.

Wenn das kein Problem macht kannst du es aber auch so machen.
Sonst die if Bedingung einfach über die ganze weiter Berechnung drüber geben (Das Wort end, am Ende hinsetzten) und dann sollte es eigentlich ohne viel herum stellen auch klappen Smile
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.