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')

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent 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 之前推出

另请参阅