我正在尝试实现以下公式:
这是我尝试过的:
x_new = (speye(nv)+ dt * lambda * L) * x_old;
这有什么问题吗?如何使用 sparse 操作进行计算?
我已经尝试过了:
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]
答案 0 :(得分:1)
我在这里没有看到域,但是Backward Euler方法是基本的常微分方程求解器。
当x_new
站在方程的两边时,有两种方法可以解决这种情况。
您使用x_new_temp
,并在第一次迭代中将x_new_temp
设置为x_old
,并使用Forward Euler公式进行几次迭代。在迭代可能受到迭代x_new_temp
与i
的{{1}}之间的某些差异的限制之后,您将上一次迭代的i-1
设置为x_new
。
后向欧拉公式规定:
x_new_temp
我们可以将其转换为:
y_new = y_old + k*f(t,y_old)
这是一个基本的非线性函数,可以使用旨在解决此类问题的任何数值方法来求解。
在您的情况下,当涉及矩阵时,我会进行定点迭代。