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

Horizontale Linienschar plotten

 

Lucy

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2011, 11:48     Titel: Horizontale Linienschar plotten
  Antworten mit Zitat      
Hallo zusammen,

ich entschuldige mich für diese vermutlich simple Frage, aber ich werd grad bescheuert hier ^^

Ich möchte eine Schar von äquidistanten horizontalen Linien plotten. Mit dem Plotbefehl klappt es zwar, aber dann werden nur einzelne Punkte und keine Linien gemalt; das ('-b') wird aus irgendeinem Grund ignoriert:

Code:
y=linspace(-20,20);
x=linspace(-50,50,101);

N=length(y);

for i=1:N
yA=y(i)
plot(x,yA,'-b'), hold on
end
 


Ich habe mich im Forum umgeschaut und den line-Befehl gefunden, aber damit klappt es auch nicht. Mein Code:

Code:
y=linspace(-20,20);
x=linspace(-50,50,101);

N=length(y);
xend=length(x);

for i=1:N
yA=y(i);
line([x(1) x(xend)],[y(i) y(i)]), hold on
end



Wäre jemand so gütig meinen Hirnknoten aufzulösen? Danke!!


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 14.04.2011, 11:52     Titel:
  Antworten mit Zitat      
Also dein Code mit line() funktioniert bei mir.

Wenn du es mit plot machen willst, musst du y auch als Vektor plotten, damit eine Linie zustande kommt:
Code:
plot(x, yA.*ones(length(x),1), '-b')
Private Nachricht senden Benutzer-Profile anzeigen
 
Lucy

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2011, 12:15     Titel:
  Antworten mit Zitat      
eupho hat Folgendes geschrieben:
Also dein Code mit line() funktioniert bei mir.


Komisch. Bei mir malt er nur die erste Linie und bricht dann ab mit der Bemerkung "Index exceeds matrix dimensions".

Deine Lösung über "plot" funktioniert bei mir, so kann ich es natürlich auch machen, danke! Wüsste aber trotzdem gern warum er bei mir mit dem line-Befehl nicht klarkommt Question
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 14.04.2011, 13:09     Titel:
  Antworten mit Zitat      
Schreib mal die genaue Fehlermeldung und in welcher Zeile sie auftritt

Code:
y=linspace(-20,20);
x=linspace(-50,50,101);

N=length(y);
xend=length(x);

for i=1:N
yA=y(i);
line([x(1) x(xend)],[y(i) y(i)]), hold on
end


funktioniert bei mir auf jeden Fall. Lösche eventuell mal die aktuellen Werte mit clear all (sofern du die Daten im Workspace nicht mehr benötigst!).
Private Nachricht senden Benutzer-Profile anzeigen
 
Lucy

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2011, 13:31     Titel:
  Antworten mit Zitat      
eupho hat Folgendes geschrieben:
Schreib mal die genaue Fehlermeldung und in welcher Zeile sie auftritt


??? Index exceeds matrix dimensions.

Error in ==> [Verweis auf die Zeile mit dem line-Befehl)


Zitat:
Lösche eventuell mal die aktuellen Werte mit clear all (sofern du die Daten im Workspace nicht mehr benötigst!).


"clear all" ist generell die erste Zeile in meinen Progrämmchen Smile



Falls das wichtig ist: Ich habe Matlab 7.6.0 (R2008a).
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 14.04.2011, 13:35     Titel:
  Antworten mit Zitat      
Schreib das ganze mal in eine .m-Datei (als Skript), dann zeigt er dir auch die zugehörige Linie.

Ich sehe jetzt nicht, wo der Fehler auftreten sollte (ich habe R2009b).
Private Nachricht senden Benutzer-Profile anzeigen
 
Lucy

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2011, 14:24     Titel:
  Antworten mit Zitat      
Ich arbeite eh nur mit dem Editor, hab die Datei mal angehängt.

TMP.m
 Beschreibung:

Download
 Dateiname:  TMP.m
 Dateigröße:  327 Bytes
 Heruntergeladen:  363 mal
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.04.2011, 15:09     Titel:
  Antworten mit Zitat      
Hallo Lucy,

Der unbedachte Einsatz "clear all" hat schon zu vielen Problemen geführt. Da es nebenbei auch alle bereits geladenen M-Files aus dem Speicher wirft macht es Matlab auch deutlich langsamer - ein Faktor 200 ist durchaus realistisch bei kleinen Programmen. Ich rate deswegen grundsätzlich davon ab. Die Verwendung von Funktionen statt Scripten ist eine viel stabilere und effizientere Methode um Fehler durch falsch belegte Variablen zu umgehen.

Nun zu Deinem Programm:
Code:
yA=yS(i);
    line([x(1) x(xend)],[yA(i) yA(i)]), ...

"yA" ist ein Skalar, und "yA(i)" demnach ein Fehler. Ich vermute, Du meinst entweder "yS(i)" oder "[yA, yA]" im LINE Befehl.

Du kannst zum Finden solcher Probleme übrigens sehr gut den Debugger verwenden:
Code:

Dann stopped Matlab, wenn der Fehler auftritt und Du kannst die Werte aller Variablen bequem anschauen um die Ursache zu ergründen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Lucy

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2011, 16:22     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo Lucy,

Der unbedachte Einsatz "clear all" hat schon zu vielen Problemen geführt. Da es nebenbei auch alle bereits geladenen M-Files aus dem Speicher wirft macht es Matlab auch deutlich langsamer - ein Faktor 200 ist durchaus realistisch bei kleinen Programmen. Ich rate deswegen grundsätzlich davon ab. Die Verwendung von Funktionen statt Scripten ist eine viel stabilere und effizientere Methode um Fehler durch falsch belegte Variablen zu umgehen.


Das "clear all" ist ein Relikt aus den Anfangszeiten meiner ohnehin noch jungen Programmiererkarriere. Davor war mir häufig eine Variable hochgelaufen, anstatt bei jedem Programmstart bei 0 zu beginnen. Mittlerweile weiß ich dass ein einfaches "clear" auch gereicht hätte.
Für meine popeligen Anwendungen wäre zwar auch eine Verlangsamung um den Faktor 1000 unproblematisch, aber ich werde mir das im Hinterkopf notieren, sollte ich doch mal umfangreichere Anwendungen schreiben.

Jan S hat Folgendes geschrieben:

Nun zu Deinem Programm:
Code:
yA=yS(i);
    line([x(1) x(xend)],[yA(i) yA(i)]), ...

"yA" ist ein Skalar, und "yA(i)" demnach ein Fehler. Ich vermute, Du meinst entweder "yS(i)" oder "[yA, yA]" im LINE Befehl.


Ah. Großes Missverständnis meinerseits, ich hatte gedacht dass yA in der Schleife automatisch zum Vektor wird, weil mit jedem Schritt eine Komponente hinzugefügt wird. Ziemlich dämlich. So klappt es jetzt:
Code:

yS=linspace(-20,20);
x=linspace(-50,50,101);
N=length(yS);
xend=length(x);
for i=1:N
line([x(1) x(xend)], [yS(i) yS(i)]), grid on, hold on
end
hold off



Den Debugger hatte ich bisher nicht gekannt, guter Tip, eventuell komme ich dann demnächst selbst auf den Fehler anstatt euch zu bemühen. Aber schön dass hier auch Programmierspasten betreut werden Very Happy
 
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.