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

Fehler Abfangen

 

Abdoulaye
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 27.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2013, 19:07     Titel: Fehler Abfangen
  Antworten mit Zitat      
Hallo ,

ich habe folgendes Problem :
Ich berechne die A,B,C und D Matrizen . Die Matrizen muss ich als Eingabeparameter für die Buit In function ss2tf um die Numerator und Denominator der Transfert function zu bekommen :
[num,den] = ss2tf(A,B,C,D).

Wenn die Inhalte von einer dieser Matrizen NaN ist, die function ss2tf gibt ein fehler.

Ich habe versucht diese Fehler abzufangen mit folgendes :

Code:
if isnan(A) | isnan(B) | isnan(C) | isnan(D)
    errordlg('Inhalte der Matrizen sind keine Nummer','File Error')
   
elseif ~isnan(A) & ~isnan(B) & ~isnan(C) & ~isnan(D)
[n,d]=ss2tf(A,B,C,D);
Mysys = tf(n,d);  % Ausgabe der Uebertragungsfunktion
stepplot(Mysys)
impulseplot(Mysys)
else

end
 

ich kriege trotzdem einen Fehler
Kann jemand mir helfen, diese Fehler abzufangen?
vielen Dank im voraus
_________________

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 29.08.2013, 19:14     Titel:
  Antworten mit Zitat      
Zitat:
ich kriege trotzdem einen Fehler
fehlermeldungen sollten gepostet werden wenn sie auftreten genau wie minimalbeispiele damit der code auch lauffähig ist.
so hat es viel mit raten zu tun
ich rate jetzt mal ins blaue hinein:
du brauchst denke ich bei der ersten if bedinung
Code:
und die 2. bedinungn brauchst du garnicht.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Abdoulaye
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 27.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2013, 21:55     Titel:
  Antworten mit Zitat      
Hi,
ok danke für den Hinweis.
Code:
A = ESubOL\(FSubOL - FSubOR*(FSubUR\FSubUL))
B = ESubOL\(gSubO - FSubOR*(FSubUR\gSubU))
C = (hSubL - hSubR*(FSubUR\FSubUL))
D = (0 - hSubR*(FSubUR\gSubU))
if isnan(A) | isnan(B) | isnan(C) | isnan(D)
    errordlg('Inhalte der Matrizen sind keine Nummer','File Error')
   
elseif ~isnan(A)& ~isnan(B) & ~isnan(C) & ~isnan(D)
[n,d]=ss2tf(A,B,C,D);
Mysys = tf(n,d);  % Ausgabe der Uebertragungsfunktion
 figure(1);
stepplot(Mysys)
figure(2);
impulseplot(Mysys)
 

Output argument "Mysys" (and maybe others) not assigned during call to
"C:\Users\deblo\Desktop\Studium\Matlab_Simulink\Bach_mat\LaborTraining\calcSolution.m>calcSolution".

Das ist eine function , die mit dem Ausgabeparameter A,B,C,D und Mysys wieder in der Main-function aufgerufen wird.
_________________

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 29.08.2013, 21:59     Titel:
  Antworten mit Zitat      
wie ich sehe hast du meinen vorschlag mit any noch nicht umgesetzt. versuch das doch erstmal deine erste if bedingung ist eine verknüpfung von logischen arrays und nicht eizelnen logischen werten. außerdem solltest du dafür sorgen das mysys irgendwie erzeugt wird wenn es zurückgegeben werden soll auch wenn ein fehler auftritt. dann sollte halt ein dummy zurückgegeben werden.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Abdoulaye
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 27.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2013, 22:40     Titel:
  Antworten mit Zitat      
Hi,
ich habe gerade in der Matlab Hilfe gelesen dass die function die NaN ignoriert. Ich möchte überprüfen ob eine von den Matrizen NaN hat, wenn dann kann die function ss2tf die Numeration und Denominator nicht ausgeben.
Die Mysys wird erzeugt bei :
Code:
[num,den] = ss2tf(A,B,C,D)
 Mysys = tf(num,den)

Ich will aber wenn eine von den Matrizen NaN hat, dann sollte die DialogBox angezeigt und fertig, nicht mehr weitermachen.
_________________

Viele Grüße
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: 29.08.2013, 22:51     Titel:
  Antworten mit Zitat      
Hallo,

und winkow hat dir doch einen Tipp gegeben, was du dazu machen musst.
Statt
Code:

brauchst du
Code:


z.B.
Code:
A = rand(10,10);
A(5,5) = NaN;
if any(isnan(A(:)))
    disp('A contains NaN')
end


errordlg bricht zudem die Programmausführung nicht ab.
Das ginge z.B. mit error.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 27.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2013, 23:28     Titel:
  Antworten mit Zitat      
Hallo ,

danke Harald für die Erklärung. Das mit any klappt, wir du das gemachst hast, dann muss ich für jede Matrizen überprüfen ?
so :
Code:


if any(isnan(A(:)))
    error('A contains NaN');
elseif any(isnan(B(:)))
error('B contains NaN');
elseif any(isnan(C(:)))
error('C contains NaN')
elseif any(isnan(D(:)))
error('D contains NaN')
else
[n,d]=ss2tf(A,B,C,D);
Mysys = tf(n,d);
figure(1)
stepplot(Mysys)
figure(2)
impulseplot(Mysys)
end
 

Das Problem ist wenn NaN gibt, anstatt das Error dialogbox zu zeigen und stoppen, wird das DialogBox gezeigt und danach gibt die Ausgabe Mysys weiter an die Function deswegen dieser Fehler :
Output argument "Mysys" (and maybe others) not assigned during call to calcSolution
_________________

Viele Grüße
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: 30.08.2013, 09:17     Titel:
  Antworten mit Zitat      
Hallo,

mit den ... meinte ich, dass du so weiter machen kannst. Es geht also natürlich auch
Code:
if any(isnan(A(:))) || any(isnan(B(:))) || any(isnan(C(:))) || any(isnan(D(:)))
error('At least one of the matrices contains NaN')
end


Dein Code verwendet error, deine Problembeschreibung scheint sich aber auf errordlg zu beziehen. Was denn nun?

Grüße,
Harald
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.