테스트 사이트 - 개발 중인 베타 버전입니다

파이썬 질문

노유래 3년 전 조회 4,611

파이썬으로 이송확산 방정식을 통한 수치해석에 대해 공부하고 있는 학생입니다.. 자꾸 코드를 실행하면 c와 rhs배열에 nan이 들어가는데 그 이유를 모르겠습니다..

 

#Library import import numpy as np import math import matplotlib.pyplot as plt

#Definitions and initializations of variable arrays m = 100 v = 1.0 dx = 1.0 dt = 0.02 nmax = 2250 # T / dt (T=45) x = np.zeros(shape = m+1) # 0~100 array  c = np.zeros(shape = m+1) rhs = np.zeros(shape = m+1) # => 행벡터 a1 = np.zeros(shape = m+1) b1 = np.zeros(shape = m+1) c1 = np.zeros(shape = m+1) d = 0.0 e = 0.0 f = 0.0 c0 = np.zeros(shape = m+1) ce = np.zeros(shape = m+1)

# Selection of scheme alpha = float(input('input alpha : ')) #키보드 입력 , cf) 강제 형변환  theta = float (input('input theta : ')) #0, 0.5, 1.0  (theta가 1일때 implicit method, 0일때 explicit method) pe = float(input('input pe : '))#0.1 , 1 scheme = float(input('input scheme :')) 

#Grid generation #% when i = 0, its distance is at (1*dx)m from origin for i in range (0, m+1):     x[i] = i*dx      #initial condition for i in range (0, m+1):     if i == 0:         c[i] = 1.0     else :         c[i] = 0.0

#Save the initial condition for i in range (0, m+1):     c0[i]=c[i]         #========================================== #Main Program #========================================== #Implicit method  #Time integral

for iter in range (1,nmax+1): #for 1문     if iter == round(iter/100)*100: #100번 iteration마다 찍고 싶을 때 사용         print('{0}'.format(iter))     for i in range (1,m): ## for 2문         a1[i] = (-v*alpha*theta/(2*dx))-v*(1-alpha)*theta/dx-v*theta/(pe*dx);         b1[i] = 1/dt + (v*theta*(1-alpha)/dx) + (2*v*theta/(pe*dx))         c1[i] = (v*alpha*theta/(2*dx))-(v*theta/(pe*dx))         #RHS Terms          d = (v*alpha*(1-theta)/(2*dx))+(v*(1-alpha)*(1-theta)/dx)+(v*(1-theta)/(pe*dx))         e = 1/dt - (v*(1-alpha)*(1-theta)/dx)-(2*v*(1-theta)/(pe*dx))         f = (-v*alpha*(1-theta)/(2*dx)) + (v*(1-theta)/(pe*dx))         rhs[i] = d*c[i-1]+e*c[i]+f*c[i+1] ##end of for 2문              rhs[1]=rhs[1]-a1[1]*c[0]     rhs[m-1]=rhs[m-1]-c1[m-1]*c[m]           #Thomas algorithm     for i in range(2,m): ##for 3문         r=a1[i]/b1[i-1]         b1[i]=b1[i]-r*c1[i-1]         rhs[i]=rhs[i]-r*rhs[i-1] ##end of for 3문           rhs[m-1]=rhs[m-1]/b1[m-1];     for i in range(m-2,0,-1): ##for 4문         rhs[i]=(rhs[i]-c1[i]*rhs[i+1]/b1[i])##end of for 4문     #end of Thomas algorithm          #renewal of concentration at the next time step     for i in range (1, m): ##for 5문         c[i]=rhs[i] ## end of for 5문     #renwal of boundary conditions      c[0] = 1.0 #continous source injection     c[m] = 0.0 #Neumann boundary condition     # end of for 1문      #Exact Solution for i in range (0, m+1):     d = v*dx/pe     y1 = (x[i]-v*dt*nmax)/(2*math.sqrt(d*dt*nmax))     y2 = (x[i]+v*dt*nmax)/(2*math.sqrt(d*dt*nmax))     ce[i]=c[0]/2*(math.erfc(y1)+math.exp(v*x[i]/d)*math.erfc(y2))

 

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

3년 전

https://code.sololearn.com/python 에서 테스트를 해보니 runtime 에러만 나오는데

 

정확하게 어떤 줄에서 어떤 에러가 나오는지를 알려줘 보세요.

 

그리고 어떤 값을 넣는지도..

 

런타임 에러라고 하면 로직에러일 경우가 많죠.  파이썬 에러가 아니라..

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인