Seite 1 von 1

2 Funktionen plotten

Verfasst: Freitag 24. März 2017, 10:41
von dchingi
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))

Re: 2 Funktionen plotten

Verfasst: Freitag 24. März 2017, 11:13
von Sirius3
@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

Re: 2 Funktionen plotten

Verfasst: Freitag 24. März 2017, 12:46
von MagBen
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.

Re: 2 Funktionen plotten

Verfasst: Freitag 24. März 2017, 13:00
von dchingi
Perfekt! Genau das habe ich gesucht. Vielen Dank!

Re: 2 Funktionen plotten

Verfasst: Freitag 24. März 2017, 13:04
von Sirius3
@MagBen: genau dafür gibt es ja die piecewise-Funktion, dass man sowas nicht selbst machen muß.

Re: 2 Funktionen plotten

Verfasst: Freitag 24. März 2017, 17:00
von MagBen
Ich würde bei der Arbeit (Maschinenbau) keinen Ingenieur dazu bekommen piecewise zu benutzen. Die Matlab-Syntax ist dagegen vermittelbar.

Re: 2 Funktionen plotten

Verfasst: Sonntag 26. März 2017, 23:09
von dchingi
Warum nicht? Was spricht gegen picewise?