主要内容

pdepe

解决一维抛物线和椭圆pde

描述

例子

索尔= pdepe (,pdefun,icfun,bcfun,xmesh,tspan)解决了一个抛物线和椭圆pde系统空间变量x和时间t。至少有一个必须抛物型方程。标量代表问题的对称(平板、圆柱或球形)。方程被编码在解决pdefun,初始值编码icfun和边界条件中编码bcfun。常微分方程(常微分方程)产生的空间离散化集成获得近似的解中指定的时间万博 尤文图斯tspan。的pdepe函数返回值网提供的解决方案的xmesh

例子

索尔= pdepe (,pdefun,icfun,bcfun,xmesh,tspan,选项)还使用集成设置定义的选项创建使用odeset函数。例如,使用AbsTolRelTol选项来指定绝对和相对误差公差。

例子

(索尔,tsol,唯一的,te,)= pdepe (,pdefun,icfun,bcfun,xmesh,tspan,选项)还发现的功能(t,u(x,t)),称为事件函数,是零。在输出中,te事件的时间,唯一的是解决方案时的事件,然后呢触发事件的索引。tsol是一个列向量中指定的吗tspan之前,第一个终端事件。

对于每个事件函数,指定是否终止的集成是一个零和是否零交点的方向很重要。通过设置的呢“事件”选择odeset一个函数,如@myEventFcn,创建一个对应的功能:价值,isterminal,方向]=myEventFcn(,t,xmesh,umesh)。的xmesh输入包含空间网格和umesh网格点的解决方案。

例子

全部折叠

解决热方程在圆柱坐标使用pdepe、策划解决方案。

在圆柱坐标与角度对称热方程

u t = 1 x x ( x u x )

方程的定义 0 x 1 有时 t 0 。初始条件的贝塞尔函数定义 J 0 ( x ) 和它的第一个零 n = 2 404825557695773 作为

u ( x , 0 ) = J 0 ( nx )

因为这个问题是在圆柱坐标(m = 1),pdepe自动执行对称条件 x = 0 。正确的边界条件

u ( 1 , t ) = J 0 ( n ) e - - - - - - n 2 t

初始和边界条件选择符合分析解决问题,

u ( x , t ) = J 0 ( nx ) e - - - - - - n 2 t

在MATLAB解这个方程,方程需要代码,初始条件和边界条件,然后选择一个合适的解决方案网在调用解算器之前pdepe。你要么可以包括所需的函数作为本地功能的文件(如在这里完成),或者拯救他们作为独立,在MATLAB上的一个目录路径命名文件。

代码方程

代码之前,您需要重写形式pdepe解算器的预期。的标准形式pdepe预计是

c ( x , t , u , u x ) u t = x - - - - - - x ( x f ( x , t , u , u x ) ) + 年代 ( x , t , u , u x )

用这种形式,PDE

u t = x - - - - - - 1 x ( x 1 u x )

用适当的形式的方程可以读出相关条款:

  • = 1

  • c ( x , t , u , u x ) = 1

  • f ( x , t , u , u x ) = u x

  • 年代 ( x , t , u , u x ) = 0

现在您可以创建一个函数代码。函数应该签名[c、f、s] = heatcyl (x, t, u, dudx):

  • x是独立空间变量。

  • t是独立的变量。

  • u因变量是分化对吗xt

  • dudx空间导数部分吗 u / x

  • 输出c,f,年代标准PDE对应系数方程的形式pdepe。这些系数编码的输入变量x,t,u,dudx

因此,在这个例子中方程可以表示为的函数:

函数[c、f、s] = heatcyl (x, t, u, dudx) c = 1;f = dudx;s = 0;结束

(注意:所有的功能都作为本地函数结束时的例子。)

代码的初始条件

接下来,编写一个函数,它返回初始条件。初始条件是应用于第一次值tspan (1)。函数应该签名情况= heatic (x)

相应的函数 u ( x , 0 ) = J 0 ( nx )

函数情况= heatic (x) n = 2.404825557695773;情况= besselj (0 n * x);结束

代码边界条件

现在,写一个函数,计算边界条件

