matlab - Matlab - 如何实现反向欧拉方法?
问题描述
我正在尝试实现这些公式:
正向欧拉法:
这是我尝试过的:
x_new = (speye(nv)+ dt * lambda * L) * x_old;
这有什么问题吗?如何使用稀疏运算来计算?
后向欧拉法:
我试过这个:
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]
解决方案
我在这里看不到域,但反向欧拉法是一个基本的常微分方程求解器。
x_new
当站在等式两边时,有两种方法可以解决这种情况。
1.定点迭代
您使用x_new_temp
并设置x_new_temp
为x_old
第一次迭代,并使用 Forward Euler 公式进行几次迭代。x_new_temp
在迭代之后,可能会受到from 迭代i
和之间的一些差异的限制i-1
,您设置x_new
为x_new_temp
从上次迭代开始。
2.用适当的方法求解非线性方程,例如Newton-Raphson法
后向欧拉公式规定:
y_new = y_old + k*f(t,y_old)
我们可以将其转化为:
y_old + k*f(t,y_old) - y_new = 0
这是一个基本的非线性函数,可以用任何旨在解决此类问题的数值方法来解决。
在涉及矩阵的情况下,我将使用定点迭代。
推荐阅读
- post - 如何通过发布请求发送大量参数
- python - 使用 pandas 提取嵌套 json 的标题
- git - Git 功能分支从开发问题合并到暂存
- single-sign-on - 作为 SSO 解决方案的 CAS 与 Okta 与 Keycloak 的比较
- python - python raspberry pi桌面应用程序中框架/面板内的视频播放器
- xamarin - 有没有办法使用渲染器更改 Xamarin 中 iOS 开关的轮廓颜色?
- python - 预测逻辑回归时出错
- mongodb - $dateFromString 无法识别的参数:onError MongoDB 3.6
- python - 解析txt文件以查找单词出现python
- python - Python GTK 更新标签