【问题标题】:Using finite difference in python在python中使用有限差分
【发布时间】:2017-08-09 15:14:01
【问题描述】:

我正在尝试使用 Python 和 Numpy 来使用有限差分法求解基本方程。该代码为我提供了 a 的正确第一个值,即它给了我 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

【问题讨论】:

    标签: python numpy physics numerical-integration


    【解决方案1】:

    您的函数在第一次迭代后返回,因为您的 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
    

    【讨论】:

    • 非常感谢,我自己真的应该注意到了!但这是一个很大的帮助,现在可以正常工作了。
    • 现在完成。抱歉不知道该怎么做。
    猜你喜欢
    • 1970-01-01
    • 2013-09-30
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2021-12-18
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多