2017-03-17 1 views
1

Numpy와 함께 파이썬을 사용하여 유한 차분 법을 사용하여 기본 방정식을 풀려고합니다. 이 코드는 나에게 올바른 첫 번째 값을 준다. 즉, 나에게 [1]을 준다; 그러나, 그 이후의 모든 다른 값은 단지 0입니까? 첫 번째 값에 대해 분명히 작동하기 때문에 내가 뭘 잘못하고 있는지 모르겠다. 어떻게 수정해야합니까? 아이디어가 도움이 될 것입니다.파이썬의 유한 차분 사용

from numpy import * 
import numpy as np 
import matplotlib.pyplot as plt 
import scipy as sp 
from scipy.integrate import odeint 

def solver(omega_m, dt): 
    #t_0, H_0, a_0, dt, n, T; always the same; omega's change 
    t_0 = 0.0004 
    a_0 = 0.001 
    H_0 = 1./13.7 

    T = 13.7 
    dt = float(dt) 
    n = int(round((T - t_0)/dt)) 
    x = zeros(n+1) 
    t = linspace(t_0, T, n+1) 

    x[0] = a_0 

    for i in range (0, n): 
     x[i+1] = x[i] + (H_0 * ((omega_m)**(1./2.)) * ((x[i])**(-1./2.)) * dt) 
     return x, t 

a, t = solver(omega_m =1, dt=0.001) 
print a, t 

답변

3

return 문이 for 루프 안에 있기 때문에 첫 번째 반복 이후 함수가 반환됩니다. 루프가 너무 일찍 종료되지 않도록 return 문을 지정해야합니다.

for i in range (0, n): 
    x[i+1] = x[i] + (H_0 * ((omega_m)**(1./2.)) * ((x[i])**(-1./2.)) * dt) 
return x, t 
+0

정말로 고맙게 생각합니다. 그러나 그것은 큰 도움이되었습니다. 지금 당장해야합니다. – rcss92

+0

@ rcss92 도와 주면 답변을 수락 할 수 있습니다 –

+0

지금 완료하십시오. 죄송합니다 어떻게 해야할지 몰랐다. – rcss92