Main Content

bvpset

创建或更改边界值问题的 options 结构体

语法

options = bvpset('name1',value1,'name2',value2,...)
options = bvpset(oldopts,'name1',value1,...)
options = bvpset(oldopts,newopts)
bvpset

说明

options = bvpset('name1',value1,'name2',value2,...) 创建可提供给边界值问题求解器 bvp4c 的结构体 options,在该结构体中,给定属性具有指定值。任何未指定的属性都会保留其默认值。对于所有属性,仅键入唯一标识属性的前导字符即可。bvpset 忽略属性名称的大小写。

options = bvpset(oldopts,'name1',value1,...) 更改现有 options 结构体 oldopts。这会覆盖 oldopts 中使用名称/值对指定的所有值,并返回修改后的结构体作为输出参数。

options = bvpset(oldopts,newopts) 合并现有 options 结构体 oldopts 和新 options 结构体 newoptsnewopts 中设置的任何值将覆盖 oldopts 中的对应值。

bvpset(不带输入参数)显示所有属性名称及其可能的值,并使用花括号 {} 指示默认值。

使用函数 bvpget 可以在 options 结构体中查询特定属性的值。

BVP 属性

bvpset 用于为边界值问题求解器 bvp4c 指定属性。可以设置多种类别的属性:

误差容限属性

由于 bvp4c 使用配置公式,因此数值解基于满足配置公式的网格点。网格选择和误差控制均基于此解的残差,因此计算的解 S(x) 是扰动问题 S′(x) = f(x,S(x)) + res(x) 的精确解。在网格的每个子区间上,会估计解的第 i 个分量中的残差范数 res(i),该范数应小于或等于容差。此容差由用户定义的相对误差 RelTol 和绝对误差 AbsTol 共同决定。

(res(i)/max(abs(f(i)),AbsTol(i)/RelTol))RelTol

下表介绍了误差容限属性。

BVP 误差容限属性

属性

描述

RelTol

正标量 {1e-3}

适用于残差向量的所有分量的相对误差容限。它是相对于 f(x,y) 的大小的残差测度。默认值 1e-3 与精度 0.1% 相对应。

计算的解 S(x) 是 S′(x) = F(x,S(x)) + res(x) 的精确解。在网格的每个子区间上,残差 res(x) 满足

(res(i)/max(abs(F(i)),AbsTol(i)/RelTol))RelTol

AbsTol

正标量或向量 {1e-6}

应用于残差向量的对应分量的绝对误差容限。AbsTol(i) 是一个阈值,低于此阈值的对应分量的值将不重要。如果指定标量值,该标量值应用于所有分量。

向量化

下表介绍了 BVP 向量化属性。bvp4c 使用的 ODE 函数的向量化不同于 ODE 求解器使用的向量化:

  • 对于 bvp4c,必须针对第一个参数和第二个参数将 ODE 函数向量化,以使 F([x1 x2 ...],[y1 y2 ...]) 返回 [F(x1,y1) F(x2,y2)...]

  • 即使提供了解析雅可比矩阵,bvp4c 也会受益于向量化处理。对于刚性 ODE 求解器,当使用解析雅可比矩阵时,会忽略向量化。

向量化属性

属性

描述

Vectorized

on | {off}

设置为 on 可以告知 bvp4c 您已经编写了 ODE 函数 F,以使 F([x1 x2 ...],[y1 y2 ...]) 返回 [F(x1,y1) F(x2,y2) ...]。即,ODE 函数可以一次性向求解器传递整个列数量数组。这样,求解器可以减少函数计算次数,并且可极大地缩短求解时间。

使用 MATLAB® 数组表示法通常可以轻松向量化 ODE 函数。在前面展示的 shockbvp 示例中,已通过在下标中使用冒号表示法冒号表示法和使用数组乘法 (.*) 运算符将 shockODE 函数向量化。

function dydx = shockODE(x,y,e)
pix = pi*x;
dydx = [ y(2,:)... 
-x/e.*y(2,:)-pi^2*cos(pix)-
pix/e.*sin(pix)];

