CVODE用户手册解读

本文来自:cv_guide.pdf


2.1 IVP solution

IVP问题的形式:
在这里插入图片描述

The methods used in cvode are variable-order, variable-step multistep methods, based on formulas
of the form
在这里插入图片描述
CVODE使用的是变阶,变步长的多步迭代方法,最基本的形式是2.2
nonstiff 问题,使用Adms迭代方法
stiff问题,使用BDF方法。

2.2中,an一开始是等于-1,这个值很大,会导致误差很大。这也是为什么开始计算的时候,会迭代好多次的原因。

在这里插入图片描述
在这里插入图片描述

无论是Adms形式还是BDF形式,非线性系统通过多步的迭代,最后变成两种形式来近似解决:

  1. roodfinding形式:2.3
  2. fixed-point形式:2.4

CVODE默认是使用线性系统的牛顿迭代法来对线性系统进行迭代
在这里插入图片描述
CVODE中,求解非线性系统的线性方法分为两种类型:

  1. a direct family:g direct linear solvers for dense, banded, or sparse matrices
  2. spils family:scaled preconditioned iterative (Krylov) linear solvers

在这里插入图片描述
对于大规模的stiff问题(比如机器人问题),direct方法通常不能用,最好的选择是使用组合了BDF的带预测器的Krylov方法。

在这里插入图片描述
CVODE对于误差的控制,是基于当前的值和设置的atol,rtol计算的。根据2.7,W<=1,则表示误差比较小,可以接受,可以进行下次迭代。因此,atol,rtol越大,计算的速度就越快,但是精度就越低。
在这里插入图片描述
在这里插入图片描述
为避免矩阵计算的消耗问题,矩阵M(公式2.5中的)和预测矩阵P,会尽量少地更新。只在有需要的时候更新。

error test 是检测误差是否过大的测试,需要在当前步更改步长再次计算。
在这里插入图片描述
迭代的时候,CVODE会对迭代过程中的误差进行控制,要求本次迭代的结果和开始点的数值
的误差保持在一定范围内。这个范围用户也可以设置。
(那是不是说,如果我不要求太高的精度,而要求高速计算,是不是可以放大范围,从而减少迭代的次数?)
在这里插入图片描述
误差检测不通过,会导致在当前步进行步长更改后再次迭代。这个过程重复几次后,误差测试还是不通过,就会停止计算了。这种情况很容易出现在ATOL,RTOL很小,或者min step 比较大的时候,报的错误类似:

At t= 0.44 and h = 0.002,the error test failed repeatedly or with |h| = hmin

在这里插入图片描述
在这里插入图片描述
用户可以提供雅可比,如果没有,CVODE会根据一定的规则自定构建一个近似的雅可比。

在这里插入图片描述
CVODE对迭代过程的误差有控制,会要求||LTE|<=1(LTE:local test error的缩写?)
error test失败,会导致在当前点,进行补偿的变小后再次计算。多次失败之后,就会报错。


2.2 Preconditioning
在这里插入图片描述
非线性系统的线性求解法,如果没有预测器,一般很难求解。
而预测器都是跟待求解的问题高度相关的,比较难在快速收敛和计算成本两个点上同时表现优秀。

预测器分为左式,右式和左右式。
在这里插入图片描述
一般建议使用只使用左式预测,或只使用右式预测,不要两个一起用。
在这里插入图片描述
在这里插入图片描述

CVODE典型的预测器是基于对雅可比的近似估计。
我们发现,同样的Newton-Krylov iteration,如果使用了预测器,即使预测器十分粗糙,效果也远远比没有用好得多。


2.3 BDF stability limit detection

在这里插入图片描述

2.4 Rootfinding


3.2 CVODE organization
在这里插入图片描述
Additionally, cvode includes the diagonal linear solver interface, cvdiag, that creates an internally
generated diagonal approximation to the Jacobian.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值