아래 코드를 실행하여 각 z 및 t에 대해 1 차원 배열을 만듭니다. 현재의 순간에, 나는 코드, intervalt 및 501.0 intervalz 동일, 모두를 실행할 때 그들은 각각 501Numpy linspace 예기치 않은 출력
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)
의 길이를 가질 수 있도록 해당하는 자신의 크기를 만들려고 노력하지만,하고 모두 Z의 길이를 검사 할 때 t, len (z) = 500 인 반면 len (t) = 501입니다. 위의 코드를 사용하여 특정 부분을 수정하여 len (z) = 501을 얻었습니다. I 코드
zmax = int(zmax)
후 렌 (z) = (501)을 삽입하지만 기록 정확하게 이유 초기 코드 궁금 예를 들어, 길이 (501)와 어레이 (Z)을 산출하지 않는다?
(I 파이썬 2.7을 사용하고 있습니다.)이 산술 부정확성을 떠 관련
나는 501와 동일하지 않은 출력을 설명하는 intervalz = 500.99999999999994 수 (
Ngridt
및Ngridz
가 501으로 초기화되는 것을 알). 어쩌면 다음을 사용하십시오 : intervalz = np.ceil (zmax/dz + 1) –길이를 같게하려면 길이를 두 번 계산하는 이유는 무엇입니까? 당신은 단지 하나의 "간격"을 계산할 수 있으며 둘 다 사용할 수 있습니다. 왜 간격과 간격을 계산해야합니까? –
이런 종류의 것들에서 Nikolas가 언급 한 부동 소수점 문제를 피하기 위해 항상 '1E-10'을 제한에 추가하는 것이 유용합니다. – zephyr