TypeError: 'tuple' object is not callable

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
Mimi_Mi
User
Beiträge: 2
Registriert: Donnerstag 28. Mai 2020, 09:11

Hallo zusammen!
Nachdem ich mich durch einige Seiten gelesen habe, aber leider nicht auf die Lösung für mein Problem komme, versuche ich es hier.

Ich habe schon herausgefunden, das "TypeError: 'tuple' object is not callable" auftritt, wenn ein Komma fehlt. In meinem Fall weiß ich aber nicht, wo so eines hin müsste.
Zur Aufgabe:
Wir sollten eine Methode eval_discrete() schreiben, die eine reelle Funktion an n äquidistanten Stellen im Intervall auswertet. Diese sieht bei mir wie folgt aus:

Code: Alles auswählen

def eval_discrete(n, intervall, fkt):
   
    # x-werte ist die Liste der Stützstellen
    x_werte = np.linspace(intervall[0], intervall[-1], n)
    #Funktionswerte an gegebenen Stützstellen
    fx_werte = fkt(x_werte)
    
    return x_werte, fx_werte
Versuche ich nun meine Funktion f(x) mit der Methode eval_discrete() zu plotten bekomme ich die o.g. Fehlermeldung

Code: Alles auswählen

# für f(x)

# n ist Anzahl der äquidistant verteilten Stellen
n = 50
# 𝐼𝑓=[−2,2] ist Intervall, auf dem f geplottet werden soll
I_f = [-2, 2]
fkt = fkt_f

​plotFunk(I_f, eval_discrete(n, I_f, fkt))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-4a48ffbba8fb> in <module>
      7 
      8 
----> 9 plotFunk(I_f, eval_discrete(n, I_f, fkt))

<ipython-input-2-61902a5bb560> in plotFunk(intervall, fkt, plotPoints, show)
      5     x = np.linspace(intervall[0], intervall[1], plotPoints)
      6     # Berechnung der Funktionswerte an diesen diskreten Punkten
----> 7     fx = fkt(x)
      8 
      9     plt.plot(x, fx)

TypeError: 'tuple' object is not callable

Soweit ich das verstehe liegt der Fehler also in meiner Plotfunktion und daran, dass irgendwo wohl ein Komma fehlen muss .
Könnte mir bitte jemand sagen wo mein Fehler liegt?

Hier auch noch meine Plotfunktion, da es ja anscheinend hier hakt.

Code: Alles auswählen

def plotFunk(intervall, fkt=fkt_f, plotPoints=300, show=True):
    # Diskretisierung des Intervalls auf dem geplottet werden soll
    x = np.linspace(intervall[0], intervall[1], plotPoints)
    # Berechnung der Funktionswerte an diesen diskreten Punkten
    fx = fkt(x)
    
    plt.plot(x, fx)
    
    # Nullfunktion einzeichnen
    plt.plot([x[0], x[-1]], np.zeros(2))
    plt.title('Graph der Funktion auf ' + str(intervall))
    if intervall == [-2,2]:
        plt.xlabel('x')
        plt.ylabel('fx')
    else:
        plt.xlabel('x')
        plt.ylabel('gx')
    if show:
        plt.show()

plotFunk([-2, 2], fkt_f)
Vielen Dank für eure Hilfe!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das mit dem Komma ist mE ein roter Hering. Du willst doch eine Funktion aufrufen. Nur rufst du keine Funktion auf, sondern ein Tupel:

Code: Alles auswählen

t = (1, 2, 3, 4) # ein tupel
t() # versuch, ein Tupel aufzurufen
Die Frage ist also, was ist fkt *wirklich*.
Mimi_Mi
User
Beiträge: 2
Registriert: Donnerstag 28. Mai 2020, 09:11

Ah, ok.

fkt soll auf die Funktion fkt_f zugreifen (oder wahlweise auch auf andere Funktionen).
Vielleicht ist das auch zu kompliziert von mir gedacht und es geht eigentlich einfacher.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich sehe halt nicht, wo da was definiert ist. Darum kann man dem nicht auf die Schliche kommen.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei die Frage eigentlich nicht wirklich ist was `fkt` beziehungsweise `fkt_f` ist, denn das wissen wir: ganz offensichtlich ein Tupel. Die Frage ist warum Mimi_Mi denkt es wäre kein Tupel sondern eine Funktion. 🙂
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na das meine ich ja. Ich sehe nicht die Stelle, wo fkt_f erzeugt / an etwas gebunden wird.
Antworten