Fehler: 'float' 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
gtuk
User
Beiträge: 4
Registriert: Donnerstag 15. Juli 2010, 20:58

Hallo
Keine Ahnung, ob das hier rein passt, aber ich hab sonst nichts gefunden. Folgendes Problem:
Beim numerischen Berechnen eines Temperaturfeldes steig ich einfach nicht hinter folgende Fehlermeldung (bzw. versteh nicht, was genau da nicht aufgerufen werden kann):

Traceback (most recent call last):
File "C:\Users\Ralfons\Desktop\Uni\6. Semester\Numerische Methoden der Thermofluiddynamik\1. Beleg\Beleg1.py", line 62, in <module>
temp5[m][n]=temp5[m][n]+400/math.pi*(1/(0.5*(math.e**z-math.e**(-z))*(2*i+1)))*math.sin(z*n/x)*0.5(math.e**(z*(1-m/y))-math.e**(-z*(1-m/y)))
TypeError: 'float' object is not callable

folgender quelltext:

import math
.
.
.
.
for m in range(y):
for n in range(x):
zeile.append(0.0)
n=n+1
temp5.append(zeile)
m=m+1
zeile=[]

for m in range (y):
for n in range (x):
while i<10:
z=(2*i+1)*math.pi
temp5[m][n]=temp5[m][n]+400/math.pi*(1/(0.5*(math.e**z-math.e**(-z))*(2*i+1)))*math.sin(z*n/x)*0.5(math.e**(z*(1-m/y))-math.e**(-z*(1-m/y)))
i=i+1
i=0

das der programmierstil ziemlich beschissen ist, bestreite ich in keinster weise. aber wieso hier das (mir nicht bekannte) float-object nicht aufgerufen werden kann, kann ich gerade nicht ganz verstehen. kenn mich allgemein mit der materie nicht sooo gut aus.
danke schonmal für die hilfe.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

1. Es gibt Code-Tags, ohne ist Python-Quelltext nicht zu entziffern, significant whitespace etc.
2. Der Fehler tritt dann auf, wenn man ein solches Konstrukt hat

Code: Alles auswählen

In [1]: 2.0("test")
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/home/cofi/<ipython console> in <module>()

TypeError: 'float' object is not callable
Mehr kann ich aus dem Schnippsel nicht rausziehn, ohne dabei irre zu werden.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Code: Alles auswählen

0.5(math.e**(z*(1-m/y))
Es spricht übrigens nichts dagegen, längere Berechnungen in mehrere kleinere zu unterteilen ;-)
Das Leben ist wie ein Tennisball.
gtuk
User
Beiträge: 4
Registriert: Donnerstag 15. Juli 2010, 20:58

EyDu hat geschrieben:

Code: Alles auswählen

0.5(math.e**(z*(1-m/y))
Es spricht übrigens nichts dagegen, längere Berechnungen in mehrere kleinere zu unterteilen ;-)
danke für das zitat. war einfach nur n syntaxfehler, habe nach dem 0,5 das * vergessen. und dabei habe ich die formel extra nochmal genau daraufhin durchgesehn..
das entstandene temperaturfeld ist zwar kompletter unfug, aber wenigstens liegts nicht mehr am syntax.
danke für die mühen
BlackJack

@gtuk: <pedantic>Das war kein Syntaxfehler sondern ein Laufzeitfehler. Syntaktisch war dagegen nichts einzuwenden.</pedantic>
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Kann man irgendwie float.__call__ setzen?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
BlackJack

@jbs: Klar, der Quelltext von Python ist doch verfügbar. ;-)
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

jbs hat geschrieben:Kann man irgendwie float.__call__ setzen?
Man kann mit ctypes auf die CPython API zugreifen, damit liesse sich das vielleicht machen.
anika_20
User
Beiträge: 23
Registriert: Donnerstag 5. Juni 2014, 09:21

Hallo,
ich habe ein ähnliches Problem und zwar:

Programm "gaussSeidel":

Code: Alles auswählen

import numpy as np
import math

def gaussSeidel(iterEqs,x,tol=1.0e-9):
    omega = 1.0
    k = 10
    p = 1
    for i in range(1, 501):
        xOld= x.copy()
        x = iterEqs(x,omega)
        dx=math.sqrt(np.dot(x-xOld,x-xOld))
        if dx < tol:return x,i,omega
        if i == k: dx1 = dx
        if i == k + p:
            dx2 = dx
            omega = 2.0/(1.0 + math.sqrt(1.0 \
                    -(dx2/dx1)**(1.0/p)))
    print 'Gauss-Seidel failed to converge'
Programm "gmres":

Code: Alles auswählen

import numpy as np
from gaussSeidel import*

def iterEqs(x,omega):
    n=len(x)
    x[0]=omega*(x[1]-x[n-1])/2.0+(1.0-omega)*x[0]
    for i in range(1,n-1):
        x[i]=omega*(x[i-1] + x[i+1])/2.0+(1.0-omega)*x[i]
    x[n-1]=omega*(1.0-x[0] + x[n-2])/2.0\
    (1.0-omega)*x[n-1]
    return x

n = eval(raw_input ("Number of equations ==>  "))
x = np.zeros(n)
x,numInter, omega = gaussSeidel(iterEqs,x)
print("\nNumber of Iterations = ",numIter)
print("\nRelaxation factor=",omega)
print("\nThe solution is:\n",x)
input("\nPress return to exit" )

Es kommt folgende Fehlermeldung:

Code: Alles auswählen

  File "F:/uebung/gmres.py", line 21, in <module>
    x,numInter, omega = gaussSeidel(iterEqs,x)
  File "gaussSeidel.py", line 19, in gaussSeidel
    x = iterEqs(x,omega)
  File "F:/uebung/gmres.py", line 16, in iterEqs
    (1.0-omega)*x[n-1]
TypeError: 'float' object is not callable
Zuletzt geändert von Anonymous am Donnerstag 5. Juni 2014, 13:34, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Es ist exakt der selbe Fehler wie oben. Du versuchst ein float-Objekt aufzurufen. Schau dir die Zeile der Fehlermeldung, und die über der Meldung, mal genauer an. Auch gilt weiterhin der bereits oben genannte Hinweis: Das Forum unterstützt Code-Tags, dann ist dein Beitrag auch vernünftig und korrekt lesbar.
Das Leben ist wie ein Tennisball.
Antworten