函数daspk
可以用于解决形式的DAE
0=f(x点,x,t),x(t=0)=x_0,x点(t=0
这里的x点是的导数x.使用Petzold的DAE解算器求解该方程DASPK.
[x, xdot, istate, msg] =
daspk (fcn, x_0, xdot_0, t, t_crit)
¶求解一组微分代数方程。
daspk
求解方程组
0=f(x,xdot,t)
具有
x(t0)=x_0,xdot(t_0)=xdot_0
解决方案在矩阵中返回x和xdot,结果矩阵中的每一行对应于向量中的一个元素t。的第一个元素t应该是t_0并对应于系统的初始状态x_0及其导数xdot_0,以便输出的第一行x是x_0和输出的第一行xdot是xdot_0.
第一个参数,fcn,是一个字符串、内联或函数句柄,用于命名函数f调用以计算方程组的残差向量。它必须具有形式
resfx, xdot, t)
这里的x, xdot和res是向量,以及t是向量。
如果fcn是字符串、内联函数或函数句柄的两元素字符串数组或两元素元胞数组,第一个元素命名函数f并且第二元素名称是用于计算修改的雅可比矩阵的函数
df-dfjac=--+c------dx-dxdot
修改的雅可比函数必须具有以下形式
jacjx, xdot, t, c)
的第二个和第三个参数daspk
指定状态及其导数的初始条件,第四个参数指定所需解的输出时间向量,包括与初始条件对应的时间。
初始状态和导数的集合并不严格要求是一致的。如果它们不一致,则必须使用daspk_options
提供附加信息的函数daspk
可以计算一致的起点。
第五个参数是可选的,可用于指定DAE解算器不应集成的一组时间。这对于解决奇点和导数中存在不连续性的点的困难是有用的。
成功计算后,的值istate将大于零(与的Fortran版本一致DASPK).
如果计算不成功,则的值istate将小于零并且消息将包含其他信息。
您可以使用该函数daspk_options
为设置参数参数daspk
.
详见: dassl.
()
¶val =
daspk_options (opt)
¶(opt, val)
¶查询或设置函数的参数daspk
.
当在没有参数的情况下调用时,将显示所有可用参数的名称及其当前值。
给定一个参数,返回参数的值opt.
当用两个自变量调用时,daspk_options
设置参数opt到值val.
参数包括
绝对tolerance
绝对公差。可以是向量,也可以是标量。如果是一个向量,它必须与状态向量的维度匹配,并且相对关系也必须是相同长度的向量。
相对tolerance
相对公差。可以是向量,也可以是标量。如果是一个向量,它必须与状态向量的维度匹配,并且绝对公差也必须是相同长度的向量。
在每个集成步骤中应用的局部错误测试是
abs(x(i)中的局部误差)<=rtol(i)*abs(Y(i))+atol(i)
计算一致的初始条件
用'表示状态向量中的微分变量Y_d和代数变量从Y_a’, ddaspk
可以解决以下两个初始化问题之一:
在任何一种情况下,都会输入给定组件的初始值,并且还必须提供对未知组件的初始猜测。将此参数设置为1可解决第一个问题,或设置为2可解决第二个问题(默认值为0,所以必须提供一组一致的初始条件)。
如果此参数设置为非零值,则还必须设置代数变量
参数来语句问题中的哪些变量是代数变量。
使用初始条件启发法
设置为非零值以使用下面描述的初始条件启发参数。
初始条件启发法
以下参数的向量,可用于控制初始条件的计算。
MXNIT
牛顿迭代的最大次数(默认值为5)。
MXNJ
Jacobian求值的最大数目(默认值为6)。
MXNH
如果计算一致的初始条件
参数已设置为1(默认值为5)。
请注意,允许的最大牛顿迭代总数为MXNIT*MXNJ*MXNH
如果计算一致初始条件
参数已设置为1,并且MXNIT*MXNJ
如果它设置为2。
LSOFF
设置为非零值可禁用行搜索算法(默认值为0)。
STPTOL
行搜索算法中的最小缩放步长(默认值为eps^(2/3))。
EPINIT
牛顿迭代收敛性检验中的摆动因子。该测试适用于残差向量,预乘近似雅可比。为了收敛,该向量的加权RMS范数(按误差权重缩放)必须小于EPINIT*EPCON
这里的EPCON
=0.33是时间步骤中使用的类似测试常数。默认为EPINIT
= 0.01.
打印初始条件信息
将此参数设置为非零值可显示有关初始条件计算的详细信息(默认值为0)。
从错误测试中排除代数变量
设置为非零值可从错误测试中排除代数变量。您还必须设置代数变量
参数表示问题中的哪些变量是代数变量(默认值为0)。
代数变量
与状态向量长度相同的向量。非零元素表示状态向量的对应元素是镇痛变量(即,其导数没有明确出现在方程集中)。
此参数是必需的计算一致的初始条件
和从错误测试中排除代数变量
参数。
强制执行不平等约束
设置为以下值之一以强制执行从不等式约束类型
参数(默认值为0)。
不等式约束类型
与指定相等约束类型的状态长度相同的向量。向量的每个元素都对应于状态的一个元素,并且应该被赋值以下代码之一
小于零。
小于或等于零。
不受约束。
大于或等于零。
大于零。
只有当强制执行不平等约束
参数为非零。
初始步长
微分代数问题在第一步可能偶尔会遇到严重的缩放困难。如果你对问题的规模了解很多,你可以通过指定初始步长(默认值是自动计算的)来帮助缓解这个问题。
最大顺序
限制求解方法的最大顺序。此参数必须介于1和5之间(包括1和5)(默认值为5)。
最大步长
设置最大步长将避免经过非常大的区域(未指定默认值)。
Octave还包括DASSL,的早期版本DASPK和DASRT,可用于解决具有约束(停止条件)的DAE。
[x, xdot, istate, msg] =
dassl (fcn, x_0, xdot_0, t, t_crit)
¶求解一组微分代数方程。
dassl
求解方程组
0=f(x,xdot,t)
具有
x(t0)=x_0,xdot(t_0)=xdot_0
解决方案在矩阵中返回x和xdot,结果矩阵中的每一行对应于向量中的一个元素t。的第一个元素t应该是t_0并对应于系统的初始状态x_0及其导数xdot_0,以便输出的第一行x是x_0和输出的第一行xdot是xdot_0.
第一个参数,fcn,是一个字符串、内联或函数句柄,用于命名函数f调用以计算方程组的残差向量。它必须具有形式
resfx, xdot, t)
这里的x, xdot和res是向量,以及t是向量。
如果fcn是字符串、内联函数或函数句柄的两元素字符串数组或两元素元胞数组,第一个元素命名函数f并且第二元素名称是用于计算修改的雅可比矩阵的函数
df-dfjac=--+c------dx-dxdot
修改的雅可比函数必须具有以下形式
jacjx, xdot, t, c)
的第二个和第三个参数dassl
指定状态及其导数的初始条件,第四个参数指定所需解的输出时间向量,包括与初始条件对应的时间。
初始状态和导数的集合并不严格要求是一致的。然而在实践中,DASSL不是很擅长为您确定一致集,所以最好确保初始值导致函数求值为零。
第五个参数是可选的,可用于指定DAE解算器不应集成的一组时间。这对于解决奇点和导数中存在不连续性的点的困难是有用的。
成功计算后,的值istate将大于零(与的Fortran版本一致DASSL).
如果计算不成功,则的值istate将小于零并且消息将包含其他信息。
您可以使用该函数数据库options
为设置参数参数dassl
.
()
¶val =
dassl_options (opt)
¶(opt, val)
¶查询或设置函数的参数dassl
.
当在没有参数的情况下调用时,将显示所有可用参数的名称及其当前值。
给定一个参数,返回参数的值opt.
当用两个自变量调用时,数据库options
设置参数opt到值val.
参数包括
绝对tolerance
绝对公差。可以是向量,也可以是标量。如果是一个向量,它必须与状态向量的维度匹配,并且相对关系也必须是相同长度的向量。
相对tolerance
相对公差。可以是向量,也可以是标量。如果是一个向量,它必须与状态向量的维度匹配,并且绝对公差也必须是相同长度的向量。
在每个集成步骤中应用的局部错误测试是
abs(x(i)中的局部误差)<=rtol(i)*abs(Y(i))+atol(i)
计算一致的初始条件
如果非零,dassl
将尝试计算一组一致的初始条件。这通常是不可靠的,因此最好提供一个一致的集合,并将此参数设置为零。
强制非负约束
如果您知道方程的解总是为负数,那么将此参数设置为非零值可能会有所帮助。然而,最好先将此参数设置为零,如果效果不佳,则仅将其设置为非零值。
初始步长
微分代数问题在第一步可能偶尔会遇到严重的缩放困难。如果你对问题的规模了解很多,你可以通过指定初始步长来帮助缓解这个问题。
最大顺序
限制求解方法的最大顺序。此参数必须介于1和5之间(包括1和5)。
最大步长
设置最大步长将避免经过非常大的区域(未指定默认值)。
步长限制
对正在编写的Fortran代码的单个调用尝试执行的最大集成步骤数。
[x, xdot, t_out, istat, msg] =
dasrt (fcn, g, x_0, xdot_0, t)
¶… =
dasrt (fcn, g, x_0, xdot_0, t, t_crit)
¶… =
dasrt (fcn, x_0, xdot_0, t)
¶… =
dasrt (fcn, x_0, xdot_0, t, t_crit)
¶求解一组微分代数方程。
dasrt
求解方程组
0=f(x,xdot,t)
具有
x(t0)=x_0,xdot(t_0)=xdot_0
具有函数停止标准(根求解)。
解决方案在矩阵中返回x和xdot,结果矩阵中的每一行对应于向量中的一个元素t_out。的第一个元素t应该是t_0并对应于系统的初始状态x_0及其导数xdot_0,以便输出的第一行x是x_0和输出的第一行xdot是xdot_0.
向量t提供了整合长度的上限。如果满足停止条件,则向量t_out将短于t,以及的最后一个元素t_out将是满足停止条件的点,并且可能不对应于向量的任何元素t.
第一个参数,fcn,是一个字符串、内联或函数句柄,用于命名函数f调用以计算方程组的残差向量。它必须具有形式
resfx, xdot, t)
这里的x, xdot和res是向量,以及t是向量。
如果fcn是字符串、内联函数或函数句柄的两元素字符串数组或两元素元胞数组,第一个元素命名函数f并且第二元素名称是用于计算修改的雅可比矩阵的函数
df-dfjac=--+c------dx-dxdot
修改的雅可比函数必须具有以下形式
jacjx, xdot, t, c)
可选的第二个参数命名一个函数,该函数定义了在集成过程中需要其根的约束函数。此函数必须具有以下形式
g_out=g(x, t)
并返回约束函数值的向量。如果任何约束函数的值改变符号,DASRT将尝试在符号更改处停止集成。
如果省略了约束函数的名称,dasrt
解决与相同的问题daspk
或dassl
.
注意,从于四舍五入的约束函数中的数值误差和积分误差,DASRT可以返回假根,或者以两个或多个几乎相等的值返回相同的根T。如果怀疑存在此类伪根,则用户在评估约束函数时应考虑更小的误差容限或更高的精度。
如果某个约束函数的根定义了问题的结束,则的输入DASRT尽管如此,应该允许集成稍微超过那个根点,这样DASRT可以通过插值定位根。
的第三和第四个参数dasrt
指定状态及其导数的初始条件,第四个参数指定所需解的输出时间向量,包括与初始条件对应的时间。
初始状态和导数的集合并不严格要求是一致的。然而在实践中,DASSL不是很擅长为您确定一致集,所以最好确保初始值导致函数求值为零。
第六个参数是可选的,可用于指定DAE解算器不应集成的一组时间。这对于解决奇点和导数中存在不连续性的点的困难是有用的。
成功计算后,的值istate将大于零(与的Fortran版本一致DASSL).
如果计算不成功,则的值istate将小于零并且消息将包含其他信息。
您可以使用该函数dasrt_options
为设置参数参数dasrt
.
详见: dasrt_options, daspk, dasrt, lsode.
()
¶val =
dasrt_options (opt)
¶(opt, val)
¶查询或设置函数的参数dasrt
.
当在没有参数的情况下调用时,将显示所有可用参数的名称及其当前值。
给定一个参数,返回参数的值opt.
当用两个自变量调用时,dasrt_options
设置参数opt到值val.
参数包括
绝对tolerance
绝对公差。可以是向量,也可以是标量。如果是一个向量,它必须与状态向量的维度匹配,并且相对关系也必须是相同长度的向量。
相对tolerance
相对公差。可以是向量,也可以是标量。如果是一个向量,它必须与状态向量的维度匹配,并且绝对公差也必须是相同长度的向量。
在每个集成步骤中应用的局部错误测试是
abs(x(i)中的局部误差)<=。。。rtol(i)*abs(Y(i))+atol(i)
初始步长
微分代数问题在第一步可能偶尔会遇到严重的缩放困难。如果你对问题的规模了解很多,你可以通过指定初始步长来帮助缓解这个问题。
最大顺序
限制求解方法的最大顺序。此参数必须介于1和5之间(包括1和5)。
最大步长
设置最大步长将避免经过非常大的区域。
步长限制
对正在编写的Fortran代码的单个调用尝试执行的最大集成步骤数。
参见K.E.Brenan等人。,微分代数方程初值问题的数值解法,北荷兰(1989),内政部:https://doi.org/10.1137/1.9781611971224,了解有关的实施的更多信息DASSL.
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号