24.2微分代数方程

函数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

解决方案在矩阵中返回xxdot,结果矩阵中的每一行对应于向量中的一个元素t。的第一个元素t应该是t_0并对应于系统的初始状态x_0及其导数xdot_0,以便输出的第一行xx_0和输出的第一行xdotxdot_0.

第一个参数,fcn,是一个字符串、内联或函数句柄,用于命名函数f调用以计算方程组的残差向量。它必须具有形式

resfx, xdot, t)

这里的x, xdotres是向量,以及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.

 
: daspk_options ()
: val = daspk_options (opt)
: daspk_options (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. 给定Y_d,计算Y_a和Y’_d
  2. 给定Y',计算Y。

在任何一种情况下,都会输入给定组件的初始值,并且还必须提供对未知组件的初始猜测。将此参数设置为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. 仅在初始条件计算中进行约束检查。
  2. 在集成过程中强制执行约束检查。
  3. 执行参数1和参数2。
不等式约束类型

与指定相等约束类型的状态长度相同的向量。向量的每个元素都对应于状态的一个元素,并且应该被赋值以下代码之一

-2

小于零。

-1

小于或等于零。

0

不受约束。

1

大于或等于零。

2

大于零。

只有当强制执行不平等约束参数为非零。

初始步长

微分代数问题在第一步可能偶尔会遇到严重的缩放困难。如果你对问题的规模了解很多,你可以通过指定初始步长(默认值是自动计算的)来帮助缓解这个问题。

最大顺序

限制求解方法的最大顺序。此参数必须介于1和5之间(包括1和5)(默认值为5)。

最大步长

设置最大步长将避免经过非常大的区域(未指定默认值)。

Octave还包括DASSL,的早期版本DASPKDASRT,可用于解决具有约束(停止条件)的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

解决方案在矩阵中返回xxdot,结果矩阵中的每一行对应于向量中的一个元素t。的第一个元素t应该是t_0并对应于系统的初始状态x_0及其导数xdot_0,以便输出的第一行xx_0和输出的第一行xdotxdot_0.

第一个参数,fcn,是一个字符串、内联或函数句柄,用于命名函数f调用以计算方程组的残差向量。它必须具有形式

resfx, xdot, t)

这里的x, xdotres是向量,以及t是向量。

如果fcn是字符串、内联函数或函数句柄的两元素字符串数组或两元素元胞数组,第一个元素命名函数f并且第二元素名称是用于计算修改的雅可比矩阵的函数

df-dfjac=--+c------dx-dxdot

修改的雅可比函数必须具有以下形式


jacjx, xdot, t, c)

的第二个和第三个参数dassl指定状态及其导数的初始条件,第四个参数指定所需解的输出时间向量,包括与初始条件对应的时间。

初始状态和导数的集合并不严格要求是一致的。然而在实践中,DASSL不是很擅长为您确定一致集,所以最好确保初始值导致函数求值为零。

第五个参数是可选的,可用于指定DAE解算器不应集成的一组时间。这对于解决奇点和导数中存在不连续性的点的困难是有用的。

成功计算后,的值istate将大于零(与的Fortran版本一致DASSL).

如果计算不成功,则的值istate将小于零并且消息将包含其他信息。

您可以使用该函数数据库options为设置参数参数dassl.

详见: daspk, dasrt, lsode.

 
: dassl_options ()
: val = dassl_options (opt)
: dassl_options (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

具有函数停止标准(根求解)。

解决方案在矩阵中返回xxdot,结果矩阵中的每一行对应于向量中的一个元素t_out。的第一个元素t应该是t_0并对应于系统的初始状态x_0及其导数xdot_0,以便输出的第一行xx_0和输出的第一行xdotxdot_0.

向量t提供了整合长度的上限。如果满足停止条件,则向量t_out将短于t,以及的最后一个元素t_out将是满足停止条件的点,并且可能不对应于向量的任何元素t.

第一个参数,fcn,是一个字符串、内联或函数句柄,用于命名函数f调用以计算方程组的残差向量。它必须具有形式

resfx, xdot, t)

这里的x, xdotres是向量,以及t是向量。

如果fcn是字符串、内联函数或函数句柄的两元素字符串数组或两元素元胞数组,第一个元素命名函数f并且第二元素名称是用于计算修改的雅可比矩阵的函数

df-dfjac=--+c------dx-dxdot

修改的雅可比函数必须具有以下形式


jacjx, xdot, t, c)

可选的第二个参数命名一个函数,该函数定义了在集成过程中需要其根的约束函数。此函数必须具有以下形式

g_out=g(x, t)

并返回约束函数值的向量。如果任何约束函数的值改变符号,DASRT将尝试在符号更改处停止集成。

如果省略了约束函数的名称,dasrt解决与相同的问题daspkdassl.

注意,从于四舍五入的约束函数中的数值误差和积分误差,DASRT可以返回假根,或者以两个或多个几乎相等的值返回相同的根T。如果怀疑存在此类伪根,则用户在评估约束函数时应考虑更小的误差容限或更高的精度。

如果某个约束函数的根定义了问题的结束,则的输入DASRT尽管如此,应该允许集成稍微超过那个根点,这样DASRT可以通过插值定位根。

的第三和第四个参数dasrt指定状态及其导数的初始条件,第四个参数指定所需解的输出时间向量,包括与初始条件对应的时间。

初始状态和导数的集合并不严格要求是一致的。然而在实践中,DASSL不是很擅长为您确定一致集,所以最好确保初始值导致函数求值为零。

第六个参数是可选的,可用于指定DAE解算器不应集成的一组时间。这对于解决奇点和导数中存在不连续性的点的困难是有用的。

成功计算后,的值istate将大于零(与的Fortran版本一致DASSL).

如果计算不成功,则的值istate将小于零并且消息将包含其他信息。

您可以使用该函数dasrt_options为设置参数参数dasrt.

详见: dasrt_options, daspk, dasrt, lsode.

 
: dasrt_options ()
: val = dasrt_options (opt)
: dasrt_options (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号