pdeCoeff2D
首发版本:3.00.6.1
语法
pdeCoeff2D(xx, yy, [xy=0], [x=0], [y=0], [u=0], [source=0], [mass=1])
详情
该函数为偏微分方程求解器 pdeSolver
的辅助函数,用于构造二维偏微分方程(PDE)的算子形式(Operator-form)系数字典。
它定义了求解器所求解的各项系数(二阶偏导项、一阶偏导项、零阶项、源项、质量项)。返回结果可直接作为 pdeSolver 二维求解路径的
coeff 参数。支持常系数(标量)和变系数(函数)。求解的方程形式如下:
| 数学量 | coeff 中的字段 | 含义 |
|---|---|---|
|
M |
mass |
时间导数项系数 |
|
A |
xx |
x 方向二阶扩散项系数 |
|
B |
yy |
y 方向二阶扩散项系数 |
|
C |
xy |
xy 交叉二阶导数项系数 |
|
D |
x |
x 方向一阶对流项系数 |
|
E |
y |
y 方向一阶对流项系数 |
|
F |
u |
反应项系数 |
|
G |
source |
源项 |
参数
xx 数值标量或函数,指定 x 方向二阶偏导项系数。
yy 数值标量或函数,指定 y 方向二阶偏导项系数。
xy 可选参数,数值标量或函数,指定交叉偏导项系数。默认值为 0。
x 可选参数,数值标量或函数,指定 x 方向一阶偏导项系数。默认值为 0。
y 可选参数,数值标量或函数,指定 y 方向一阶偏导项系数。默认值为 0。
u 可选参数,数值标量或函数,指定零阶项系数。默认值为 0。
source 可选参数,数值标量或函数,指定源项系数。默认值为 0。
mass 可选参数,数值标量或函数,指定质量项系数。默认值为 1。
注意:
若系数为标量,必须为有限的有效值(即非 NULL、NaN 或 Inf)。
若系数为函数,该函数必须接收 3 个参数(通常代表空间位置 x、y 和时间 t)。
在求解阶段,mass 系数必须始终为正数且有限。
返回值
返回一个包含以下字段的字典(DICTIONARY):
type: STRING 标量,固定为 "operator2D"。
dim: INT 标量,固定为 2。
form: STRING 标量,固定为 "operator"。
mass: DOUBLE 标量或函数,为规范化后的 mass、默认值或原函数对象。
xx: DOUBLE 标量或函数,为规范化后的 xx 或原函数对象。
yy: DOUBLE 标量或函数,为规范化后的 yy 或原函数对象。
xy: DOUBLE 标量或函数,为规范化后的 xy、默认值或原函数对象。
x: DOUBLE 标量或函数,为规范化后的 x、默认值或原函数对象。
y: DOUBLE 标量或函数,为规范化后的 y、默认值或原函数对象。
u: DOUBLE 标量或函数,为规范化后的 u、默认值或原函数对象。
source: DOUBLE 标量或函数,为规范化后的 source、默认值或原函数对象。
注意:系数名称、系数输入类型、交叉项和依赖性等诊断信息可通过 pdeInfo(coeff) 查询。
例子
例 1. 构造对应如下二维纯扩散方程的系数字典:
coeff = pdeCoeff2D(xx=0.01, yy=0.02)
例 2. 构造对应如下二维对流扩散方程(含扩散项、对流项和常数源项)的系数字典:
coeff = pdeCoeff2D(
xx=0.01,
yy=0.01,
x=-0.3,
y=0.1,
source=2.5
)
例 3. 构造对应如下含混合二阶导数交叉项 方程的系数字典:
coeff = pdeCoeff2D(
xx=0.1,
yy=0.2,
xy=-0.05
)
例 4. 构造 Heston 随机波动率模型下欧式期权定价的 PDE 系数字典(以资产价格 S、方差 v、剩余期限 tau 为自变量):
coeff = pdeCoeff2D(
xx=def(S, v, tau) {
return 0.5 * v * S * S
},
yy=def(S, v, tau) {
return 0.5 * 0.3 * 0.3 * v
},
xy=def(S, v, tau) {
return -0.7 * 0.3 * v * S
},
x=def(S, v, tau) {
return 0.05 * S
},
y=def(S, v, tau) {
return 2.0 * (0.04 - v)
},
u=-0.05
)
例 5. 通过自定义函数指定质量项(mass)与源项(source),对应方程如下:
coeff = pdeCoeff2D(
xx=def(x, y, t) { return 0.0 },
yy=def(x, y, t) { return 0.0 },
source=def(x, y, t) { return 1.0 },
mass=def(x, y, t) { return 1.0 }
)