u ( 1 , t ) = J 0 ( n ) e - - - - - - n 2 t

因为这个问题是在圆柱坐标(m = 1),pdepe自动执行对称条件 x = 0 ,因此您不需要指定一个左边界条件。

问题的区间 一个 x b ,边界条件申请 t ,要么 x = 一个 x = b 。所期望的标准形式的边界条件解算器

p ( x , t , u ) + ( x , t ) f ( x , t , u , u x ) = 0

用这种形式,边界条件的偏导数 u 需要表达的变化 f ( x , t , u , u x ) 。所以这个问题是正确的边界条件

u ( 1 , t ) - - - - - - J 0 ( n ) e - - - - - - n 2 t + 0 f ( x , t , u , u x ) = 0

边界函数应该有函数签名[pl, ql,公关,qr] = heatbc (xl, ul, xr, ur, t):

  • 输入xlul对应于 u x 为左边界。

  • 输入xr你的对应于 u x 为正确的边界。

  • t是独立的变量。

  • 输出plql对应于 p l ( x , t , u ) l ( x , t ) 为左边界( x = 0 对于这个问题)。

  • 输出公关qr对应于 p R ( x , t , u ) R ( x , t ) 正确的边界( x = 1 对于这个问题)。

本例中的边界条件由函数:

函数[pl, ql,公关,qr] = heatbc (xl, ul, xr, ur, t) n = 2.404825557695773;pl = 0;%被解算器忽略因为m = 1ql = 0;%被解算器忽略因为m = 1公关= ur-besselj (0, n) * exp (- n ^ 2 * t);qr = 0;结束

选择解决方案网

解方程之前您需要指定网格点 ( t , x ) 你想要的pdepe评估解决方案。指定点的向量tx。向量tx在解算器中扮演不同的角色。特别是,解决方案的成本和精度强烈依赖于向量的长度x。然而,计算向量中的值不太敏感t

对于这个问题,使用网格25等距的点在空间区间[0,1]xt

x = linspace (0, 1,25);t = linspace (0, 1,25);

解决方程

最后,使用对称解的方程PDE方程,初始条件、边界条件、网格xt

m = 1;索尔= pdepe (m, @heatcyl, @heatic @heatbc x, t);

pdepe回报的解决方案在一个三维数组索尔,在那里索尔(i, j, k)接近k解决方案的组件 u k 评估在t(我)x (j)。的大小索尔长度(t)——- - - - - -长度(x)——- - - - - -长度(情况),因为情况为每个解决方案组件指定一个初始条件。对于这个问题,u只有一个组件,所以呢索尔是一个25-by-25矩阵,但总的来说你能提取吗k解决方案组件的命令u =索尔(:,:,k)

提取第一个解决方案组件索尔

u =索尔(:,:1);

策划解决方案

创建一个解决方案的曲面图。以来所带来的问题是与圆柱坐标盘x值显示温度对圆盘中心的距离,和t值显示在特定位置的温度会随着时间而改变。

冲浪(x, t, u)包含(“x”)ylabel (“t”)zlabel (“u (x, t)”)视图(25 [150])

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的表面。

情节中心温度变化( x = 0 )的阀瓣。

情节(t,索尔(:1))包含(“时间”)ylabel (“温度u (0, t)”)标题(“在圆盘中心温度变化”)

图包含一个坐标轴对象。坐标轴对象标题温度变化在圆盘中心包含一个类型的对象。

本地函数

这里列出当地PDE解算器的辅助函数pdepe调用计算解决方案。或者,您可以保存这些函数作为自己的文件在MATLAB上的一个目录路径。

函数[c、f、s] = heatcyl (x, t, u, dudx) c = 1;f = dudx;s = 0;结束% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -函数情况= heatic (x) n = 2.404825557695773;情况= besselj (0 n * x);结束% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -函数[pl, ql,公关,qr] = heatbc (xl, ul, xr, ur, t) n = 2.404825557695773;pl = 0;%被解算器忽略因为m = 1ql = 0;%被解算器忽略因为m = 1公关= ur-besselj (0, n) * exp (- n ^ 2 * t);qr = 0;结束% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

