Seite 1 von 1

Fehler: 'float' object is not callable

Verfasst: Donnerstag 15. Juli 2010, 21:06
von gtuk
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.

Re: Fehler: 'float' object is not callable

Verfasst: Donnerstag 15. Juli 2010, 21:12
von cofi
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.

Re: Fehler: 'float' object is not callable

Verfasst: Donnerstag 15. Juli 2010, 21:27
von EyDu

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 ;-)

Re: Fehler: 'float' object is not callable

Verfasst: Donnerstag 15. Juli 2010, 22:33
von gtuk
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

Re: Fehler: 'float' object is not callable

Verfasst: Donnerstag 15. Juli 2010, 23:57
von BlackJack
@gtuk: <pedantic>Das war kein Syntaxfehler sondern ein Laufzeitfehler. Syntaktisch war dagegen nichts einzuwenden.</pedantic>

Re: Fehler: 'float' object is not callable

Verfasst: Freitag 16. Juli 2010, 01:57
von jbs
Kann man irgendwie float.__call__ setzen?

Re: Fehler: 'float' object is not callable

Verfasst: Freitag 16. Juli 2010, 06:02
von BlackJack
@jbs: Klar, der Quelltext von Python ist doch verfügbar. ;-)

Re: Fehler: 'float' object is not callable

Verfasst: Freitag 16. Juli 2010, 10:46
von DasIch
jbs hat geschrieben:Kann man irgendwie float.__call__ setzen?
Man kann mit ctypes auf die CPython API zugreifen, damit liesse sich das vielleicht machen.

Re: Fehler: 'float' object is not callable

Verfasst: Donnerstag 5. Juni 2014, 13:04
von anika_20
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

Re: Fehler: 'float' object is not callable

Verfasst: Donnerstag 5. Juni 2014, 13:11
von EyDu
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.