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

Abschnittweise def. Funktion, Plot weicht ab

 

noob++
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 30.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2020, 13:58     Titel: Abschnittweise def. Funktion, Plot weicht ab
  Antworten mit Zitat      
Hallo, ich habe zwei ganz simple Funktionen (Graden) die ich in einer anderen Funktion zusammen fassen will.

Code:
f = @(x) f1(x).*(x<0.05) + f1(x).*(x>0.05) ;


Um den Punkt 0.05 herum weicht die Funktion von den Ursprünglichen ab, allerdings nur im Plot. Wenn ich mir den Funktionswert ausgeben lasse stimmt dieser.

Jemand eine Idee

aaa.PNG
 Beschreibung:

Download
 Dateiname:  aaa.PNG
 Dateigröße:  12.86 KB
 Heruntergeladen:  202 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.04.2020, 14:07     Titel:
  Antworten mit Zitat      
Hallo,

für x = 0.05 gibt die Funktion 0 zurück (ist weder > noch <), für alle anderen Werte f1(x). Wenn du nun die Funktion bei 0.05 und anderen Stellen in der Nähe auswertest, entsteht ein Sprung. Da plot die Datenpunkte mit Geradenstücken verbindet, entstehen Zacken.

Sinnvollerwäre m.E.:
f = @(x) f1(x).*(x<0.05) + f2(x).*(x>=0.05) ; % >= statt >

Alternativ auch stem statt plot. Dann bekommst du den Zacken nicht.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
noob++
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 30.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2020, 14:56     Titel:
  Antworten mit Zitat      
Das >= hatte ich drin, habe es dann einmal ohne probiert.
Die Grafik stammt vom Plot mit >= wenn ich den Funktionswert bei x=0.05 oder x=0.049 abfrage bekomme ich ja auch den richtigen Wert, nur im Plot ist es eben nicht richtig angezeigt.

Code:
ezplot(f ,[0, 10, -1, 1])

Was mich auch wundert, obwohl ich die Grenzen 0, 10 drin habe zeigt Matlab im Plot immer ab -1 an.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

bei >= wundert mich das.

Zitat:
bekomme ich ja auch den richtigen Wert, nur im Plot ist es eben nicht richtig angezeigt.

Eine Erklärung dafür hatte ich geschrieben (Verbindung mit Geradenstücken).

Für weitere Unterstützung bitte ein reproduzierbares Beispiel zur Verfügung stellen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
noob++
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 30.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2020, 15:49     Titel:
  Antworten mit Zitat      
Code:

f1 = @(x) 2*x + 0.4;

f2 = @(x) -2*x + 0.6;

f = @(x) f1(x).*(x<0.05) + f2(x).*(x>=0.05);

hold on
ezplot(f1 ,[0, 10, -1, 1])
ezplot(f2,[0, 10, -1, 1])
ezplot(f,[0, 10, -1, 1])
 


Auch
Code:
f = @(x) f1(x).*(x<0.05) + f2(x).*(x>0.05)+ 0.5 .*(x==0.05);

liefert das selbe Bild.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.04.2020, 16:31     Titel:
  Antworten mit Zitat      
Hallo,

wenn du einen Marker setzt, siehst du den von mir genannten Effekt.
Code:
h = ezplot(f,[0, 10, -1, 1]);
h.Marker = 'o';


Zitat:
Was mich auch wundert, obwohl ich die Grenzen 0, 10 drin habe zeigt Matlab im Plot immer ab -1 an.

In [0, 10, -1, 1] sind die ersten beiden Grenzen für die x-Achse, die anderen beiden für die y-Achse.

Wenn du nicht nur das Intervall, sondern auch die auszuwertenden Punkte selbst wählst, ist das Problem behoben:
Code:
x = 0:0.05:10; % enthält 0.05
plot(x, f(x))


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
noob++
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 30.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2020, 20:34     Titel:
  Antworten mit Zitat      
Ok, vielen Dank.

Habe ich da grundsätzlich was falsch verstanden, ich habe die auszuwertenden Punkte absichtlich immer weg gelassen meine Annahme war das Matlab dann viel feiner auflöst.

Edit: Was wäre dann bei einer Funktion wo ich vorher gar nicht weiß wie sie auszusehen hat, wenn der Punkt hier bpw bei 0.003 wäre.
Einzige Möglichkeit wäre das Intervall wesentlich feiner zu wählen als mich die Funktion Interessiert?
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 - 2024 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.