解决偏微分方程,并使用一个事件函数零交点登录振荡的解决方案。

考虑方程

1 x u t = x ( 1 t u )

方程的定义 0 x 1 t 0 1 。初始条件是

u ( x , 0 1 ) = 1

边界条件是

u ( 0 , t ) = 1 ,

u ( 1 , t ) = 因为 ( π t )

此外,解决方案的零交叉感兴趣的。

在MATLAB解这个方程,方程需要代码,初始条件,边界条件,和事件函数,然后选择一个合适的解决方案网在调用解算器之前pdepe。你要么可以包括所需的函数作为本地功能的文件(如在这里完成),或者拯救他们作为独立,在MATLAB上的一个目录路径命名文件。

代码方程

代码之前,您需要重写形式pdepe解算器的预期。的标准形式pdepe预计是

c ( x , t , u , u x ) u t = x - - - - - - x ( x f ( x , t , u , u x ) ) + 年代 ( x , t , u , u x )

PDE方程已经以这种形式:

1 x u t = x ( 1 t u )

所以你可以读出相关条款:

  • = 0

  • c ( x , t , u , u x ) = 1 x

  • f ( x , t , u , u x ) = 1 t u

  • 年代 ( x , t , u , u x ) = 0

现在您可以创建一个函数代码。函数应该签名[c、f、s] = oscpde (x, t, u, dudx):

  • x是独立空间变量。

  • t是独立的变量。

  • u因变量是分化对吗xt

  • dudx空间导数部分吗 u / x

  • 输出c,f,年代标准PDE对应系数方程的形式pdepe。这些系数编码的输入变量x,t,u,dudx

因此,在这个例子中方程可以表示为的函数:

函数[c、f、s] = oscpde (x, t, u, dudx) c = 1 / x;f = u / t;s = 0;结束

(注意:所有的功能都作为本地函数结束时的例子。)

代码的初始条件

接下来,编写一个函数,它返回初始条件。初始条件是应用于第一次值tspan (1)。函数应该签名情况= oscic (x)

相应的函数 u ( x , 0 1 ) = 1

函数情况= oscic (x)情况= 1;结束

代码边界条件

现在,写一个函数,计算边界条件

u ( 0 , t ) = 1 ,

u ( 1 , t ) = 因为 ( π t )

问题的区间 一个 x b ,边界条件申请 t ,要么 x = 一个 x = b 。所期望的标准形式的边界条件解算器

p ( x , t , u ) + ( x , t ) f ( x , t , u , u x ) = 0

用这种形式,这个问题的边界条件

u ( 0 , t ) - - - - - - 1 + 0 f ( x , t , u , u x ) = 0 ,

u ( 1 , t ) - - - - - - 因为 ( π t ) + 0 f ( x , t , u , u x ) = 0

边界函数应该有函数签名[pl, ql,公关,qr] = oscbc (xl, ul, xr, ur, t):

  • 输入xlul对应于 x u 为左边界。

  • 输入xr你的对应于 x u 为正确的边界。

  • t是独立的变量。

  • 输出plql对应于 p l ( x , t , u ) l ( x , t ) 为左边界( x = 0 对于这个问题)。

  • 输出公关qr对应于 p R ( x , t , u ) R ( x , t ) 正确的边界( x = 1 对于这个问题)。

本例中的边界条件由函数:

函数[pl, ql,公关,qr] = oscbc (xl, ul, xr, ur, t) pl = ul - 1;ql = 0;公关= ur - cos(π* t);qr = 0;结束

代码事件函数

使用一个事件函数记录的零交叉集成解决方案。事件函数的函数签名(价值、isterminal方向)= pdevents (m t xmesh umesh):

  • 是坐标对称指定为第一个输入pdepe

  • t是当前时间(标量)。

  • xmesh空间网。

  • umesh包含在网格点的解决方案。

  • 价值是感兴趣的一个方程,通常表达的解决方案吗umesh。当价值= 0,一个事件发生。

  • isterminal指定一个事件是否停止积分。如果isterminal是0,但是事件记录集成不停止。如果isterminal是1,那么集成事件发生时停止。

  • 方向指定零交叉的方向。如果1,只有零交叉正斜率触发事件。如果1,零交点必须具有负斜率。如果0,那么任何讨论二阶导数过零触发一个事件。

