Matlab-如何实现反向欧拉方法?

时间:2019-11-24 05:06:22

标签: matlab iteration sparse-matrix

我正在尝试实现以下公式:

正向欧拉方法:

enter image description here

这是我尝试过的:

x_new = (speye(nv)+ dt * lambda * L) * x_old;

这有什么问题吗?如何使用 sparse 操作进行计算?

后向欧拉法:

enter image description here

我已经尝试过了:

x_new = (speye(nv)- dt * lambda * L) \ x_old;

如何实现基于新的x计算现有x的后退部分?可以使用除法吗?


L是这样的稀疏矩阵:

full(L) =

   -1.0000    0.2500    0.2500    0.2500    0.2500
    0.3333   -1.0000    0.3333         0    0.3333
    0.3333    0.3333   -1.0000    0.3333         0
    0.3333         0    0.3333   -1.0000    0.3333
    0.3333    0.3333         0    0.3333   -1.0000

对于其他变量,我们也有类似这样的内容:

nv = 5;
dt = 0.01;
lambda = 0.5;

x_old =   [-4 0 5;
            1 -5 5;
            1 0 1;
            1 5 5;
            1 0 0]

1 个答案:

答案 0 :(得分:1)

我在这里没有看到域,但是Backward Euler方法是基本的常微分方程求解器。

x_new站在方程的两边时,有两种方法可以解决这种情况。

1。 Fixed point iteration

您使用x_new_temp,并在第一次迭代中将x_new_temp设置为x_old,并使用Forward Euler公式进行几次迭代。在迭代可能受到迭代x_new_tempi的{​​{1}}之间的某些差异的限制之后,您将上一次迭代的i-1设置为x_new

2。用适当的方法求解非线性方程,例如Newton-Raphson method

后向欧拉公式规定:

x_new_temp

我们可以将其转换为:

y_new = y_old + k*f(t,y_old)

这是一个基本的非线性函数,可以使用旨在解决此类问题的任何数值方法来求解。

在您的情况下,当涉及矩阵时,我会进行定点迭代。