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

Abschnittsweiser Plot von Funktionen (fplot)

 

jdoubleu
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 21.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2016, 15:44     Titel: Abschnittsweiser Plot von Funktionen (fplot)
  Antworten mit Zitat      
Guten Tag,

Durch eine Rechenoperation erhalte ich einen Vektor. Jeder ungerade indizierter Eintrag soll mit Funktion 1, jeder gerade indizierter Eintrag soll mit Funktion 2 abschnittsweise geplottet werden.
Funktion 1 hat die Form: f=x+x^0.321
Funktion 2 hat die Form: f=x+2*(x/2)^0.321

Von meiner Idee her müsste das gemäß "Specify Plotting Interval and Plot Piecewise Functions" https://de.mathworks.com/help/matlab/ref/fplot.html folgendermaßen aufgebaut sein: (in diesem Fall erstmal ohne Schleife)


Code:

v=[v1,v2,v3,v4,...];
fplot(funktion1,[0,v(1)],'b')
hold on
fplot(funktion2,[v(1),v(2)],'b')
hold off
grid on
 


Leider ist Matlab damit nicht einverstanden und gibt mir folgende Fehlermeldung:
"Range value must be an increasing real 2 element vector."

Anscheinend soll das Intervall weitergeführt werden. In meinem Fall werden die Werte auch mal kleiner.

Gibt es da einen Weg? Im Grunde genommen handelt es sich hierbei um Hystereseschleifen.



Wenn die zweite Funktion geplottet wird, sollte sie direkt am Ende der ersten anschließen und dann nach unten weiterlaufen. Quasi um 90grad gedreht

Vielen Dank für eure Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.11.2016, 19:57     Titel: Re: Abschnittsweiser Plot von Funktionen (fplot)
  Antworten mit Zitat      
Hallo jdoubleu,

Wenn die Meldung besagt, dass die Werte aufsteigend sein müssen, könntest Du sie einfach sortieren, oder?
Code:
fplot(funktion1, sort([v(1), v(2)]), 'b')

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
jdoubleu
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 21.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2016, 21:28     Titel:
  Antworten mit Zitat      
Hallo Jan, danke für deine Antwort.

Ich möchte, dass die Kurve aber zurückkehrt, wie im dargestellten Bild. Im prinzip soll dem Ende der ersten Kurve die zweite Kurve angeschlossen werden, dann aber umgekehrt laufen.

im dargestellten Bild qusi von 0 nach v1 und von v1 zurück nach 0.

Hoffe das ist verständlich!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.11.2016, 22:23     Titel:
  Antworten mit Zitat      
Hallo,

bei fplot hast du ja keine Pfeile. Siehst du also, ob die Kurve von links nach rechts geht oder umgekehrt? Wenn nicht, dann siehe Jans Vorschlag.
Ansonsten bitte etwas mehr Details.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 21.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2016, 23:30     Titel:
  Antworten mit Zitat      
Die Funktion1 wird mit dem Wert v1 des Vektors ausgewertet.
Erhalte ersten Wert. Jetzt soll bis zu diesem Wert geplottet werden. Erhalte ersten Hysterese-Ast.
Nun wird die zweite Funktion mit dem nächsten Wert des Vektors ausgewertet. Diese Kurve soll nun bis zu dem ausgewerteten Wert geplottet werden und soll an dem Punkt anfangen, wo die erste Kurve aufgehört hat. Die zweite Kurve soll jedoch zurücklaufen oder wie in anderen Fällen nach unten laufen -> siehe Beispiel

Wie bekomme ich das hin?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.11.2016, 12:02     Titel:
  Antworten mit Zitat      
Hallo jdoubleu,

Nochmal: Im fplot-Diagramm sieht man nur Linien, da macht es keinen Unterschied ob sie "hin" oder "zurück" laufen. Mathematisch ist das auch equivalent. Insofern sehe ich nicht, wieso mein Vorschlag Dein Problem nicht löst.

Wenn Du auf irgendwelchen Gründen wirklich unbedingt die X-Werte absteigend eingeben möchtest, benötigst Du ein anderes Tool als fplot .

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
jdoubleu
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 21.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2016, 17:41     Titel:
  Antworten mit Zitat      
Hallo Jan, danke für deine Antwort.

Könntest du mir einen Hinweis geben wie ich dann eine solche Hysterese plotten könnte? Ich komme damit leider nicht weiter und weiß mir nicht zu helfen! Embarassed Embarassed

Also ich habe einen Vektor mit v=[600,-230,600,-320,450] z.b.

Alle positiven Werte sollen mit Funktion1 geplottet werden und alle negativen mit Funktion2. Wie schaffe ich das jetzt, dass dabei eine Hysterese rauskommt? Also sowas z.b.:



Nachtrag:

Mit folgendem Code:
Code:

v=[600,-230,600,-320,450]
fplot(funktion1,sort([0,sigma(1)]),'b')
hold on
fplot(funktion2,sort([sigma(1),sigma(2)]),'b')
hold off
grid on
 


erhalte ich leider diese Darstellung:



Wie du sehen kannst, wird dort nichts angeknüpft wie ich es gerne hätte
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.11.2016, 16:52     Titel:
  Antworten mit Zitat      
Hallo jdoubleu,

Ich kann es leider nicht ausprobieren und damit herum spielen, da ich die Funktionen nicht habe. Sind die Pfeile von Belang? Möchtest Du unbedingt fplot verwenden?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
jdoubleu
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 21.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.11.2016, 23:35     Titel:
  Antworten mit Zitat      
pfeile sind nicht unbedingt notwendig, könnten aber durchaus sinnvoll sein. Benutzen würde ich gerne alles was geht hauptsache ich komme auf das Ergebnis Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.11.2016, 12:13     Titel:
  Antworten mit Zitat      
Hallo jdoubleu

Zitat:
Benutzen würde ich gerne alles was geht

Bitte erkläre genau, was Du brauchst. Es wäre nicht effizient, wenn die freiwillig Antwortenden mal eben alles posten, "was geht".

Wie wäre dieser Code, den eine kurze Suche im Netz gefunden hat:
Code:
X = [-3:.2:3 3:-.2:-3];
Y = [tanh(X(1:length(X)/2)-1) tanh(X(length(X)/2+1:end)+1)];

patch(X,Y,[.5 1 .5]); hold on
quiver(X(1:end-1),Y(1:end-1),diff(X),diff(Y),0);

Wie Du nun die X- und Y-Werte bestimmst, hängt an Deiner Funktion.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.11.2016, 13:06     Titel:
  Antworten mit Zitat      
Hi Jan,

sieht Klasse aus!

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.