主要内容

平方域上的波动方程

此示例演示如何使用solvepde功能。

标准的二阶波动方程是

2 u t 2 - u = 0 .

要以工具箱的形式表示这一点,请注意solvepde函数解决了表单的问题

m 2 u t 2 - ( c u ) + u = f .

所以标准波动方程有系数 m = 1 , c = 1 , = 0 ,及 f = 0 .

c=1;a=0;f=0;m=1;

在正方形区域上解决问题。这个平方函数描述此几何体。创建一个模型对象并包括几何图形。打印几何图形并查看边标签。

numberOfPDE=1;模型=createpde(numberOfPDE);几何尺寸(模型,@square);pdegplot(模型,“EdgeLabels”,“开”); ylim([-1.1.1]);轴平等的标题“显示边标签的几何图形”;xlabelx伊拉贝尔y

图中包含一个轴对象。显示了标题几何图形和边缘标签的轴对象包含5个类型为line、text的对象。

指定PDE系数。

特定系数(型号,“我是,m,“d”,0,“c”,c,“a”,a,“f”,f);

在左侧(边4)和右侧(边2)设置零Dirichlet边界条件,在顶部(边1)和底部(边3)设置零Neumann边界条件。

applyBoundaryCondition(模型,“迪里克莱”,“边缘”,[2,4],“你”,0);applyBoundaryCondition(模型,“诺依曼”,“边缘”,([1 3]),“g”,0);

创建并查看问题的有限元网格。

生成网格(模型);图pdemesh(模型);ylim([-1.1.1]);轴平等的xlabelx伊拉贝尔y

图中包含一个轴对象。axes对象包含2个line类型的对象。

设置以下初始条件:

  • u ( x , 0 ) = 反正切 ( 余弦 ( π x 2 ) ) .

  • u t | t = 0 = ( π x ) 经验 ( ( π y 2 ) ) .

u0=@(位置)atan(cos(pi/2*location.x));ut0=@(位置)3*sin(pi*location.x)。*exp(sin(pi/2*location.y));setInitialConditions(model,u0,ut0);

这种选择避免了将能量放入更高的振动模式,并允许一个合理的时间步长。

将求解时间指定为31个等间距的时间点,从0到5。

n=31;tlist=linspace(0,5,n);

设定SolverOptions.ReportStatistics模型“开”.

model.SolverOptions.ReportStatistics=“开”;结果=解算PDE(模型,tlist);
459成功步骤39失败尝试998函数求值1偏导数115 LU分解997线性系统的解万博 尤文图斯
u = result.NodalSolution;

创建动画以可视化所有时间步长的解决方案。通过首先计算时间步长的最大值和最小值来保持固定的垂直比例u并缩放所有绘图以使用这些 z -轴限制。

图umax=max(max(u));umin=min(min(u));对于i=1:n PDE批次(型号,“XYData”,u(:,i),“ZData”,u(:,i),...“ZStyle”,“连续的”,“网格”,“关”);轴([-1 1 -1 1 umin umax]);caxis ([umin umax]);xlabelx伊拉贝尔y兹拉贝尔uM(i)=getframe;结束

图中包含一个轴对象。轴对象包含面片类型的对象。

要播放动画,请使用电影(M)指挥部。