Ich bin Johannes (68) aus Neuss am Rhein und habe erst vor etwa 1 Monat begonnen, mich mit Python zu beschäftigen. Ich muss generell sagen, dass mir die Sprache wegen ihrer Leichtigkeit und Klarheit im Aufbau sehr gefällt.
Ich bin Physiker und Mathematiker und somit interessieren mich numerische Berechnungen sehr. Konkret befasse ich mich mit dem Problem der Lösung einer partiellen Differentialgleichung zur Berechnung eines elektrostatischen Feldes mit Randbedingungen (Poisson Gleichung). Nun habe ich bereits 2015 einen Code zur Lösung dieser Gleichung erstellt und zwar in Visual Basic 2010 Express und war mit der Performance immer zufrieden. Und jetzt kam die große Enttäuschung: Das Python Programm ist bei einer identischen Eingabe um gut 50 mal langsamer und das finde ich zu viel! Ich habe mal den zeitkritischen Teil des Codes hier ausgedruckt:
Code: Alles auswählen
st=500
while count<200:
for i in range(1,st-2):
for j in range(1,st-2):
if check(i,j)==True:
feld1[i,j]=0.125*(feld[i,j+1]+feld[i-1,j+1]+feld[i-1,j]+
feld[i-1,j-1]+feld[i,j-1]+feld[i+1,j-1]+
feld[i+1,j]+feld[i+1,j+1])
else:
feld1[i,j]=feld[i,j]
count=count+1
feld[:,:]=feld1[:,:]
Code: Alles auswählen
For k = 1 To 200
Call iter() 'Aufruf der Relaxationsroutine
Next k
'=============================================================================
'Feldberechnung durch Relaxation ... Jeder Feldpunkt ist arithmetischer Mittelwert der Nachbarn
'=============================================================================
Sub iter()
For i = 1 To 499
For j = 1 To 499
If boundaries(i, j) = False Then
feldr(i, j) = 0.125 * (feld(i - 1, j) + feld(i, j + 1) + feld(i + 1, j) + feld(i, j - 1) +
feld(i - 1, j - 1) + feld(i + 1, j - 1) + feld(i + 1, j + 1) + feld(i - 1, j + 1)) 'Jeder Punkt ist Mittelwert der Nachbarpunkte da Laplace(U(x,y))=0
Else
feldr(i, j) = feld(i, j)
End If
Next
Next
Call neu_alt()
End Sub
Liebe Grüße an alle! Johannes