我想解平流方程()
使用二阶龙格库塔,如时间积分的中点规则和空间推导的逆风(向后有限差分)。
这是 python 中的一般 Runge-Kutta 实现
def rk2a( f, x0, t ):
n = len( t )
x = np.array( [ x0 ] * n )
for i in range( n - 1 ):
h = t[i+1] - t[i]
k1 = h * f( x[i], t[i] ) / 2.0
x[i+1] = x[i] + h * f( x[i] + k1, t[i] + h / 2.0 )
return x
这是有道理的,如果我必须解决类似的问题我会知道如何通过但我很困惑,因为现在我们有了.
由于我想对空间导数使用迎风方案,我们有
然而表示-th 时间步长和表示-th 网格点。
现在要实现这一点,我必须写下来f( x[i], t[i] )
并f( x[i] + k1, t[i] + h / 2.0 )
回复。提供一个通用的f
。
现在虽然我认为我可以写下来f( x[i], t[i] )
,但我不知道我会如何写下来f( x[i] + k1, t[i] + h / 2.0 )
。
所以问题是:如何在中点规则中使用迎风方案?
编辑:我假设等距网格。