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

plot in for schleife - Fehler bei zweitem Durchlauf

 

Dontknowmyname

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2014, 15:26     Titel: plot in for schleife - Fehler bei zweitem Durchlauf
  Antworten mit Zitat      
Hi @all,

ich hab ein kleines Problem, dass ich absolut nicht nachvollziehen kann. Folgender Code steht in einer For-Schleife:
Code:
       
hold on;
plot(handles.Axes_AbsoluteValues, beg:mpCount, handles.meas(beg:mpCount).P1, 'r');
plot(handles.Axes_AbsoluteValues, beg:mpCount, handles.meas(beg:mpCount).P2, 'g');
plot(handles.Axes_AbsoluteValues, beg:mpCount, handles.meas(beg:mpCount).P3, 'b');
plot(handles.Axes_AbsoluteValues, beg:mpCount, handles.meas(beg:mpCount).P4, 'c');
hold off;
legend(handles.Axes_AbsoluteValues, 'P1', 'P2', 'P3', 'P4','location','NorthWest');

Beim ersten Durchlauf der For-Schleife passiert noch kein Fehler. Der Plot funktioniert wie erwartet.
Beim zweiten Durchlauf kommt eine Fehlermeldung, die ich nach einer Stunde Sucherei einfach nicht nachvollziehen kann, da die Optionen dieselben sind wie beim ersten Durchlauf:
Zitat:
Error using plot
String argument is an unknown option.


Evtl. kann mit jemand nen kleinen Hinweis auf die Mögliche Ursache geben.


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 24.03.2014, 17:38     Titel:
  Antworten mit Zitat      
Hallo

das ist schwer zu sagen, da muss du dir die Werte genau anschauen
Mir scheint, dass du wohl die Werte irgendwo in der Schleife überschreibst,
der Fehler tritt nähmlich nur auf wenn der Zweite Parameter String ist:
Code:

% hier tritt dieser Fehler nur auf,  wenn zweiter Parameter String ist.
plot(gca,'',1:10,'g')
 


Also stoppe mit dem Debugger dort wenn der Fehler auftritt, und schaue dir dann die Werte.
Gebe dazu in der Konsole folgendes vorher ein, dann stoppt Matlab, wenn ein Fehler auftritt:
Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
Dontknowmyname

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2014, 09:13     Titel: Re: plot in for schleife - Fehler bei zweitem Durchlauf
  Antworten mit Zitat      
Ich habe den Fehler mittlerweile gefunden. Und zwar hat Matlab irgendwie ein Problem mit folgendem Ausdruck im Plot :

Code:
       
plot(..., handles.meas(beg:mpCount).P1 ...);
 


Allerdings nur, wenn "beg:mpCount" mehr als ein Element indiziert. Beim ersten Durchlauf läuft es tadellos, weil mpCount = beg = 1 ist. Im zweiten Durchlauf ist mpCount = 2, was den Fehler verursacht.

Das Problem ist, dass nach Indizierung durch (beg:mpCount) noch eine Referenzierung auf das Feld P1 erfolgt. Das geht eben nur dann, wenn nur ein Element aus "handles.meas" indiziert wird und nicht mehrere.

Trotzdem Danke für die Mühe.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.03.2014, 13:34     Titel:
  Antworten mit Zitat      
Okay versteh, an diese Konstellation habe ich nicht gedacht.

Das stimmt, weil so ein Aufruf von Array of Structs, mehrere Ausgaben zu Folge hat, was mehre Eingaben beim PLOT verursacht.
Code:

meas=struct('P1',num2cell(1:10))
%
% das verursacht den oben besagten Fehler
plot(gca, 1:10, meas(1:10).P1, 'r')
% das entspreche
% plot(gca, 1:10, meas(1).P1, meas(2).P1, meas(3).P1,..., meas(10).P1 'r')
 

PLOT dagegen bietet ja die Möglichkeit mehrere Punkte einzugeben, deswegen meckert der PLOT ja an letzten Farbe Parameter, weil das nicht konsistent ist
so was ist z.B. erlaubt
Code:

plot(gca, 1:10, 1:10,1:10,1:2:20)
pause(1)
plot(gca, 1:10, 1:10,'r',1:10,1:2:20,'b')
 


Die Werte aus der Struct, falls man mehrere Stellen extrahieren möchte, sollte man zuerst in einem Array sammeln. mit dem CAT oder einfach Eckigen Klammern []
Code:

meas=struct('P1',num2cell(1:10))
plot(gca, 1:10, [meas(1:10).P1], 'r')

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Dontknowmyname

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2014, 09:07     Titel:
  Antworten mit Zitat      
Ah, ok danke. Ich werd es bei Gelegenheit testen, hab aber schon das struct umgeschrieben. Wenn es wie gewünscht funktioniert baue ich es vllt. wieder um, weil anders ist es schon schöner.
 
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.