在每一次集成,解算器调用的事件函数为零交叉检查。记录所有的零交叉,价值应该寻找变化的迹象在解决方案向量umesh。指定isterminal方向零的向量具有相同的大小,因为这些事件在这个例子不是终端和零交叉可以发生在任何的斜率。

这个问题的事件函数

函数(价值、isterminal方向)= pdevents (m t xmesh umesh)值= umesh;isterminal = 0(大小(umesh));方向= 0(大小(umesh));结束

选择解决方案网

解方程之前您需要指定网格点 ( t , x ) 你想要的pdepe评估解决方案。对于这个问题,使用细网格50点的间隔 0 x 1 0 1 t 1 。一个细孔给好的解决振荡的解决方案。

x = linspace (0, 1, 50);t = linspace(0.1,π,50);

解决方程

最后,使用对称解的方程PDE方程,初始条件、边界条件、事件函数,和网格xt。使用odeset创建一个选项结构引用的事件函数,最后通过结构作为输入参数pdepe。指定5个输出参数返回信息的事件函数和求解器:

  • 索尔解决方案计算吗pdepe

  • tsol之前是一个向量乘以一个终端事件。tsol等于t当没有事件是终端。

  • 唯一的解决方案是在每个事件的时候。

  • te每个事件的时间。

  • 是每个事件的索引。自值= umesh如果函数,给出了指数的umesh在每个时间步,触发一个事件。

m = 0;选择= odeset (“事件”,@pdevents);[tsol溶胶,唯一,te, ie) = pdepe (m, @oscpde, @oscic @oscbc x, t,选项);

提取解决方案作为一个矩阵u

u =索尔(:,:1);

策划解决方案

创建一个解决方案的曲面图和视图情节从上面。

冲浪(x, t, u)视图(2)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的表面。

情节点的事件发生,表面 f ( x , t ) = 0 供参考。产出指数向量有助于找出事件的位置。表达式x (ie) '给x事件发生的地方,和表达式唯一(x = = x (ie) ')值给出了相应的解决方案。

