Wenn ich z.B. die Funktion y = x/(a*x**3 +b*x**2+c) plotten will, wird an der x-Koordinate, wo der Nenner gleich Null ist, eine senkrechte Linie gezeichenet und es wird eine Warnung angezeigt.
Die senkrechte Linie ist einfach falsch, denn dort gibt es keine Funktionswerte.
Kann man beides vermeiden?
Division durch Null
- __blackjack__
- User
- Beiträge: 13241
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Plotten, womit? Wie?
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
-
- User
- Beiträge: 61
- Registriert: Montag 26. Dezember 2022, 14:53
import numpy as np
import matplotlib.pyplot as plt
def f(x,a,b,c):
y = x/(a*x**3 +b*x**2+c)
return y
x = np.arange(-2, 2, 0.001)
fig, ax = plt.subplots()
s = f(x,1,1,-1)
l, = plt.plot(x, s, lw=2)
plt.show()
import matplotlib.pyplot as plt
def f(x,a,b,c):
y = x/(a*x**3 +b*x**2+c)
return y
x = np.arange(-2, 2, 0.001)
fig, ax = plt.subplots()
s = f(x,1,1,-1)
l, = plt.plot(x, s, lw=2)
plt.show()
-
- User
- Beiträge: 61
- Registriert: Montag 26. Dezember 2022, 14:53
entschuldige das fehlende indent
Du berechnest numerisch eine Funktion, und jeder Funktionswert wird beim Plotten mit einer Linie mit dem nächsten verbunden, so natürlich auch von -267 nach 1917, woher soll auch die Plotfunktion wissen, dass Du da kein Linie möchtest.
Du kannst die Sprungstelle ermitteln und drumrum plotten:
Du kannst die Sprungstelle ermitteln und drumrum plotten:
Code: Alles auswählen
sprungstelle = np.argmax(abs(np.diff(s))) + 1
plt.plot(x[:sprungstelle], s[:sprungstelle])
plt.plot(x[sprungstelle:], s[sprungstelle:])
plt.show()
-
- User
- Beiträge: 61
- Registriert: Montag 26. Dezember 2022, 14:53
Hier ist der Wert der Spunstelle gleich 2755, aber die Anzeige bleibt die gleiche.
Nach dem mehr als 50sten Post darfst auch du gerne den Code-Tags-Button bemuehen, damit dein Code vernuenftig formatiert wird. Das ist der </>-Knopf im vollstaendigen Editor, zu erreichen ueber den Button unten.
Zu deinem Problem: ein Line-Plot verbindet alle aufeinanderfolgenden Punkte. Daher die Linie. Das kann man durch das einfuegen des Wertes NaN an der Stelle verhiendern. Siehe https://matplotlib.org/2.0.2/examples/p ... _test.html
Zu deinem Problem: ein Line-Plot verbindet alle aufeinanderfolgenden Punkte. Daher die Linie. Das kann man durch das einfuegen des Wertes NaN an der Stelle verhiendern. Siehe https://matplotlib.org/2.0.2/examples/p ... _test.html
-
- User
- Beiträge: 61
- Registriert: Montag 26. Dezember 2022, 14:53
Code: Alles auswählen
import matplotlib.pyplot as plt
def f(x,a,b,c):
y = x/(a*x**3 +b*x**2+c)
return y
x = np.arange(-2, 2, 0.001)
fig, ax = plt.subplots()
s = f(x,1,1,-1)
plt.xlim(-2, 2)
plt.ylim(-2, 2)
plt.plot(x, s, lw=2)
plt.show()
-
- User
- Beiträge: 61
- Registriert: Montag 26. Dezember 2022, 14:53
das mit dem </>-Knopf funktioniert nicht wie gedacht.
Aber ich kann doch nicht ahnen, wo der Wert Unendlich wird, er kann ja auch irrational sein.
Aber ich kann doch nicht ahnen, wo der Wert Unendlich wird, er kann ja auch irrational sein.
Du musst den Code markieren, und dann den Knopf druecken. Und da ja genug Beispiele existieren, die belegen, dass es grundsaetzlich geht, liegt das Problem wohl auf der Benutzeseite. Und der Benutzer muss dann noch eine Minute oder zwei mit der Vorschau spielen.hubertgrassmann hat geschrieben: ↑Montag 12. Juni 2023, 18:01 das mit dem </>-Knopf funktioniert nicht wie gedacht.
Was die Frage nach den Werten angeht: entweder bestimmst du die Nullstellen selbst, und streichst die raus. Oder eine relativ simple Heuristik, die bei einem zu grossen Unterschied bei aufeinander folgenden Werten NaN einfuegt. Aber das geht natuerlich nicht bei Definitionsluecken, die in der gleichen Richtung liegen. Doch da ist die Darstellung dann ja auch nicht problematisch.
-
- User
- Beiträge: 61
- Registriert: Montag 26. Dezember 2022, 14:53
Problem gelöst!
Durch eine drastische Vergrößerung des arange-Abstands merkt man, dass die "senkrechte" Linie gar nicht senkrechtn ist; wenn ich nun beim plot den Parameter '.' einfüge, ist alles ok
Durch eine drastische Vergrößerung des arange-Abstands merkt man, dass die "senkrechte" Linie gar nicht senkrechtn ist; wenn ich nun beim plot den Parameter '.' einfüge, ist alles ok