Differenzenquotient, Umsetzung mit Fehler

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
Intregral
User
Beiträge: 20
Registriert: Montag 15. März 2021, 13:35

Hallo,

analog zu diesem Video https://www.youtube.com/watch?v=XJuSMzgHdNU wollte ich ein Script zum Differenzenquotient ausprobieren.

Leidiges Thema: Python 2 vs. Python 3.

Der Code ist aus dem Video:

Code: Alles auswählen

def f(x):
    return (2*x**0,5)

def quotient(x,x0):
    return ((f(x)-f(x0))/(x-x0))

for x in range (100,200):
    print(quotient(x/100.0),2)
Bekomme aber immer den Fehler:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-21-d50cf41a071b> in <module>
8
9 for x in range (100,200):
---> 10 print(quotient(x/100.0),a)
11
12

TypeError: quotient() missing 1 required positional argument: 'x0'
So wie ich das sehe fehlt der Funktion Quotient das zweite Argument. Ich weiß aber nicht wie ich den Fehler beheben kann, ich übergebe da ja zwei Werte... :?
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Nein, Du übergibst nur ein Argument. An `print` übergibst Du zwei Argumente.
`f` gibt ein Tuple zurück; das kann man nicht von einem anderen Tuple abziehen. Kommazahlen schreibt man mit Punkt.
Benutzeravatar
__blackjack__
User
Beiträge: 14055
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Oder anders ausgedrückt: hat nichts mit Python 2 vs. 3 zu tun.

``return`` ist übrigens keine Funktion, die Klammern um das ”Argument” was keines ist, gehören da nicht hin.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Intregral
User
Beiträge: 20
Registriert: Montag 15. März 2021, 13:35

Also da kann ich nicht ganz folgen.

Das Script läuft unter der Version 2.7.6. ja korrekt (wie im Video zu sehen). Ok, die "0,5" ist mein Tippfehler.

Die Funktion Quotient ist doch eine Funktion mit zwei Parametern, x und x0.
Da sollen ja zwei Parameter übergeben werden: x/100 und 2.

BTW das Programm ist nicht von mir, ich versuche das nur unter Python 3 zum Laufen zu bringen (und zu verstehen natürlich..)

Bin offen für Vorschläge... ;)
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Was es zu Deinem Problem zu sagen gibt, habe ich schon gesagt. Schau Dir den Aufruf nochmal genau an.
Benutzeravatar
Dennis89
User
Beiträge: 1556
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

ist hier nicht nur eine Klammer falsch gesetzt?

Code: Alles auswählen

 print(quotient(x/100.0, 2))

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

@Dennis89: damit hast du Intregal ja den Lerneffekt angenommen.
Benutzeravatar
Dennis89
User
Beiträge: 1556
Registriert: Freitag 11. Dezember 2020, 15:13

Oh Entschuldigung, daran habe ich gerade nicht gedacht.
Eventuell kann jemand meinen Beitrag kurz löschen, vielleicht hat er es noch nicht gesehen.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Intregral
User
Beiträge: 20
Registriert: Montag 15. März 2021, 13:35

Ok ok ich brauch eine Brille. ;)
Das mit dem Punkt und Komma ist aber echt gemein, na ja dafür haben wird das metrische System.

Hab es raus:

Code: Alles auswählen

# Ableitung an der Stelle x per Differenzenquotient berechnen lassen

#Funktion f(x)=sqrt(2x)

def f(x):                 
    return ((2*x)**0.5)

#Differenzenquotient

def quotient(x,x0):        
    return ((f(x)-f(x0))/(x-x0))

#Ausgabe
for x in range (100,200):
    print(quotient(x/100.0,2))

Danke für die Denkanstöße. :)
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Ignorierst du den Ratschlag von __blackjack__ bezüglich des `return` absichtlich oder versehentlich?
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Jetzt sind nur noch zu viele Klammern im Code:

Code: Alles auswählen

def quotient(f, x, x0):
    return (f(x) - f(x0)) / (x - x0)

def f(x):                 
    return (2 * x) ** 0.5

for x in range(100, 200):
    print(quotient(f, x / 100.0, 2))
Intregral
User
Beiträge: 20
Registriert: Montag 15. März 2021, 13:35

einfachTobi hat geschrieben: Donnerstag 25. März 2021, 20:13 Ignorierst du den Ratschlag von __blackjack__ bezüglich des `return` absichtlich oder versehentlich?
Ups hab ich in der Euphorie übersehen. :oops:
Antworten