视图([30]39)包含(“x”)ylabel (“t”)zlabel (“u (x, t)”)举行plot3 (x (ie), te,唯一(x = = x (ie) '),的r *)冲浪(x t 0(大小(u)),“EdgeColor”,“平”)举行

图包含一个坐标轴对象。坐标轴对象包含3个类型的对象的表面,线。

本地函数

这里列出当地的辅助函数,PDE解决pdepe调用计算解决方案。或者,您可以保存这些函数作为自己的文件在MATLAB上的一个目录路径。

函数[c、f、s] = oscpde (x, t, u, dudx) c = 1 / x;f = u / t;s = 0;结束% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -函数情况= oscic (x)情况= 1;结束% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -函数[pl, ql,公关,qr] = oscbc (xl, ul, xr, ur, t) pl = ul - 1;ql = 0;公关= ur - cos(π* t);qr = 0;结束% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -函数(价值、isterminal方向)= pdevents (m t xmesh umesh)值= umesh;isterminal = 0(大小(umesh));方向= 0(大小(umesh));结束% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

输入参数

全部折叠

对称不变,指定为这个表中的值之一。指定了在指定的方程类型的问题pdefun。一旦你重写所期望的方程形式pdepe,你可以阅读的价值从这个方程。

价值 描述 拉普拉斯算子的通量

0

一维笛卡尔坐标与不对称

Δ f = 2 f x 2

1

二维圆柱坐标和方位角度对称

Δ f = 1 ρ ρ ( ρ f ρ ) + 1 ρ 2 2 f φ 2 ,

在哪里 f φ = 0 (方位对称)。

2

三维球坐标方位和天顶角对称

Δ f = 1 r 2 r ( r 2 f r ) + 1 r 2 θ θ ( θ f θ ) + 1 r 2 2 θ 2 f φ 2 ,

在哪里 f θ = f φ = 0 (方位和天顶角对称)。

m > 0,pdepe需要离开空间边界一个≥0,它对左边界条件自动占坐标不连续在原点。在这种情况下,pdepe忽略任何指定的左边界条件bcfun

PDE函数方程,指定为一个函数处理,定义了PDE的系数。

pdefun编码系数对pde的形式

c ( x , t , u , u x ) u t = x x ( x f ( x , t , u , u x ) ) + 年代 ( x , t , u , u x )

方程的条件是:

  • f ( x , t , u , u x ) 是一个通量的术语。

  • 年代 ( x , t , u , u x ) 是一个源项。

  • 的耦合对时间的偏导数是局限于对角矩阵乘法 c ( x , t , u , u x ) 。这个矩阵的对角元素要么是零个或积极。是零元素对应于一个椭圆方程,和所有其他元素对应于抛物方程。必须有至少一个抛物型方程。一个元素的c对应于一个抛物线方程可以消失在孤立的值x如果这些值x是网格点。

  • 的不连续性c年代由于材料提供的接口允许网格点放置在每一个接口。

pde的坚持t0ttf一个xb。的值tspan (1)tspan(结束)对应于t0tf,而xmesh (1)xmesh(结束)对应于一个b。的时间间隔(一个,b]必须是有限的。可以是0、1或2,对应板,圆柱形,分别或球面对称。如果> 0,然后一个必须≥0。

编码的方程

写一个函数pdefun计算系数的值c,f,年代。使用函数签名

[c、f、s] = pdefun (x, t, u, dudx)

输入参数pdefun是标量xt和向量ududx。向量u近似的解决方案u,dudx接近它的偏导数x。输出参数c,f,年代列向量的元素的数量等于方程。c存储矩阵的对角元素c

例子

热方程 u t = 2 u x 2 可以改写在解算器的形式

1 · u t = x 0 x ( x 0 u x )

这种形式可以读出的值系数= 0,c= 1,f=∂u/∂x,年代= 0。函数方程是:

函数[c、f、s] = heatpde (x, t, u, dudx) c = 1;f = dudx;s = 0;结束

数据类型:function_handle

初始条件的函数,指定为一个函数处理,定义了初始条件。

t=t0和所有x的解决方案组件满足初始条件的形式

u ( x , t 0 ) = u 0 ( x )

编码初始条件

写一个函数icfun定义初始条件。使用函数签名:

函数情况= icfun (x)

当调用了一个论点x,函数icfun评估并返回初始值的解决方案组件x的列向量情况。元素的数量情况等于方程的数量。

例子

常数初始条件 u ( x , 0 ) = 1 / 2 对应于这个函数:

函数情况= heatic (x)情况= 0.5;结束

数据类型:function_handle

边界条件的函数,指定为一个函数定义边界条件的处理。

对所有t,要么x=一个x=b的解决方案组件满足边界条件的形式

p ( x , t , u ) + ( x , t ) f ( x , t , u , u x ) = 0。

的元素要么是从不零或零。注意表达的边界条件的变化f而不是∂u/∂x。同时,这两个系数,只有p可以依赖u

编码边界条件

写一个函数bcfun定义条款p的边界条件。使用函数签名

函数(pl ql,公关,qr] = bcfun (xl, ul, xr, ur, t)

  • ul左边界的近似解吗xl =一个,你的在正确的边界近似解吗xr = b

  • plql列向量对应吗p评估在xl。同样的,公关qr对应于xr

  • 输出的元素数量pl,ql,公关,qr等于方程的数量。

> 0一个= 0附近,有界性的解决方案x= 0要求流量f消失在一个= 0pdepe强加边界条件自动,它忽略了返回值plql

例子

考虑边界条件 u ( 0 , t ) = 0 , u ( 1 , t ) = 1 的时间间隔 0 x 1 。在解算器的形式,边界条件

u ( 0 , t ) + 0 · f ( 0 , t , u , u x ) = 0 , u ( 1 , t ) 1 + 0 · f ( 0 , t , u , u x ) = 0。

这种形式很明显术语是零。的p术语是零,以反映的价值观u。相应的函数

函数[pl, ql,公关,qr] = heatbc (xl, ul, xr, ur, t) pl = ul;ql = 0;公关= ur - 1;qr = 0;结束

数据类型:function_handle

空间网格,指定为一个向量(x0 x1……xn)指定一个数值解的点是每个价值要求tspan。二阶近似的解决方案是在网格中指定xmeshpdepe选择网x自动。您必须提供一个适当的固定网格xmesh

的元素xmesh必须满足x0 < x1 <…< xn。一般来说,最好使用密集网格点解决方案迅速变化。的长度xmesh必须> = 3,解决方案的计算成本很大程度上取决于的长度xmesh

不连续的问题,你应该将网格点不连续,这样的问题是在每个子区间平滑。然而,当> 0,就没有必要使用细孔附近x= 0考虑到坐标奇异点。

例子:xmesh = linspace (0、5、25)使用空间网格之间的25分0和5。

数据类型:|

时间跨度的集成,指定为一个向量(t0 t1……tf)指定的点的解决方案是要求每一个价值xmesh。的pdepe函数执行的时间与一个集成ODE求解器,动态地选择时间步和公式。的元素tspan仅仅指定你想要的答案,因此解决方案的计算成本只有弱依赖的长度tspan

的元素tspan必须满足t0 < t1 <…<特遣部队。的长度tspan必须> = 3

例子:tspan = linspace (0、5、5)使用5 0到5之间的时间点。

数据类型:|

选择结构,指定为一个结构数组。使用odeset结构函数来创建或修改选项。pdepe万博1manbetx支持这些选项:

在大多数情况下,这些选项的默认值提供满意的解决方案。万博 尤文图斯

例子:选择= odeset (e-5 RelTol, 1)指定一个相对误差的宽容1 e-5

数据类型:结构体

输出参数

全部折叠

解决方案数组,作为一个三维数组返回。

pdepe作为一个多维数组返回解决方案。u=用户界面=索尔(:,:,)是一个近似解决方案的组件向量u。的元素用户界面(j,k)=索尔(j,k,)接近u在(t,x)= (tspan(j),xmesh(k))。

用户界面=索尔(j,:,)接近组件在时间的解决方案tspan(j)和网格点xmesh (:)。使用pdeval计算近似及其偏导数∂u/∂x点不包含在xmesh。看到pdeval获取详细信息。

解决方案的时候,作为一个列向量中指定的返回tspan第一个终端事件之前。

事件的解决方案时,作为一个数组返回。事件在te对应解决方案中返回万博 尤文图斯唯一的,指定的事件发生。

时间的事件,作为一个列向量返回。事件在te对应解决方案中返回万博 尤文图斯唯一的,指定的事件发生。

指数函数触发事件,作为一个列向量返回。事件在te对应解决方案中返回万博 尤文图斯唯一的,指定的事件发生。

提示

  • 如果里头=索尔(j:,我)接近的组件在时间的解决方案tspan (j)和网格点xmesh,然后pdeval评估近似及其偏导数∂u/∂x数组的点xout并返回它们uoutduoutdx:[uout, duoutdx] = pdeval (m, xmesh,里头,xout)。的pdeval函数计算偏导数u/∂x而不是通量。通量是连续的,但在材料界面的偏导数可以跳。

算法

集成是完成了ode15s解算器。pdepe利用的能力ode15s求解微分方程时出现的PDE包含椭圆方程,和处理雅克比指定的稀疏模式。

离散化后,椭圆方程的代数方程。如果初始条件向量的元素对应于椭圆方程离散化是不一致的,pdepe之前试图调整它们的集成。出于这个原因,返回的解决方案的初始时间可能有一个离散误差与其他任何时候。如果网格足够好,pdepe可以找到给定的初始条件接近一致。如果pdepe显示一条消息,它很难找到一致的初始条件,细化网格。不需要调整的元素对应于抛物方程的初始条件的向量。

引用

[1]斯基尔,r·d·m·贝尔津什“抛物方程的空间离散化的方法在一个空间变量,“暹罗在科学杂志和统计计算1990年,卷。11日,pp.1-32。

版本历史

之前介绍过的R2006a