2 Funktionen plotten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dchingi
User
Beiträge: 8
Registriert: Mittwoch 26. Oktober 2016, 13:33

Hallo, ich würde gerne zwei Funktionen nacheinander plotten. Das heißt, dass bis zum x-Wert 49 die Funktion y + 2 * x geplottet wird und ab dem Wert 50 die Funktion y + 10 * x. Mit meinem Code kommt immer die Fehlermeldung:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Mit a.any() or a.all() funktioniert es nicht, weil dann immer nur eine der beiden Funktionen geplottet wird. Kennt jemand eine andere Möglichkeit oder kann mir sonst einen Tipp geben?
Vielen Dank.
Version Python 3.5

Code: Alles auswählen

def f(x, y):
    if x < 50:
        return y + 2 * x
    elif x >= 50:
        return y + 10 * x

x = np.arange(2, 4, 0.01)
y = 1

plt.plot(f(x,y))
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@dchingi: was Du suchst ist piecewise:

Code: Alles auswählen

z = np.piecewise(x, [x < 50, x >= 50], [lambda x: y + 2 * x, lambda x: y + 10*x])
oder bei Dir einfach

Code: Alles auswählen

z = y + (2 + 8 * (x>=50)) * x
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

So würde ich das machen:

Code: Alles auswählen

z = np.empty(x.shape)
z[x <  50] = y +  2*x[x <  50]
z[x >= 50] = y + 10*x[x >= 50]
Mit x Werten von 2 bis 4

Code: Alles auswählen

x = np.arange(2, 4, 0.01)
wirst Du aber keinen Effekt sehen.

Mit

Code: Alles auswählen

x = np.arange(0, 100, 0.01)
kannst Du sehen, dass Deine Funktion bei x=50 nicht C0 stetig ist. Soll das so sein?

Das ganze sind auch nicht 2 Funktionen (wie der Titel lautet), sondern Du plottest lediglich eine Funktion, die in der Definition eine Fallunterscheidung hat. Wenn Du wirklich zwei (verschiedene) Funktion plotten wolltest, dann geht das einfacher.
a fool with a tool is still a fool, www.magben.de, YouTube
dchingi
User
Beiträge: 8
Registriert: Mittwoch 26. Oktober 2016, 13:33

Perfekt! Genau das habe ich gesucht. Vielen Dank!
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@MagBen: genau dafür gibt es ja die piecewise-Funktion, dass man sowas nicht selbst machen muß.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Ich würde bei der Arbeit (Maschinenbau) keinen Ingenieur dazu bekommen piecewise zu benutzen. Die Matlab-Syntax ist dagegen vermittelbar.
a fool with a tool is still a fool, www.magben.de, YouTube
dchingi
User
Beiträge: 8
Registriert: Mittwoch 26. Oktober 2016, 13:33

Warum nicht? Was spricht gegen picewise?
Antworten