首页 理论教育 Matlab谱方法快速求解微分方程

Matlab谱方法快速求解微分方程

时间:2023-10-31 理论教育 版权反馈
【摘要】:与第3章一样,待求解的偏微分方程的普遍形式为:其中,u(x,t)为x、t的函数,L代表线性算符,N为非线性项。用谱求导矩阵数值求解式的步骤如下:在x轴上的计算区间内,将x离散化为N个等间距的位置x=(x1,x2,…而u3应理解为向量u中的每个元素的立方,这在Matlab中用“.^3”表示。此外,在二维的特征值问题中,也必须采用第二种离散形式才能求解。

Matlab谱方法快速求解微分方程

与第3章一样,待求解的偏微分方程的普遍形式为:

978-7-111-51623-1-Part02-127.jpg

其中,u(x,t)为x、t的函数,L代表线性算符,N(u)为非线性项。通过函数代换可将等号左边的n导数n/∂tn降到1阶,所以下面分析式(4-26)的求解过程,这与式(4-25)降阶后得到的方程组的解法是一样的。

978-7-111-51623-1-Part02-128.jpg

用谱求导矩阵数值求解式(4-26)的步骤如下:

(1)在x轴上的计算区间内,将x离散化为N个等间距的位置x=(x1,x2,…,xN)T,相应地,将函数u离散化为N维向量u=(u1,u2,…,uN)T

(2)在等号右边,将线性算符L和非线性项N(u)里所有对函数u的求导运算替换为谱求导矩阵与向量u的乘运算,即:nu/∂xnDN(n)u,并将LN(u)都写成矩阵形式,得到形如式(4-27)的微分方程组。注意,若计算区间长度不是2π,则必须在DN(n)上乘以缩放系数。

(3)用时间步进法(欧拉法、龙格-库塔法等)数值计算式(4-27)等号左边的∂/∂t,在周期性边界条件下,得到不同t处的向量u

978-7-111-51623-1-Part02-129.jpg

针对步骤2,这里以L=a·2/∂x2+b·∂/∂x+cN(u)=u3+u3·∂2u/∂x2+f(x)·∂u/∂x为例进行说明,a、b和c分别为常数。对线性算符L,除了将n/∂xn替换为DN(n)之外,还必须在线性算符的常数c上乘以N阶单位矩阵IN,得到N阶方阵L,即:L=aDN(2)+bDN+cIN。注意:Matlab对矩阵与常数之间的加法是有特殊定义的,如果忘记在c上乘以IN会导致错误,因为线性算符矩阵L与向量u相乘Lu=(aDN(2)+bDN+cIN)u=aDN(2) u+bDNu+cu(aDN(2)+bDN+c)u。对非线性项N(u),替换n/∂xn为DN(n)时,DN(n)与向量u之间的乘法是矩阵乘法,在Matlab中用“*”表示。而u3应理解为向量u中的每个元素的立方,这在Matlab中用“.^3”表示。类似地,f(x)·(DNu)也应处理为f(x)和向量DNu中的每个对应元素的相乘,在Matlab中用“.*”表示。所以此时Lu+N(u)在Matlab中应写为:

978-7-111-51623-1-Part02-130.jpg

换句话说,只有谱求导矩阵DN(n)与向量u之间的乘法是矩阵运算,其余的运算均是在矩阵或向量的元素之间进行的。但也有一个例外,由于线性算符L中的常数c在矩阵化时乘了单位矩阵IN,所以实际上cIN与向量u之间也是矩阵乘法,这样才能将其与线性算符L中的其他项相加:L=aDN(2)+bDN+cIN

若方程式(4-26)再增加一个维度,等号右边包含了u(x,y,t)的n/∂xnn/∂yn,那么求解步骤中的一些细节就需要推广到二维空间上。在x轴、y轴上的计算区间内分别取等间距的N个位置x=(x1,x2,…,xN)T以及y=(y1,y2,…,yN)T,于是在x-y平面上的计算区域内就得到了N2个位置的坐标(x1,y1),(x1,y2),…,(x1,yN),(x2,y1),…,(x2,yN),…,(xN,yN)。相应地,函数u可以被离散化为N阶方阵(第一种形式)或N2维列向量(第二种形式),如式(4-28)、式(4-29)所示:

978-7-111-51623-1-Part02-131.jpg

式(4-28)中,第i行j列的元素uij对应的坐标是(xj,yi)。列向量(4-29)的第1到第N个元素对应于式(4-28)的第1列,第N+1到第2N个元素对应于式(4-28)的第2列……依此类推,如图4-3所示。另外,可以通过Matlab中的reshape函数在二者间进行转换。

978-7-111-51623-1-Part02-132.jpg

图4-3 函数u的两种离散形式及它们的对应关系

针对函数u的两种离散形式,nu/∂xnnu/∂yn的计算方法也大为不同。对于第一种形式,有:

978-7-111-51623-1-Part02-133.jpg

对于第二种形式,有:(www.xing528.com)

978-7-111-51623-1-Part02-134.jpg

其中IN为N阶单位矩阵,“978-7-111-51623-1-Part02-135.jpg”代表克罗内克积(Kronecker product),它是两个任意大小矩阵间的运算,可用Matlab中的kron函数实现。若k×l矩阵与m×n矩阵做克罗内克积运算,结果将是km×ln矩阵,并可以被分成k×l块,比如:

978-7-111-51623-1-Part02-136.jpg

为帮助读者理解,下面给出n=2、N=3时式(4-32)和式(4-33)的一个例子,设D(32)为:

978-7-111-51623-1-Part02-137.jpg

那么,2u/∂y2为:

978-7-111-51623-1-Part02-138.jpg

其中,空白元素均为0,下同。2u/∂x2为:

978-7-111-51623-1-Part02-139.jpg

最后,比较函数u在二维平面上的两种离散形式(式(4-28)和式(4-29))以及相应的数值求导过程。从使用的难易度和运算量来讲,前者是远远优于后者的。因为前者最多只出现N阶方阵之间的乘法运算,而后者出现了N2阶方阵与N2维向量的乘法运算。但是在做某些求导过程的逆运算时,就不得不采用第二种离散形式。例如,在x-y二维平面上函数uv有如下关系:

v=Δu (4-38)

∆为拉普拉斯算符,根据式(4-32)和式(4-33),拉普拉斯算符可以表示为N2阶方阵:

978-7-111-51623-1-Part02-140.jpg

若已知v,求u只需:

978-7-111-51623-1-Part02-141.jpg

类似地,还可以用此方法求诸如an/∂xn+b∂m/∂ym等导数的逆运算。然而,对于第一种离散形式,有vN×N=DN(2)uN×N+uN×N(DN(2))T,无法直观、方便地利用DN(2)vN×N

求得uN×N

此外,在二维的特征值问题中,也必须采用第二种离散形式才能求解。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