Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用有限差分_Python_Numpy_Physics_Numerical Integration - Fatal编程技术网

在python中使用有限差分

在python中使用有限差分,python,numpy,physics,numerical-integration,Python,Numpy,Physics,Numerical Integration,我正在尝试使用Python和Numpy来使用有限差分法求解一个基本方程。代码给了我a的正确第一个值,即它给了我[1];但是,之后的其他值都是零? 我不知道我做错了什么,因为它显然适用于第一个值,那么我如何修复它? 任何想法都会很有帮助 from numpy import * import numpy as np import matplotlib.pyplot as plt import scipy as sp from scipy.integrate import odeint def so

我正在尝试使用Python和Numpy来使用有限差分法求解一个基本方程。代码给了我a的正确第一个值,即它给了我[1];但是,之后的其他值都是零? 我不知道我做错了什么,因为它显然适用于第一个值,那么我如何修复它? 任何想法都会很有帮助

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

函数在第一次迭代后返回,因为返回语句位于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

函数在第一次迭代后返回,因为返回语句位于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

非常感谢,真的应该注意到我自己!但这是一个很大的帮助,现在就应该开始工作,现在就完成。对不起,我不知道怎么做。非常感谢,我真的应该注意到这一点!但这是一个很大的帮助,现在就应该开始工作,现在就完成。对不起,我不知道怎么做。