2017-03-17 3 views
1

NumpyでPythonを使用して、有限差分法を使って基本方程式を解くことを試みています。コードは、私に正しい最初の値を与えます。つまり、私に[1]を与えます。しかし、その後の他の値はゼロにすぎませんか? 私は間違って何をしているのか分かりません。なぜなら、明らかに最初の値で動作するからです。どうすればこの問題を解決できますか? どんなアイデアも非常に役に立ちます。Pythonで有限差分を使用する

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

関連する問題