Main Content

pdeval

对 PDE 的数值解进行插值

说明

示例

[u,dudx] = pdeval(m,xmesh,usol,xq) 在新查询点 xq 处对 pdepe 返回的数值解进行插值,并返回解 u 及其偏导数 dudx 的插值。重用此前调用 pdepe 时涉及的 mxmeshusol 参量:

  • sol = pdepe(m,@pdefun,@pdeic,@pdebc,xmesh,tspan) 生成的数值解基于坐标对称性 m 和空间网格 xmesh 返回解值的三维矩阵 sol。当您调用 pdeval 时,将对用于计算解的 mxmesh 输入进行重用。

  • 输入向量 usol = sol(i,:,k) 是解的分量 k 在时间 tspan(i) 处的值。当只有一个解分量时,usol 是从解矩阵 usol = sol(i,:) 中提取的一行。

示例

全部折叠

使用 pdepe 求解偏微分方程,然后使用 pdeval 计算其他点处的解。

求解 PDE

使用 pdepe 求解 pdex1 示例问题。您可以键入 edit pdex1 查看该问题的更多详细信息,或参阅 pdepe 了解 PDE 求解过程的详细信息。求解 pdex1 问题所需的函数作为局部函数包含在此示例的末尾。

m = 0;
x = linspace(0,1,20);
t = linspace(0,2,5);
sol = pdepe(m,@pdex1pde,@pdex1ic,@pdex1bc,x,t);

对解进行插值

pdepe 生成的解 sol 使用 0 和 1 之间的 20 个等间距点确定 x。创建一个查询点向量,这些查询点位于 pdepe 所用的各点之间。

xq = x;
xq(1:end-1) = xq(1:end-1) + diff(xq)./2;

使用 pdeval 在查询点上对解进行插值。由于只有一个解分量,您可以从 sol 中提取一行对其执行运算,例如 sol(2,:)

[u,dudx] = pdeval(m,x,sol(2,:),xq);

绘制由 pdepe 计算的解,以及由 pdeval 计算的插值解及其偏导数。

plot(x,sol(2,:),'r*')
hold on
plot(xq,u,'-o')
plot(xq,dudx,'.')
hold off
legend('PDEPE Solution', 'PDEVAL Interpolation', 'PDEVAL Partial Derivative')

局部函数

此处列出 PDE 求解器 pdepe 为计算解而调用的局部辅助函数。

function [c,f,s] = pdex1pde(x,t,u,DuDx)
c = pi^2;
f = DuDx;
s = 0;
end
% ------------------------------------------------------
function u0 = pdex1ic(x)
u0 = sin(pi*x);
end
% ------------------------------------------------------
function [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t)
pl = ul;
ql = 0;
pr = pi * exp(-t);
qr = 1;
end

输入参数

全部折叠

pdepe 中使用的坐标对称性,指定为下表中的值之一。请指定您最初调用 pdepe 时所用的坐标对称性。

对称性

0

平板/笛卡尔

1

柱状

2

球面

pdepe 中使用的空间网格,指定为向量 [x0 x1 ... xn],将在该向量包含的各点处计算数值解。请指定您最初调用 pdepe 时所用的空间网格。

数据类型: single | double

提取的解分量,指定为一个向量,其中包含 pdepe 在特定时间为一个解分量计算的值。

pdepe 以三维数组 sol 形式返回解,其中 sol(i,j,k) 是在时间 t(i) 和空间点 xmesh(j) 处计算的解 u k 的第 k 个分量的逼近值。您可以使用命令 usol = sol(i,:,k) 创建输入 usol,其中 sol(i,:,k) 是在时间 tspan(i) 上基于整个空间网格 xmesh 计算的解的分量 k 的值。当只有一个解分量时,usol 是从解矩阵 usol = sol(i,:) 中提取的一行。

示例: usol = sol(10,:,2) 提取在时间 tspan(10) 处计算的第二个解分量。

示例: usol = sol(5,:) 提取在时间 tspan(5) 处计算的解。

数据类型: single | double
复数支持:

查询点,指定为 x 坐标的标量或向量。xq 中指定的点必须位于 [min(xmesh) max(xmesh)] 区间内。

通常,xq 中指定的点位于 xmesh 中的各个值之间,以使 pdeval 能够在更精细的网格上计算 pdepe 生成的解。

示例: xq = linspace(0,1,100) 指定 0 和 1 之间的 100 个等间距查询点。

数据类型: single | double
复数支持:

输出参量

全部折叠

插值解,以与 xq 大小相同的向量形式返回。

插值解的偏导数,以与 xq 大小相同的向量形式返回。

提示

  • pdeval 计算偏导数 ux 而不是通量 f(x,t,u,ux)。虽然通量是连续的,但在物质界面处偏导数可能有跳跃。

扩展功能

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

版本历史记录

在 R2006a 之前推出

另请参阅