求解ODEs算法的有限差分法

时间:2019-04-06 20:54:03

标签: algorithm numerical-methods ode scientific-computing

我正在尝试为有限差分法设计一种算法,但我有些困惑。所讨论的ODE为y''-5y'+ 10y = 10x,其中y(0)= 0和y(1)= 100。因此,我需要一种方法来以某种方式获得将与关系相乘的“ y_i”的系数:

enter image description here

,然后将所得系数存储到一个矩阵中,该矩阵将成为我将通过高斯-乔丹求解的系统的矩阵。问题归结为如何获得这些系数并将其移至矩阵。我考虑过手动计算系数,然后只输入矩阵,但是我需要针对大小为0.1、0.001和0.001的步长执行此操作,因此在这里这实际上不是可行的选择。

1 个答案:

答案 0 :(得分:2)

让我们假设ODE的一般情况

c1 * y''(x) + c2 * y'(x) + c3 * y(x) + c4 * x = 0

具有边界条件

y(0) = lo
y(1) = hi

您想用步长x ∈ [0, 1](其中h = 1 / n是样本数)来解决n + 1的问题。我们要解决yi = y(h * i)yi的范围是i ∈ [0, n]。为此,我们要求解线性系统

A y = b

每个内部yi都会施加一个线性约束。因此,我们在n - 1A列中有n - 1行,它们对应于未知的yi

要设置Ab,我们只需在未知的yi(我假设从零开始的索引)上滑动一个窗口即可。

A = 0  //the zero matrix
b = 0  //the zero vector
for i from 1 to n - 1
    //we are going to create the constraint for yi and store it in row i-1

    //coefficient for yi+1
    coeff = c1 / h^2 + c2 / h
    if i + 1 < n
        A(i - 1, i) = coeff
    else
        b(i - 1) -= coeff * hi  //we already know yi+1

    //coefficient for yi
    coeff = -2 * c1 / h^2 - c2 / h + c3
    A(i - 1, i - 1) = coeff

    //coefficient for yi-1
    coeff = c1 / h^2
    if i - 1 > 0
        A(i - 1, i - 2) = coeff
    else
        b(i - 1) -= coeff * lo  //we already know yi-1

    //coefficient for x
    b(i - 1) -= c4 * i * h
 next