Ich verwende den folgenden Code, um ein eindimensionales Array für jedes z und t zu erstellen. Im gegenwärtigen Augenblick, ich versuche, ihre Größe äquivalent zu machen, so dass sie jeweils eine Länge von 501. habenNumpy linspace unerwartete Ausgabe
import numpy as np
#constants & parameters
omega = 1.
eps = 1.
c = 3.*(10.**8.)
hbar = 1.
eta = 0.01
nn = 10.**7.
n = eta*nn
lambdaOH = c/(1612.*10.**(6.))
gamma = 1.282*(10.**(-11.))
Tsp = 1./gamma
TR = 604800.
L = (Tsp/TR)*(np.pi)/((3.*(lambdaOH**2.))*n)
#time
Ngridt = 500.
tmax = 1.
dt = tmax/Ngridt
intervalt = tmax/dt + 1
t = np.linspace(0.01,tmax,intervalt)
#z space
Ngridz = 500.
zmax = L
dz = zmax/Ngridz
intervalz = zmax/dz + 1
z = np.linspace(0.01,zmax,intervalz)
Wenn der Code ausgeführt wird, sowohl intervalt und IntervalZ gleich 501,0, aber bei der Überprüfung der Länge der beiden z und t, len (z) = 500 während len (t) = 501. Ich habe mit dem obigen Code herumgespielt, um len (z) = 501 zu ergeben, indem ich bestimmte Teile modifiziere. Zum Beispiel, wenn ich den Code
zmax = int(zmax)
dann len (z) = 501. Aber ich frage mich, warum den ursprünglichen Code einfügen, genau wie geschrieben, nicht nachgibt eine Array z mit der Länge 501?
(Ich verwende Python 2.7.)
I IntervalZ = 500,99999999999994 bekommen, was zu 501 nicht gleich ist und erklärt die Ausgabe. Vielleicht verwenden Sie: intervalz = np.ceil (zmax/dz + 1) –
Wenn Sie möchten, dass die Länge gleich ist, warum berechnen Sie dann die Länge zweimal? Sie können nur ein "Intervall" berechnen und es für beide verwenden? Warum sollten Intervallz und Intervallt berechnet werden? –
Ich habe in diesen Arten von Dingen gefunden, es ist immer nützlich, ein '1E-10' zu Ihren Grenzen hinzuzufügen, um die von Nikolas angemerkten Fließkomma-Probleme zu vermeiden. – zephyr