解析偏导数

默认情况下,bvp4c 求解器使用有限差分逼近所有偏导数。如果提供微分方程的解析偏导数 ∂f/∂y,以及边界条件的解析偏导数 ∂bc/∂ya 和 ∂bc/∂yb,bvp4c 会更有效。如果问题涉及未知参数,还必须相对于参数提供偏导数 ∂f/∂p 和 ∂bc/∂p。

下表介绍了解析偏导数属性。

BVP 解析偏导数属性

属性

描述

FJacobian

函数句柄

计算 f(x,y) 的解析偏导数的函数句柄。当求 y′ = f(x,y) 的解时,如果 dfdy = fjac(x,y) 计算雅可比 ∂f/∂y,请将此属性设置为 @fjac。如果问题涉及未知参数 p,[dfdy,dfdp] = fjac(x,y,p) 还必须返回偏导数 ∂f/∂p。对于使用常量偏导数的问题,请将此属性设置为 dfdy 的值或元胞数组 {dfdy,dfdp}

BCJacobian

函数句柄

计算 bc(ya,yb) 的解析偏导数的函数句柄。对于边界条件 bc(ya,yb),如果 [dbcdya,dbcdyb] = bcjac(ya,yb) 计算偏导数 ∂bc/∂ya 和 ∂bc/∂yb,请将此属性设置为 @bcjac。如果问题涉及未知参数 p,[dbcdya,dbcdyb,dbcdp] = bcjac(ya,yb,p) 还必须返回偏导数 ∂bc/∂p。对于使用常量偏导数的问题,请将此属性设置为元胞数组 {dbcdya,dbcdyb}{dbcdya,dbcdyb,dbcdp}

奇异 BVP

bvp4c 可对以下形式的奇异问题进行求解

y=Syx+f(x,y,p)

(位于区间 [0,b],其中 b > 0)。对于此类问题,请将常量矩阵 S 指定为 SingularTerm 的值。对于此形式的方程,odefun 仅计算 f(x,y,p) 项,其中 p 表示未知参数(如果有)。

奇异 BVP 属性

属性

描述

SingularTerm

常量矩阵

奇异 BVP 的奇异项。设置为以下形式的方程的常量矩阵 S

y=Syx+f(x,y,p)

(位于区间 [0,b],其中 b > 0)。

网格大小属性

bvp4c 直接对代数方程求解,以便在每个网格点确定 BVP 的数值解。代数方程组的大小取决于微分方程数 (n) 和当前网格中的网格点数 (N)。当已用完允许的网格点数时,计算会停止,bvp4c 会显示一条警告消息并返回其目前找到的解。该解不符合误差容限,但可以为使用放宽条件后误差容限或增大的 Nmax 值重新开始执行的计算提供有用的初始估计值。

下表介绍了网格大小属性。

BVP 网格大小属性

属性

描述

Nmax

正整数 {floor(1000/n)}

对 BVP 求解时允许的最大网格点数,其中 n 是该问题中的微分方程数。Nmax 的默认值将代数方程组的大小限制为约 1000 个方程。对于一些微分方程组,Nmax 的默认值应足以获取准确的解。

解统计信息属性

Stats 属性用于查看解统计信息。

下表介绍了解统计信息属性。

BVP 解统计信息属性

属性

描述

Stats

on | {off}

指定是否显示有关计算的统计信息。如果 stats 属性为 onbvp4c 会在完成问题求解后显示:

  • 网格中的点数

  • 解的最大残差

  • 它调用微分方程函数 odefun 以计算 f(x,y) 的次数

  • 为计算 bc(y(a),y(b)) 而调用边界条件函数 bcfun 的次数

示例

要创建将 bvp4c 的相对误差容限从默认值 1e-3 更改为 1e-4 的 options 结构体,请输入

options = bvpset('RelTol',1e-4);

要从 options 恢复 'RelTol' 的值,请输入

bvpget(options,'RelTol')

ans =

  1.0000e-004

扩展功能

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2006a 之前推出