当前位置: 首页 > news >正文

长沙网站设计公司推荐网站制作 杭州公司

长沙网站设计公司推荐,网站制作 杭州公司,手表网站欧米茄官网,做浏览单的网站谱方法学习笔记#x1f4d2; 谱方法学习笔记-上(超详细) 声明#xff1a;鉴于CSDN使用 K a T e X KaTeX KaTeX 渲染公式#xff0c; KaTeX \KaTeX KATE​X 与 L a T e X LaTeX LaTeX 不同#xff0c;不支持直接的交叉引用命令#xff0c;如\label和\eqref。 KaTeX \KaT…谱方法学习笔记 谱方法学习笔记-上(超详细) 声明鉴于CSDN使用 K a T e X KaTeX KaTeX 渲染公式 KaTeX \KaTeX KATE​X 与 L a T e X LaTeX LaTeX 不同不支持直接的交叉引用命令如\label和\eqref。 KaTeX \KaTeX KATE​X专注于数学公式的呈现而不提供完整的文档生成功能。因此为了保证显示正常本文中所有公式均已删除编号和交叉引用。由此可能导致一些可读性上的不便请读者谅解。 文章目录 谱方法学习笔记傅里叶谱方法求解基本偏微分方程---二维 Schnakenberg 模型Matlab 将计算结果制作成 gif 动画引言函数介绍Matlab源代码 谱求导矩阵谱求导矩阵的导出和应用谱方法插值谱求导矩阵用谱求导矩阵求解偏微分方程的步骤 收敛阶说明 傅里叶谱方法求解基本偏微分方程—二维 Schnakenberg 模型 Schnakenberg模型是一种描述化学反应动力学的数学模型旨在研究化学反应中自组织现象和空间模式的形成。 该模型最早由德国化学家Heinrich Otto Wieland提出后由德国数学家Theodor Schnakenberg在其博士论文中进行了推导和解析并得到了该模型的名字。 Schnakenberg模型的意义在于它可以模拟一系列反应中出现的自组织现象例如化学波、化学斑图、化学分叉等。这些现象是由于反应物浓度分布在空间上的不均匀性导致的通过Schnakenberg模型可以更好地理解这些现象并为实验提供一定的指导和验证。 此外Schnakenberg模型还可以应用于其他领域例如生物学、物理学、生态学等。在这些领域中该模型可以用于研究许多自组织现象例如细胞分裂、病毒传播、生态系统演化等。 这个模型描述的是两种化学物质之间的反应过程。具体来说化学物质 u u u 会被消耗掉同时生成化学物质 v v v。反应速率的大小取决于 u u u 和 v v v的浓度而扩散系数则描述了物质在空间中的扩散速度。 Schnakenberg模型有许多有趣的特性和行为。例如在某些参数范围内这个模型的解可以显示出空间上的分布和时间上的演化形成有序的斑图patterns。这些斑图包括静态和动态的形态它们的形状和数量取决于模型参数的取值。这种有序结构的出现和演化可以通过Schnakenberg模型来解释和理解实验室中观察到的许多化学反应和生物学现象。具体来说当模型的参数取值适当时Schnakenberg模型的解会形成一个包含不同浓度级别的周期性结构。这种周期性结构被称为Turing结构是由Alan Turing在1952年提出的一种理论模型。Turing结构是许多自组织系统中的一种普遍现象例如斑马条纹、蝴蝶翅膀上的斑点等。 在Schnakenberg模型中Turing结构的出现是由反应和扩散之间的相互作用所导致的。具体来说当扩散系数足够大时化学物质可以在空间上扩散使得浓度分布均匀。但当反应速率较慢时这些化学物质在局部区域内聚集起来并且在一定的空间尺度上发生反应。这个过程会导致局部区域内的浓度发生变化从而形成周期性的结构。 需要注意的是Turing结构的出现是非线性动力学的一个重要特征。这种结构的产生和演化需要考虑多个因素之间的相互作用因此通常需要使用数值计算和数学分析的方法来研究其性质和行为。 需要注意的是Schnakenberg模型是一种简化的模型它假设了化学物质的浓度在空间和时间上均匀分布没有考虑一些具体的生物或化学体系的细节和复杂性。因此这个模型只能作为一种基本的参考模型而不是具体体系的精确描述。 近年来Schnakenberg模型被广泛应用于不同领域的研究中包括流体力学、生物学、材料科学等。这个模型的理论和数值分析方法也在不断地发展和完善为我们深入理解和探究复杂动态系统的性质和行为提供了有力的工具和平台。 斑图pattern是一类普遍存在于自然界、在时间或空间上具有某种规律的非均匀宏观结构。反应-扩散系统 (reaction-diffusion system) 是斑图理论中研究得最为广 泛的系统, 它起源于化学反应系统, 但又不局限于此, 还广泛应用于生物学、物理学、医学、金融学等。Schnakenberg 模型是反应-扩散系统中的一个有趣的模型, 数学形式如下: { ∂ u ∂ t ( ∂ 2 ∂ x 2 ∂ 2 ∂ y 2 ) u γ ( a − u u 2 v ) ∂ v ∂ t d ( ∂ 2 ∂ x 2 ∂ 2 ∂ y 2 ) v γ ( b − u 2 v ) \left\{\begin{array}{l} \frac{\partial u}{\partial t}\left(\frac{\partial^2}{\partial x^2}\frac{\partial^2}{\partial y^2}\right) u\gamma\left(a-uu^2 v\right) \\ \frac{\partial v}{\partial t}d\left(\frac{\partial^2}{\partial x^2}\frac{\partial^2}{\partial y^2}\right) v\gamma\left(b-u^2 v\right) \end{array}\right. ⎩ ⎨ ⎧​∂t∂u​(∂x2∂2​∂y2∂2​)uγ(a−uu2v)∂t∂v​d(∂x2∂2​∂y2∂2​)vγ(b−u2v)​ 其中, u u u 和 v v v 可看做两种化学反应物质的浓度, x 、 y x 、 y x、y 为空间坐标, t t t 为时间, a 、 b 、 d a 、 b 、 d a、b、d 、 γ \gamma γ 为常数。对式 (3-38) 做二维傅里叶变换, 可将其转化为偏微分方程组: { ∂ u ^ ∂ t − ( k x 2 k y 2 ) u ^ ^ γ ⋅ F { a − F − 1 [ u ^ ] F − 1 [ u ^ ] 2 F − 1 [ v ^ ] } ∂ v ^ ∂ t − d ( k x 2 k y 2 ) v ^ γ ⋅ F { b − F − 1 [ u ^ ] 2 F − 1 [ v ^ ] } \left\{\begin{array}{l} \frac{\partial \hat{u}}{\partial t}-\left(k_x^2k_y^2\right) \hat{\hat{u}}\gamma \cdot F\left\{a-F^{-1}[\hat{u}]F^{-1}[\hat{u}]^2 F^{-1}[\hat{v}]\right\} \\ \frac{\partial \hat{v}}{\partial t}-d\left(k_x^2k_y^2\right) \hat{v}\gamma \cdot F\left\{b-F^{-1}[\hat{u}]^2 F^{-1}[\hat{v}]\right\} \end{array}\right. {∂t∂u^​−(kx2​ky2​)u^^γ⋅F{a−F−1[u^]F−1[u^]2F−1[v^]}∂t∂v^​−d(kx2​ky2​)v^γ⋅F{b−F−1[u^]2F−1[v^]}​ 参数取值为: a 0.1 , b 0.8 , d 26 , γ 100 a0.1, b0.8, d26, \gamma100 a0.1,b0.8,d26,γ100 。为了得到靶型波, 将初始条件设置为: u u u 在 x − y x-y x−y 平面原点处为 1 , 在其他位置为 0 , v 0, v 0,v 在整个 x − y x-y x−y 平面上均为 1 。利用傅里叶谱方法 求解该模型的代码如下。 主程序代码 clear all; close all; L16; N64; kx2*pi/L*[0:N/2-1 -N/2:-1]; kykx; [kX,kY]meshgrid(kx,ky); K2kX.^2kY.^2; %初始条件 uzeros(N); u(N/2,N/2)1; vones(N); utfft2(u); vtfft2(v); uvt[ut(:); vt(:)]; %求解 a0.1; b0.8; d26; gamma100; t[0:0.1:0.3]; [t,uvtsol]ode45(schnakenberg,t,uvt,[],K2,N,gamma,a,b,d); %画图 for n1:4subplot(2,2,n)gcapcolor(ifft2(reshape(uvtsol(n,1:N^2),N,N))); axis offset(gca,LineStyle,none), shading interptitle([t num2str(t(n))]), axis(square), % colormap(gray) end程序输出的结果如图所示这与化学实验中观察到的靶型波一致。 Matlab 将计算结果制作成 gif 动画 引言 求解包含时间的偏微分方程 (组) 将得到随着时间变化的数值结果, 把这样的数据制作成 gif 动画并结合到幻灯片中, 在毕业答辩、小组讨论、课堂教学等场合有着广泛的应用。生动的彩色 gif 动画具有很强的表现力, 令人刮目相看, 大大提高了报告人所讲述理论结果的直观性、生动性、观赏性。 函数介绍 生成 gif 动画主要用到 4 4 4 个函数: getframe、frame2im、rgb2ind、imwrite。 getframe 函数的一般调用形式为: Fgetframe(h), 其作用是截取句柄为 h 的窗口内的一帧图像。 frame2im 函数的作用是把一帧截图转为图像数据。 rgb2ind 函数的作用是将 RGB 图像转换为索引图像, 一般调用形式为: [X, map] rgb2ind(RGB,n) 。其中, X、map 分别为转换后的图像数据和颜色表数据, RGB 为转换前的图像数据, n 指定 map 中的颜色数。 imwrite 函数的作用是将图像数据写入图像文件, 一般调用形式为: imwrite(X,map,filename,fmt,Param1,Val1,Param2,Val2...)。其中, X、map 意义同上, filename 为文件名, fmt 为文件格式,Param1,Val1,Param2,Val2... 为若干可选参数及其取值。如参数 LoopCount 为动画的循环播放次数, 这里设为 inf, 即无穷大。参数 DelayTime 为每帧间隔时间, 单位秒。参数 WriteMode 为写入文件的模式, 有覆盖 overwrite (默认) 和追加 append 两种选择。 Matlab源代码 生成 gif 动画的示例代码如下: clear clc close x-1:0.02:1;yx; [X,Y]meshgrid(x,y); filenametest.gif; for a1:10ua*exp(-10*(X.^2Y.^2));mesh(x,y,u),axis([-1 1 -1 1 0 10]),drawnowimframe2im(getframe(gcf));[A,map]rgb2ind(im,256);if a1%先以覆盖模式写入指定的gif文件imwrite(A,map,filename,gif,LoopCount,Inf,DelayTime,0.1);else%再以追加模式将每一帧写入gif文件imwrite(A,map,filename,gif,WriteMode,append,DelayTime,0.1);end end运行代码之后在当前目录下生成 gif 文件, 该动画显示了一个三维高斯函数的峰值逐渐增大的过程。 为了更加直观的感受求解 Schnakenberg 模型得到的靶型波此处结合上述操作将计算结果制作成如下 gif 动画。 修改后的程序源代码 clear all; close all; L16; N64; kx2*pi/L*[0:N/2-1 -N/2:-1]; kykx; [kX,kY]meshgrid(kx,ky); K2kX.^2kY.^2; %初始条件 uzeros(N); u(N/2,N/2)1; vones(N); utfft2(u); vtfft2(v); uvt[ut(:); vt(:)]; %求解 a0.1; b0.8; d26; gamma100; t[0:0.01:1]; [t,uvtsol]ode45(schnakenberg,t,uvt,[],K2,N,gamma,a,b,d); %画图 filename output.gif; % 设置保存的gif文件名 for n 1:length(t)gcapcolor(ifft2(reshape(uvtsol(n,1:N^2),N,N))); axis offset(gca,LineStyle,none), shading interptitle([t num2str(t(n))]), axis(square),% colormap(gray)% 捕捉当前子图并转换为gif图像帧frame getframe(gcf);imframe2im(getframe(gcf));[A,map]rgb2ind(im,256);% 写入gif图像文件if n 1%先以覆盖模式写入指定的gif文件imwrite(A,map,filename,gif,LoopCount,Inf,DelayTime,0.01);else%再以追加模式将每一帧写入gif文件imwrite(A,map,filename,gif,WriteMode,append,DelayTime,0.01);end end谱求导矩阵 谱求导矩阵的导出和应用 在生产实践过程中, 某些函数关系的具体表达式是未知的, 只能通过实验测量得到该函数上的一些离散的数据点.所以, 人们希望通过这些离散的数据点构造一个已知函数来近似地描述并替代未知函数.此外, 尽管有些函数的表达式是已知的, 但由于太过复杂繁琐, 不便对其进行理论计算和数值分析, 所以也有必要构造一个简单函数来替代它. 上述问题用数学语言表达为: 已知在区间 [ a , b ] [a, b] [a,b] 上的 N N N 个位置 x 1 , x 2 , … , x N x_{1}, x_{2}, \ldots, x_{N} x1​,x2​,…,xN​ 的函数值 u 1 u_{1} u1​, u 2 , … , u N u_{2}, \ldots, u_{N} u2​,…,uN​, 求一个函数 p ( x ) p(x) p(x) 通过所有已知点 ( x 1 , u 1 ) , ( x 2 , u 2 ) , … , ( x N , u N ) \left(x_{1}, u_{1}\right),\left(x_{2}, u_{2}\right), \ldots,\left(x_{N}, u_{N}\right) (x1​,u1​),(x2​,u2​),…,(xN​,uN​), 即: u j p ( x j ) , j 1 , 2 , … , N u_{j}p\left(x_{j}\right), \quad j1,2, \ldots, N uj​p(xj​),j1,2,…,N 其中, 用 p ( x ) p(x) p(x) 近似未知函数的方法称为插值法 (interpolation), p ( x ) p(x) p(x) 称为插值函数.下面介绍用谱方法确定插值函数 p ( x ) p(x) p(x) 的过程, 并将其用于计算离散数据的各阶导数、偏微分方程 (组) 的数值求解. 谱方法插值 考虑在区间 [ 0 , 2 π ] [0,2 \pi] [0,2π] 上、具有周期性边界条件的插值问题.在此区间上间距为 h h h 的 N N N 个位置 x 1 , x 2 , … , x N x_{1}, x_{2}, \ldots, x_{N} x1​,x2​,…,xN​ 对应的函数值为 u 1 , u 2 , … , u N u_{1}, u_{2}, \ldots, u_{N} u1​,u2​,…,uN​ .其中, x j j h , h 2 π / N x_{j}j h, h2 \pi / N xj​jh,h2π/N, 即: π h N 2 \frac{\pi}{h}\frac{N}{2}% \label{4-2} hπ​2N​ 在推导前先做 3 点说明: (1) 选择区间 [ 0 , 2 π ] [0,2 \pi] [0,2π] 是为了方便讨论, 在该区间上得出的结论同样适用于对其平移得到的其他区间 (如 [ − π , π ] [-\pi, \pi] [−π,π] ), 并可以通过乘以缩放因子方便地将结论转化到其他长度非 2 π 2 \pi 2π的任意区间上 (如 [ − L , L ] ) [-L, L]) [−L,L]) . (2) 所谓周期性边界条件, 是指 N N N 个函数值 u 1 , u 2 , … , u N u_{1}, u_{2}, \ldots, u_{N} u1​,u2​,…,uN​ 可等效地看做是无穷多个函数值 … , u − 1 , u 0 , u 1 , … , u N − 1 , u N , u N 1 , … \ldots, u_{-1}, u_{0}, u_{1}, \ldots, u_{N-1}, u_{N}, u_{N1}, \ldots …,u−1​,u0​,u1​,…,uN−1​,uN​,uN1​,… 的一部分, 并存在 u j m N u j u_{jm N}u_{j} ujmN​uj​ 的关系 ( m m m 为任意整数).这里把讨论的函数当做周期为 2 π 2 \pi 2π 的周期函数处理. (3) N N N 的奇偶会导致接下来的推导细节有所差异, 但过程是相似的, 所以此处只分析 N N N 为偶数的情况. 若对序列 u 1 , u 2 , … , u N u_{1}, u_{2}, \ldots, u_{N} u1​,u2​,…,uN​ 做离散傅里叶变换, 那么空域时域上的间隔 h h h 决定了频域上的区间为 [ − π / h , π / h ] [-\pi / h, \pi / h] [−π/h,π/h] .由式 % \eqref{4-2} , 该区间也可写为 [ − N / 2 , N / 2 ] [-N / 2, N / 2] [−N/2,N/2] .本部分中的离散傅里叶变换对定义为: u ^ k h ∑ j 1 N e − i k x j u j , k − N 2 1 , … , N 2 u j 1 2 π ∑ k − N / 2 1 N / 2 e i k x j u ^ k , j 1 , … , N \begin{align} \hat{u}_{k}h \sum_{j1}^{N} \mathrm{e}^{-\mathrm{i} k x_{j}} u_{j}, \quad k-\frac{N}{2}1, \ldots, \frac{N}{2} % \label{4-3}\\ u_{j}\frac{1}{2 \pi} \sum_{k-N / 21}^{N / 2} \mathrm{e}^{\mathrm{i} k x_{j}} \hat{u}_{k}, \quad j1, \ldots, N% \label{4-4} \end{align} u^k​hj1∑N​e−ikxj​uj​,k−2N​1,…,2N​uj​2π1​k−N/21∑N/2​eikxj​u^k​,j1,…,N​​ 这与前面给出的 Matlab 中离散傅里叶变换对的定义略有不同, 但实质是一样的.注意到式 % \eqref{4-4} 中的频率分量并不是完全对称的, k k k 中有 0 、 ± 1 、 ± 2 、 ⋯ ⋯ 、 ± ( N / 2 − 1 ) 、 N / 2 0 、 \pm 1 、 \pm 2 、 \cdots \cdots 、 \pm(N / 2-1) 、 N / 2 0、±1、±2、⋯⋯、±(N/2−1)、N/2,却没有 − N / 2 -N / 2 −N/2, 这在求解插值函数时会引起一些小小的问题.所以, 令 u ^ − N / 2 u ^ N / 2 \hat{u}_{-N / 2}\hat{u}_{N / 2} u^−N/2​u^N/2​, 并重新定义离散傅里叶逆变换为: u j 1 2 π ∑ k − N / 2 N / 2 ′ e i k x j u ^ k , j 1 , … , N u_{j}\frac{1}{2 \pi} \sum_{k-N / 2}^{N / 2}{}^{\prime}\mathrm{e}^{\mathrm{i} k x_{j}} \hat{u}_{k}, \quad j1, \ldots, N% \label{4-5} uj​2π1​k−N/2∑N/2​′eikxj​u^k​,j1,…,N 其中, “ Σ ′ \Sigma^{\prime} Σ′ 代表求和时在 k ± N / 2 k \pm N / 2 k±N/2 的项上乘以 1 / 2 1 / 2 1/2 .需要强调的是, 式 % \eqref{4-3} 和式 % \eqref{4-4} 仍然是离散傅里叶变换对的定义, 式 % \eqref{4-5} 仅是用于确定插值函数 p ( x ) p(x) p(x) 的.求 p ( x ) p(x) p(x) 时需要把式 % \eqref{4-5} 中的 x j j h x_{j}j h xj​jh 推广到 [ 0 , 2 π ] [0,2 \pi] [0,2π] 上的任意实数 x x x, 即: p ( x ) 1 2 π ∑ k − N / 2 N / 2 ′ e i k x u ^ k , x ∈ [ 0 , 2 π ] p(x)\frac{1}{2 \pi} \sum_{k-N / 2}^{N / 2} {}^{\prime}\mathrm{e}^{\mathrm{i} k x} \hat{u}_{k}, \quad x \in[0,2 \pi]% \label{4-6} p(x)2π1​k−N/2∑N/2​′eikxu^k​,x∈[0,2π] 确定插值函数的步骤是这样的先用式 % \eqref{4-3} 将序列 u 1 , u 2 , … , u N u_{1}, u_{2}, \ldots, u_{N} u1​,u2​,…,uN​ 变换为 u ^ − N / 2 1 \hat{u}_{-N / 21} u^−N/21​, u ^ − N / 2 2 , … , u ^ N / 2 \hat{u}_{-N / 22}, \ldots, \hat{u}_{N / 2} u^−N/22​,…,u^N/2​, 令 u ^ − N / 2 u ^ N / 2 \hat{u}_{-N / 2}\hat{u}_{N / 2} u^−N/2​u^N/2​, 再根据序列 u ^ − N / 2 , u ^ − N / 2 1 , … , u ^ N / 2 \hat{u}_{-N / 2}, \hat{u}_{-N / 21}, \ldots, \hat{u}_{N / 2} u^−N/2​,u^−N/21​,…,u^N/2​ 通过式 % \eqref{4-6} 得到 p ( x ) p(x) p(x) .这样得到的插值函数 p ( x ) p(x) p(x) 可用来求序列 u 1 , u 2 , … , u N u_{1}, u_{2}, \ldots, u_{N} u1​,u2​,…,uN​ 在 x j x_{j} xj​ 处的各阶导数, 即: ∂ n p ( x ) ∂ x n ∣ x x j \left.\frac{\partial^{n} p(x)}{\partial x^{n}}\right|_{xx_{j}}% \label{4-7} ∂xn∂np(x)​ ​xxj​​ 上面介绍的是通过谱方法计算插值函数 p ( x ) p(x) p(x) 来估算序列 u 1 , u 2 , … , u N u_{1}, u_{2}, \ldots, u_{N} u1​,u2​,…,uN​ 在 x j x_{j} xj​ 处的导数的基本原理.接下来, 为了把上述过程转化为方便的矩阵运算, 采用如下思路: 首先求出周期 δ \delta δ 函数的插值函数 S N ( x ) S_{N}(x) SN​(x), 然后将任意序列 u 1 , u 2 , … , u N u_{1}, u_{2}, \ldots, u_{N} u1​,u2​,…,uN​ 写为周期 δ \delta δ 函数的线性组合, 进而可把它的插值函数 p ( x ) p(x) p(x) 写为 S N ( x ) S_{N}(x) SN​(x) 的线性组合, 最后找到 p ( x ) p(x) p(x) 和 S N ( x ) S_{N}(x) SN​(x) 在 x 1 , x 2 , … , x N x_{1}, x_{2}, \ldots, x_{N} x1​,x2​,…,xN​ 处导数的关系并写为矩阵形式, 给出针对任意序列 u 1 , u 2 , … , u N u_{1}, u_{2}, \ldots, u_{N} u1​,u2​,…,uN​ 的谱求导矩阵. 谱求导矩阵 周期 δ \delta δ 函数定义为: δ j { 1 , ( j % N 0 ) 0 , ( j % N ≠ 0 ) \delta_{j} \begin{cases}1, (j \% N0) \\ 0, (j \% N \neq 0)\end{cases}% \label{4-8} δj​{1,0,​(j%N0)(j%N0)​ 其中, 百分号 “ % \% % ” 代表求余运算, 周期 δ \delta δ 函数在 j m N jm N jmN ( m m m 为任意整数) 时取值为 1 ,其他情况为 0 , 它所对应的横坐标为 x j j h x_{j}j h xj​jh .利用式 % \eqref{4-3} 求周期 δ \delta δ 函数的离散傅里叶变换, 结果为一常数 h h h : δ ^ k h ∑ j 1 N e − i k x j δ j h , k − N 2 1 , … , N 2 \hat{\delta}_{k}h \sum_{j1}^{N} \mathrm{e}^{-\mathrm{i} k x_{j}} \delta_{j}h, \quad k-\frac{N}{2}1, \ldots, \frac{N}{2}% \label{4-9} δ^k​hj1∑N​e−ikxj​δj​h,k−2N​1,…,2N​ 再利用式 % \eqref{4-6} 求周期 δ \delta δ 函数的插值函数: p ( x ) h 2 π ∑ k − N / 2 N / 2 ′ e i k x h 2 π ( 1 2 ∑ k − N / 2 N / 2 − 1 e i k x 1 2 ∑ k − N / 2 1 N / 2 e i k x ) h 2 π ( 1 2 e − i 2 x ∑ k − N / 2 1 / 2 N / 2 − 1 / 2 e i k x 1 2 e i 2 x ∑ k − N / 2 1 / 2 N / 2 − 1 / 2 e i k x ) h 2 π cos ⁡ ( x / 2 ) ∑ k − N / 2 1 / 2 N / 2 − 1 / 2 e i k x h 2 π cos ⁡ ( x / 2 ) e i ( − N / 2 1 / 2 ) x − e i ( N / 2 1 / 2 ) x 1 − e i x h 2 π cos ⁡ ( x / 2 ) e − i ( N / 2 ) x − e i ( N / 2 ) x e − i x / 2 − e i x / 2 h 2 π cos ⁡ ( x / 2 ) sin ⁡ ( N x / 2 ) sin ⁡ ( x / 2 ) \begin{aligned} p(x) \frac{h}{2 \pi} \sum_{k-N / 2}^{N / 2}{}^{\prime} \mathrm{e}^{\mathrm{i} k x} \\ \frac{h}{2 \pi}\left(\frac{1}{2} \sum_{k-N / 2}^{N / 2-1} \mathrm{e}^{\mathrm{i} k x}\frac{1}{2} \sum_{k-N / 21}^{N / 2} \mathrm{e}^{\mathrm{i} k x}\right) \\ \frac{h}{2 \pi}\left(\frac{1}{2} \mathrm{e}^{-\frac{\mathrm{i}}{2} x} \sum_{k-N / 21 / 2}^{N / 2-1 / 2} \mathrm{e}^{\mathrm{i} k x}\frac{1}{2} \mathrm{e}^{\frac{\mathrm{i}}{2} x} \sum_{k-N / 21 / 2}^{N / 2-1 / 2} \mathrm{e}^{\mathrm{i} k x}\right) \\ \frac{h}{2 \pi} \cos (x / 2) \sum_{k-N / 21 / 2}^{N / 2-1 / 2} \mathrm{e}^{\mathrm{i} k x} \\ \frac{h}{2 \pi} \cos (x / 2) \frac{\mathrm{e}^{\mathrm{i}(-N / 21 / 2) x}-\mathrm{e}^{\mathrm{i}(N / 21 / 2) x}}{1-\mathrm{e}^{\mathrm{i} x}} \\ \frac{h}{2 \pi} \cos (x / 2) \frac{\mathrm{e}^{-\mathrm{i}(N / 2) x}-\mathrm{e}^{\mathrm{i}(N / 2) x}}{\mathrm{e}^{-\mathrm{i} x / 2}-\mathrm{e}^{\mathrm{i} x / 2}} \\ \frac{h}{2 \pi} \cos (x / 2) \frac{\sin (N x / 2)}{\sin (x / 2)} \end{aligned}% \label{4-10} p(x)​2πh​k−N/2∑N/2​′eikx2πh​ ​21​k−N/2∑N/2−1​eikx21​k−N/21∑N/2​eikx ​2πh​ ​21​e−2i​xk−N/21/2∑N/2−1/2​eikx21​e2i​xk−N/21/2∑N/2−1/2​eikx ​2πh​cos(x/2)k−N/21/2∑N/2−1/2​eikx2πh​cos(x/2)1−eixei(−N/21/2)x−ei(N/21/2)x​2πh​cos(x/2)e−ix/2−eix/2e−i(N/2)x−ei(N/2)x​2πh​cos(x/2)sin(x/2)sin(Nx/2)​​ 由式 % \eqref{4-2} , 最终得到的周期 δ \delta δ 函数的插值函数为周期 sinc 函数 S N S_{N} SN​ : S N ( x ) sin ⁡ ( π x / h ) ( 2 π / h ) tan ⁡ ( x / 2 ) S_{N}(x)\frac{\sin (\pi x / h)}{(2 \pi / h) \tan (x / 2)}% \label{4-11} SN​(x)(2π/h)tan(x/2)sin(πx/h)​ 可以证明, S N ( x ) ∣ x → 0 1 \left.S_{N}(x)\right|_{x \rightarrow 0}1 SN​(x)∣x→0​1 .下图曲线为周期 sinc ⁡ \operatorname{sinc} sinc 函数, 黑点为周期 δ \delta δ 函数, 上下两图分别对应 N 4 N4 N4 和 N 16 N16 N16 显示了周期 δ \delta δ 函数以及它的插值函数一一周期 sinc 函数 S N ( x ) S_{N}(x) SN​(x), 二者的周期均为 2 π 2 \pi 2π, 无论 N N N 取值为 4 还是 16 , 后者都精确、巧妙地经过了前者的所有离散点. 若将区间 [ 0 , 2 π ] [0,2 \pi] [0,2π] 上的序列 u 1 , u 2 , … , u N u_{1}, u_{2}, \ldots, u_{N} u1​,u2​,…,uN​ 写为周期 δ \delta δ 函数的线性叠加, 即: u j ∑ m 1 N u m δ j − m u_{j}\sum_{m1}^{N} u_{m} \delta_{j-m}% \label{4-12} uj​m1∑N​um​δj−m​ 那么, 将其中的周期 δ \delta δ 函数替换为周期 sinc ⁡ \operatorname{sinc} sinc 函数 S N S_{N} SN​, 就得到序列 u 1 , u 2 , … , u N u_{1}, u_{2}, \ldots, u_{N} u1​,u2​,…,uN​ 的插值函数 p ( x ) p(x) p(x) : p ( x ) ∑ m 1 N u m S N ( x − x m ) p(x)\sum_{m1}^{N} u_{m} S_{N}\left(x-x_{m}\right)% \label{4-13} p(x)m1∑N​um​SN​(x−xm​) 注意到 p ( x ) p(x) p(x) 就是 S N ( x ) S_{N}(x) SN​(x) 的线性组合,如果用 p ( x ) p(x) p(x) 来估算序列 u 1 , u 2 , … , u N u_{1}, u_{2}, \ldots, u_{N} u1​,u2​,…,uN​ 在 x j j h x_{j}j h xj​jh 处的 1 阶导数, 则有: p ′ ( x j ) ∑ m 1 N u m S N ′ ( x j − x m ) p^{\prime}\left(x_{j}\right)\sum_{m1}^{N} u_{m} S_{N}^{\prime}\left(x_{j}-x_{m}\right)% \label{4-14} p′(xj​)m1∑N​um​SN′​(xj​−xm​) 其中, x j − x m ( j − m ) h x_{j}-x_{m}(j-m) h xj​−xm​(j−m)h .将上式写为矩阵形式: ( p ′ ( x 1 ) p ′ ( x 2 ) p ′ ( x 3 ) ⋮ p ′ ( x N ) ) ( S N ′ ( 0 ) S N ′ ( − h ) S N ′ ( − 2 h ) ⋯ S N ′ ( ( 1 − N ) h ) S N ′ ( h ) S N ′ ( 0 ) S N ′ ( − h ) S N ′ ( 2 h ) S N ′ ( h ) S N ′ ( 0 ) ⋮ ⋱ S N ′ ( ( N − 1 ) h ) ) ( u 1 u 2 u 3 ⋮ u N ) \left(\begin{array}{c} p^{\prime}\left(x_{1}\right) \\ p^{\prime}\left(x_{2}\right) \\ p^{\prime}\left(x_{3}\right) \\ \vdots \\ p^{\prime}\left(x_{N}\right) \end{array}\right)\left(\begin{array}{ccccc} S_{N}^{\prime}(0) S_{N}^{\prime}(-h) S_{N}^{\prime}(-2 h) \cdots S_{N}^{\prime}((1-N) h) \\ S_{N}^{\prime}(h) S_{N}^{\prime}(0) S_{N}^{\prime}(-h) \\ S_{N}^{\prime}(2 h) S_{N}^{\prime}(h) S_{N}^{\prime}(0) \\ \vdots \ddots \\ S_{N}^{\prime}((N-1) h) \end{array}\right)\left(\begin{array}{c} u_{1} \\ u_{2} \\ u_{3} \\ \vdots \\ u_{N} \end{array}\right)% \label{4-15} ​p′(x1​)p′(x2​)p′(x3​)⋮p′(xN​)​ ​ ​SN′​(0)SN′​(h)SN′​(2h)⋮SN′​((N−1)h)​SN′​(−h)SN′​(0)SN′​(h)​SN′​(−2h)SN′​(−h)SN′​(0)​⋯⋱​SN′​((1−N)h)​ ​ ​u1​u2​u3​⋮uN​​ ​ 因此, 只需在向量 ( u 1 , u 2 , … , u N ) T \left(u_{1}, u_{2}, \ldots, u_{N}\right)^{\mathrm{T}} (u1​,u2​,…,uN​)T 上乘以一个 N N N 阶方阵即可得到由它的谱方法插值函数 p ( x ) p(x) p(x)的导数组成的向量 ( p ′ ( x 1 ) , p ′ ( x 2 ) , … , p ′ ( x N ) ) T \left(p^{\prime}\left(x_{1}\right), p^{\prime}\left(x_{2}\right), \ldots, p^{\prime}\left(x_{N}\right)\right)^{\mathrm{T}} (p′(x1​),p′(x2​),…,p′(xN​))T, 这个 N N N 阶方阵就是谱求导矩阵 (spectral differentiation matrix).下文用 D N \boldsymbol{D}_{N} DN​ 来表示 1 阶 N × N N \times N N×N 谱求导矩阵, D N ( n ) \boldsymbol{D}_{N}^{(n)} DN(n)​ 表示 n n n 阶 N × N N \times N N×N 谱求导矩阵.周期 sinc ⁡ \operatorname{sinc} sinc 函数 S N ( x ) S_{N}(x) SN​(x) 在 x j j h x_{j}j h xj​jh 处的 1 阶导数为: S N ′ ( x j ) { 0 , ( j % N 0 ) ( − 1 ) j / 2 ⋅ cot ⁡ ( j h / 2 ) , ( j % N ≠ 0 ) S_{N}^{\prime}\left(x_{j}\right)\left\{\begin{array}{cc} 0, (j \% N0) \\ (-1)^{j} / 2 \cdot \cot (j h / 2), (j \% N \neq 0) \end{array}\right.% \label{4-16} SN′​(xj​){0,(−1)j/2⋅cot(jh/2),​(j%N0)(j%N0)​ 将其代入到式 % \eqref{4-15} 中的 N N N 阶方阵, 得到 1 阶谱求导矩阵: D N ( 0 − cot ⁡ ( 1 h / 2 ) 2 − cot ⁡ ( 1 h / 2 ) 2 ⋱ ⋱ cot ⁡ ( 2 h / 2 ) 2 cot ⁡ ( 2 h / 2 ) 2 ⋱ − cot ⁡ ( 3 h / 2 ) 2 − cot ⁡ ( 3 h / 2 ) 2 ⋱ ⋮ ⋮ ⋱ ⋱ cot ⁡ ( 1 h / 2 ) 2 cot ⁡ ( 1 h / 2 ) 2 0 ) \boldsymbol{D}_{N}\left(\begin{array}{ccccc} 0 -\frac{\cot (1 h / 2)}{2} \\ -\frac{\cot (1 h / 2)}{2} \ddots \ddots \frac{\cot (2 h / 2)}{2} \\ \frac{\cot (2 h / 2)}{2} \ddots -\frac{\cot (3 h / 2)}{2} \\ -\frac{\cot (3 h / 2)}{2} \ddots \vdots \\ \vdots \ddots \ddots \frac{\cot (1 h / 2)}{2} \\ \frac{\cot (1 h / 2)}{2} 0 \end{array}\right)% \label{4-17} DN​ ​0−2cot(1h/2)​2cot(2h/2)​−2cot(3h/2)​⋮2cot(1h/2)​​⋱⋱⋱​⋱⋱​⋱−2cot(3h/2)​2cot(1h/2)​​−2cot(1h/2)​2cot(2h/2)​⋮0​ ​ 类似地, 还可以得到高阶谱求导矩阵.周期 sinc ⁡ \operatorname{sinc} sinc 函数 S N ( x ) S_{N}(x) SN​(x) 在 x j j h x_{j}j h xj​jh 处的 2 阶导数为: S N ′ ′ ( x j ) { − π 2 3 h 2 − 1 6 , ( j % N 0 ) − ( − 1 ) j csc ⁡ 2 ( j h / 2 ) 2 , ( j % N ≠ 0 ) S_{N}^{\prime \prime}\left(x_{j}\right)\left\{\begin{array}{cc} -\frac{\pi^{2}}{3 h^{2}}-\frac{1}{6}, (j \% N0) \\ -\frac{(-1)^{j} \csc ^{2}(j h / 2)}{2}, (j \% N \neq 0) \end{array}\right.% \label{4-18} SN′′​(xj​){−3h2π2​−61​,−2(−1)jcsc2(jh/2)​,​(j%N0)(j%N0)​ 那么, 2 阶谱求导矩阵为: D N ( 2 ) ( ⋱ ⋮ ⋱ − 1 2 csc ⁡ 2 ( 2 h 2 ) ⋱ 1 2 csc ⁡ 2 ( 1 h 2 ) − π 2 3 h 2 − 1 6 1 2 csc ⁡ 2 ( 1 h 2 ) ⋱ − 1 2 csc ⁡ 2 ( 2 h 2 ) ⋱ ⋮ ⋱ ) D_{N}^{(2)}\left(\begin{array}{ccc} \ddots \vdots \\ \ddots -\frac{1}{2} \csc ^{2}\left(\frac{2 h}{2}\right) \\ \ddots \frac{1}{2} \csc ^{2}\left(\frac{1 h}{2}\right) \\ -\frac{\pi^{2}}{3 h^{2}}-\frac{1}{6} \\ \frac{1}{2} \csc ^{2}\left(\frac{1 h}{2}\right) \ddots \\ -\frac{1}{2} \csc ^{2}\left(\frac{2 h}{2}\right) \ddots \\ \vdots \ddots \end{array}\right)% \label{4-19} DN(2)​ ​⋱⋱⋱​⋮−21​csc2(22h​)21​csc2(21h​)−3h2π2​−61​21​csc2(21h​)−21​csc2(22h​)⋮​⋱⋱⋱​ ​ 周期 sinc 函数 S N ( x ) S_{N}(x) SN​(x) 在 x j j h x_{j}j h xj​jh 处的 3 阶导数为: S N m ( x j ) { 0 , ( j % N 0 ) ( − 1 ) j cot ⁡ ( j h 2 ) [ 3 4 csc ⁡ 2 ( j h 2 ) − π 2 2 h 2 ] , ( j % N ≠ 0 ) S_{N}^{m}\left(x_{j}\right)\left\{\begin{array}{cc} 0, (j \% N0) \\ (-1)^{j} \cot \left(\frac{j h}{2}\right)\left[\frac{3}{4} \csc ^{2}\left(\frac{j h}{2}\right)-\frac{\pi^{2}}{2 h^{2}}\right], (j \% N \neq 0) \end{array}\right.% \label{4-20} SNm​(xj​){0,(−1)jcot(2jh​)[43​csc2(2jh​)−2h2π2​],​(j%N0)(j%N0)​ 同样得到 3 阶谱求导矩阵: D N ( 3 ) ( 0 − cot ⁡ ( 1 h 2 ) [ 3 4 cos ⁡ 2 ( 1 h 2 ) − π 2 2 h 2 ] − cot ⁡ ( 1 h 2 ) [ 3 4 csc ⁡ 2 ( 1 h 2 ) − π 2 2 h 2 ] ⋱ ⋱ cot ⁡ ( 2 h 2 ) [ 3 4 csc ⁡ 2 ( 2 h 2 ) − π 2 2 h 2 ] cot ⁡ ( 2 h 2 ) [ 3 4 csc ⁡ 2 ( 2 h 2 ) − π 2 2 h 2 ] ⋱ − cot ⁡ ( 3 h 2 ) [ 3 4 csc ⁡ 2 ( 3 h 2 ) − π 2 2 h 2 ] − cot ⁡ ( 3 h 2 ) [ 3 4 csc ⁡ 2 ( 3 h 2 ) − π 2 2 h 2 ] ⋱ ⋮ ⋮ ⋱ ⋱ cot ⁡ ( 1 h 2 ) [ 3 4 csc ⁡ 2 ( 1 h 2 ) − π 2 2 h 2 ] cot ⁡ ( 1 h 2 ) [ 3 4 csc ⁡ 2 ( 1 h 2 ) − π 2 2 h 2 ] 0 ) D_{N}^{(3)}\left.\left(\begin{array}{cccc}0-\cot\left(\frac{1h}2\right)\left[\frac34\cos^2\left(\frac{1h}2\right)-\frac{\pi^2}{2h^2}\right]\\-\cot\left(\frac{1h}2\right)\left[\frac34\csc^2\left(\frac{1h}2\right)-\frac{\pi^2}{2h^2}\right]\ddots\ddots\cot\left(\frac{2h}2\right)\left[\frac34\csc^2\left(\frac{2h}2\right)-\frac{\pi^2}{2h^2}\right]\\\cot\left(\frac{2h}2\right)\left[\frac34\csc^2\left(\frac{2h}2\right)-\frac{\pi^2}{2h^2}\right]\ddots-\cot\left(\frac{3h}2\right)\left[\frac34\csc^2\left(\frac{3h}2\right)-\frac{\pi^2}{2h^2}\right]\\-\cot\left(\frac{3h}2\right)\left[\frac34\csc^2\left(\frac{3h}2\right)-\frac{\pi^2}{2h^2}\right]\ddots\vdots\\\vdots\ddots\ddots\cot\left(\frac{1h}2\right)\left[\frac34\csc^2\left(\frac{1h}2\right)-\frac{\pi^2}{2h^2}\right]\\\cot\left(\frac{1h}2\right)\left[\frac34\csc^2\left(\frac{1h}2\right)-\frac{\pi^2}{2h^2}\right]0\end{array}\right.\right)% \label{4-21} DN(3)​ ​0−cot(21h​)[43​csc2(21h​)−2h2π2​]cot(22h​)[43​csc2(22h​)−2h2π2​]−cot(23h​)[43​csc2(23h​)−2h2π2​]⋮cot(21h​)[43​csc2(21h​)−2h2π2​]​⋱⋱⋱​⋱⋱⋱​−cot(21h​)[43​cos2(21h​)−2h2π2​]cot(22h​)[43​csc2(22h​)−2h2π2​]−cot(23h​)[43​csc2(23h​)−2h2π2​]⋮cot(21h​)[43​csc2(21h​)−2h2π2​]0​ ​ 构造 n n n 阶谱求导矩阵 D N ( n ) \boldsymbol{D}_{N}^{(n)} DN(n)​ 的一般方法为: (1) 求周期 sinc 函数 $S_{N}(x)$ 在 $x_{j}j h$ 处的 $n$ 阶导数 $S_{N}^{(n)}\left(x_{j}\right)$ .(2) $\boldsymbol{D}_{N}^{(n)}$ 的第 1 列为 $\left(S_{N}^{(n)}\left(x_{N}\right), S_{N}^{(n)}\left(x_{1}\right), S_{N}^{(n)}\left(x_{2}\right), \ldots, S_{N}^{(n)}\left(x_{N-1}\right)\right)^{\mathrm{T}}$, 第 2 列为 $\left(S_{N}^{(n)}\left(x_{N-1}\right)\right.$, $\left.S_{N}^{(n)}\left(x_{N}\right), S_{N}^{(n)}\left(x_{1}\right), \ldots, S_{N}^{(n)}\left(x_{N-2}\right)\right)^{\mathrm{T}}$, 第 3 列为 $\left(S_{N}^{(n)}\left(x_{N-2}\right), S_{N}^{(n)}\left(x_{N-1}\right), S_{N}^{(n)}\left(x_{N}\right), \ldots, S_{N}^{(n)}\left(x_{N-3}\right)\right)^{\mathrm{T}} \cdots \cdots$依此类推.此外, 周期函数 S N ( n ) ( x ) S_{N}^{(n)}(x) SN(n)​(x) 的奇偶性是由 n n n 的奇偶决定的, 这在构造 D N ( n ) \boldsymbol{D}_{N}^{(n)} DN(n)​ 时可以产生一些便利: ∂ n S N ( x ) ∂ x n ∣ x x j ( − 1 ) n ∂ n S N ( x ) ∂ x n ∣ x x N − j \left.\frac{\partial^{n} S_{N}(x)}{\partial x^{n}}\right|_{xx_{j}}\left.(-1)^{n} \frac{\partial^{n} S_{N}(x)}{\partial x^{n}}\right|_{xx_{N-j}}% \label{4-22} ∂xn∂nSN​(x)​ ​xxj​​(−1)n∂xn∂nSN​(x)​ ​xxN−j​​ 当 n n n 为奇数时, 必有: ∂ n S N ( x ) ∂ x n ∣ x x j 0 , j % N 0 \left.\frac{\partial^{n} S_{N}(x)}{\partial x^{n}}\right|_{xx_{j}}0, \quad j \% N0% \label{4-23} ∂xn∂nSN​(x)​ ​xxj​​0,j%N0 当 n n n 为偶数时, S N ( n ) ( x ) S_{N}^{(n)}(x) SN(n)​(x) 在 x x j xx_{j} xxj​ 处 ( j % N 0 ) (j \% N0) (j%N0) 的取值是无穷小/无穷小的形式, 需要用洛必达法则求它的极限, 即: ∂ n S N ( x ) ∂ x n ∣ x x j lim ⁡ x → 0 ∂ n S N ( x ) ∂ x n , j % N 0 \left.\frac{\partial^{n} S_{N}(x)}{\partial x^{n}}\right|_{xx_{j}}\lim _{x \rightarrow 0} \frac{\partial^{n} S_{N}(x)}{\partial x^{n}}, \quad j \% N0% \label{4-24} ∂xn∂nSN​(x)​ ​xxj​​x→0lim​∂xn∂nSN​(x)​,j%N0 人工计算 S N ( x ) S_{N}(x) SN​(x) 的 n n n 阶导数的工作量随着阶数 n n n 的增大而显著增加, 比较省时省力的方法是利用 Matlab 的符号运算功能, 调用 diff 函数和 limit 函数求导、求极限, 并结合 toeplitz 函数, 可实现程序自动生成 D N ( n ) \boldsymbol{D}_{N}^{(n)} DN(n)​, 有兴趣的读者可以自行尝试. 由于谱求导矩阵 D N ( n ) \boldsymbol{D}_{N}^{(n)} DN(n)​ 是在计算区间长度为 2 π 2 \pi 2π 的前提下构造的, 所以若实际的计算区间长度为 L L L, 则必须在 D N ( n ) \boldsymbol{D}_{N}^{(n)} DN(n)​ 上乘以缩放系数才可保证结果正确, 即: ( 2 π / L ) n D N ( n ) (2 \pi / L)^{n} \boldsymbol{D}_{N}^{(n)} (2π/L)nDN(n)​ . 下面给出使用谱求导矩阵 D N 、 D N ( 2 ) 、 D N ( 3 ) \boldsymbol{D}_{N} 、 \boldsymbol{D}_{N}^{(2)} 、 \boldsymbol{D}_{N}^{(3)} DN​、DN(2)​、DN(3)​ 对 u ( x ) e sin ⁡ ( π x ) u(x)\mathrm{e}^{\sin (\pi x)} u(x)esin(πx) 求 1 、 2 、 3 1 、 2 、 3 1、2、3 阶导数, 并与精确解 u ′ ( x ) π cos ⁡ ( π x ) e sin ⁡ ( π x ) u^{\prime}(x)\pi \cos (\pi x) \mathrm{e}^{\sin (\pi x)} u′(x)πcos(πx)esin(πx) $u^{\prime \prime}(x)\pi^{2} \mathrm{e}^{\sin (\pi x)}\left[\cos ^{2}(\pi x)-\sin (\pi x)\right] $ $ u^{\prime \prime \prime}(x)\pi^{3} \mathrm{e}^{\sin (\pi x)} \cos (\pi x)\left[\cos ^{2}(\pi x)-3 \sin (\pi x)-1\right]$ 比较的实例.代码如下: clear all; close all; L2; N32; xL/N*[-N/2:N/2-1]; %构造谱求导矩阵 h2*pi/N; column[0 0.5*(-1).^(1:N-1).*cot((1:N-1)*h/2)]; D(2*pi/L)*toeplitz(column,column([1 N:-1:2])); column[-pi^2/(3*h^2)-1/6 -0.5*(-1).^(1:N-1)./sin(h*(1:N-1)/2).^2]; D2(2*pi/L)^2*toeplitz(column); column[0 (-1).^(1:N-1).*cot((1:N-1)*h/2).*( ...-pi^2/(2*h^2)3/4*csc((1:N-1)*h/2).^2)]; D3(2*pi/L)^3*toeplitz(column,column([1 N:-1:2])); %导数的精确解 uexp(sin(pi*x)); du_exact(:,1)pi*cos(pi*x).*u; du_exact(:,2)pi^2*(cos(pi*x).^2-sin(pi*x)).*u; du_exact(:,3)pi^3*cos(pi*x).*(cos(pi*x).^2-3*sin(pi*x)-1).*u; %谱方法求导 du_Fourier(:,1)D*u; du_Fourier(:,2)D2*u; du_Fourier(:,3)D3*u; errormax(abs(du_exact-du_Fourier)); %画图 labels{u(x),u(x),u(x)}; for n1:4subplot(2,2,n)if n1plot(x,u,k,LineWidth,1.5)xlabel x, ylabel u(x), title(u(x)e^{sin(\pix)})elseplot(x,du_exact(:,n-1),k,x,du_Fourier(:,n-1),.r ...,MarkerSize,13,LineWidth,1.5)title([Error_{max} num2str(error(n-1))])xlabel x, ylabel(labels(n-1))end end如下图用谱求导矩阵计算 u ( x ) e sin ⁡ ( π x ) u(x)\mathrm{e}^{\sin (\pi x)} u(x)esin(πx) 的 1 、 2 、 3 1 、 2 、 3 1、2、3 阶导数点并与精确解曲线比较所示, 曲线为精确的 u ( x ) 、 u ′ ( x ) 、 u ′ ′ ( x ) u(x) 、 u^{\prime}(x) 、 u^{\prime \prime}(x) u(x)、u′(x)、u′′(x) 和 u ′ ′ ′ ( x ) u^{\prime \prime \prime}(x) u′′′(x), 点为利用谱求导矩阵计算得到的 u ′ ( x j ) 、 u ′ ′ ( x j ) u^{\prime}\left(x_{j}\right) 、 u^{\prime \prime}\left(x_{j}\right) u′(xj​)、u′′(xj​) 和 u ′ ′ ′ ( x j ) u^{\prime \prime \prime}\left(x_{j}\right) u′′′(xj​) .在 N N N 的取值仅为 32 的情况下, 用谱求导矩阵计算 u ( x ) e sin ⁡ ( π x ) u(x)\mathrm{e}^{\sin (\pi x)} u(x)esin(πx) 的 1 、 2 、 3 1 、 2 、 3 1、2、3 阶导数与精确解的最大误差分别在 1 0 − 14 、 1 0 − 12 、 1 0 − 10 10^{-14} 、 10^{-12} 、 10^{-10} 10−14、10−12、10−10数量级. 用谱求导矩阵求解偏微分方程的步骤 与之前一样, 待求解的偏微分方程的普遍形式为: ∂ n u ∂ t n L u N ( u ) \frac{\partial^{n} u}{\partial t^{n}}L uN(u)% \label{4-25} ∂tn∂nu​LuN(u) 其中, u ( x , t ) u(x, t) u(x,t) 为 x 、 t x 、 t x、t 的函数, L L L 代表线性算符, N ( u ) N(u) N(u) 为非线性项.通过函数代换可将等号左边的 n n n 阶导数 ∂ n / ∂ t n \partial^{n} / \partial t^{n} ∂n/∂tn 降到 1 阶, 所以下面分析式 % \eqref{4-26} 的求解过程, 这与式 % \eqref{4-25} 降阶后得到的方程组的解法是一样的. ∂ u ∂ t L u N ( u ) \frac{\partial u}{\partial t}L uN(u)% \label{4-26} ∂t∂u​LuN(u) 用谱求导矩阵数值求解式 % \eqref{4-26} 的步骤如下: (1) 在 x x x 轴上的计算区间内, 将 x x x 离散化为 N N N 个等间距的位置 x ( x 1 , x 2 , … , x N ) T \boldsymbol{x}\left(x_{1}, x_{2}, \ldots, x_{N}\right)^{\mathrm{T}} x(x1​,x2​,…,xN​)T, 相应地, 将函数 u u u 离散化为 N N N 维向量 u ( u 1 , u 2 , … , u N ) T \boldsymbol{u}\left(u_{1}, u_{2}, \ldots, u_{N}\right)^{\mathrm{T}} u(u1​,u2​,…,uN​)T . (2) 在等号右边,将线性算符 L L L 和非线性项 N ( u ) N(u) N(u) 里所有对函数 u u u 的求导运算替换为谱求导矩阵与向量 u \boldsymbol{u} u 的乘运算, 即: ∂ n u / ∂ x n → D N ( n ) u \partial^{n} u / \partial x^{n} \rightarrow \boldsymbol{D}_{N}^{(n)} \boldsymbol{u} ∂nu/∂xn→DN(n)​u, 并将 L L L 和 N ( u ) N(u) N(u) 都写成矩阵形式, 得到形如式 % \eqref{4-27} 的微分方程组.注意, 若计算区间长度不是 2 π 2 \pi 2π, 则必须在 D N ( n ) \boldsymbol{D}_{N}^{(n)} DN(n)​ 上乘以缩放系数. (3) 用时间步进法欧拉法、龙格-库塔法等数值计算式 % \eqref{4-27} 等号左边的 ∂ / ∂ t \partial / \partial t ∂/∂t,在周期性边界条件下,得到不同 t t t 处的向量 u \boldsymbol{u} u . ∂ ∂ t ( u 1 u 2 u 3 ⋮ u N ) ( L 11 L 12 L 13 ⋯ L 1 N L 21 L 22 L 23 ⋯ L 2 N L 31 L 32 L 33 ⋯ L 3 N ⋮ ⋮ ⋮ ⋱ ⋮ L N 1 L N 2 L N 3 ⋯ L N N ) ( u 1 u 2 u 3 ⋮ u N ) N [ ( u 1 u 2 u 3 ⋮ u N ) ] \frac{\partial}{\partial t}\left(\begin{array}{c} u_{1} \\ u_{2} \\ u_{3} \\ \vdots \\ u_{N} \end{array}\right)\left(\begin{array}{ccccc} L_{11} L_{12} L_{13} \cdots L_{1 N} \\ L_{21} L_{22} L_{23} \cdots L_{2 N} \\ L_{31} L_{32} L_{33} \cdots L_{3 N} \\ \vdots \vdots \vdots \ddots \vdots \\ L_{N 1} L_{N 2} L_{N 3} \cdots L_{N N} \end{array}\right)\left(\begin{array}{c} u_{1} \\ u_{2} \\ u_{3} \\ \vdots \\ u_{N} \end{array}\right)N\left[\left(\begin{array}{c} u_{1} \\ u_{2} \\ u_{3} \\ \vdots \\ u_{N} \end{array}\right)\right]% \label{4-27} ∂t∂​ ​u1​u2​u3​⋮uN​​ ​ ​L11​L21​L31​⋮LN1​​L12​L22​L32​⋮LN2​​L13​L23​L33​⋮LN3​​⋯⋯⋯⋱⋯​L1N​L2N​L3N​⋮LNN​​ ​ ​u1​u2​u3​⋮uN​​ ​N ​ ​u1​u2​u3​⋮uN​​ ​ ​ 针对步骤 2 , 这里以 L a ⋅ ∂ 2 / ∂ x 2 b ⋅ ∂ / ∂ x c 、 N ( u ) u 3 u 3 ⋅ ∂ 2 u / ∂ x 2 f ( x ) ⋅ ∂ u / ∂ x La \cdot \partial^{2} / \partial x^{2}b \cdot \partial / \partial xc 、 N(u)u^{3}u^{3} \cdot \partial^{2} u / \partial x^{2}f(x) \cdot \partial u / \partial x La⋅∂2/∂x2b⋅∂/∂xc、N(u)u3u3⋅∂2u/∂x2f(x)⋅∂u/∂x 为例进行说明, a 、 b a 、 b a、b 和 c c c 分别为常数.对线性算符 L L L, 除了将 ∂ n / ∂ x n \partial^{n} / \partial x^{n} ∂n/∂xn 替换为 D N ( n ) \boldsymbol{D}_{N}^{(n)} DN(n)​ 之外,还必须在线性算符的常数 c c c 上乘以 N N N 阶单位矩阵 I N \boldsymbol{I}_{N} IN​, 得到 N N N 阶方阵 L \boldsymbol{L} L, 即: L a D N ( 2 ) b D N c I N \boldsymbol{L}a \boldsymbol{D}_{N}^{(2)}b \boldsymbol{D}_{N}c \boldsymbol{I}_{N} LaDN(2)​bDN​cIN​ .注意: Matlab 对矩阵与常数之间的加法是有特殊定义的, 如果忘记在 c c c 上乘以 I N \boldsymbol{I}_{N} IN​ 会导致错误, 因为线性算符矩阵 L \boldsymbol{L} L 与向量 u \boldsymbol{u} u 相乘 L u ( a D N ( 2 ) b D N c I N ) u a D N ( 2 ) u b D N u c u ≠ ( a D N ( 2 ) b D N c ) u \boldsymbol{L} \boldsymbol{u}\left(a \boldsymbol{D}_{N}^{(2)}b \boldsymbol{D}_{N}c \boldsymbol{I}_{N}\right) \boldsymbol{u}a \boldsymbol{D}_{N}^{(2)} \boldsymbol{u}b \boldsymbol{D}_{N} \boldsymbol{u}c \boldsymbol{u} \neq\left(a \boldsymbol{D}_{N}^{(2)}b \boldsymbol{D}_{N}c\right) \boldsymbol{u} Lu(aDN(2)​bDN​cIN​)uaDN(2)​ubDN​ucu(aDN(2)​bDN​c)u .对非线性项 N ( u ) N(u) N(u), 替换 ∂ n ∂ x n \partial^{n} \partial x^{n} ∂n∂xn 为 D N ( n ) \boldsymbol{D}_{N}^{(n)} DN(n)​ 时, D N ( n ) \boldsymbol{D}_{N}^{(n)} DN(n)​ 与向量 u \boldsymbol{u} u 之间的乘法是矩阵乘法, 在 Matlab 中用 *表示.而 u 3 u^{3} u3 应理解为向量 u \boldsymbol{u} u 中的每个元素的立方, 这在 Matlab 中用 . ^3 表示.类似地, f ( x ) ⋅ ( D N u ) f(\boldsymbol{x}) \cdot\left(\boldsymbol{D}_{N} \boldsymbol{u}\right) f(x)⋅(DN​u) 也应处理为 f ( x ) f(\boldsymbol{x}) f(x) 和向量 D N u \boldsymbol{D}_{N} \boldsymbol{u} DN​u 中的每个对应元素的相乘, 在 Matlab 中用 .*表示.所以此时 L u N ( u ) L uN(u) LuN(u) 在 Matlab 中应写为: (a*D2b*D1c*I)*uu.^3u.^3.*(D2*u)f.*(D1*u)换句话说, 只有谱求导矩阵 D N ( n ) \boldsymbol{D}_{N}^{(n)} DN(n)​ 与向量 u \boldsymbol{u} u 之间的乘法是矩阵运算, 其余的运算均是在矩阵或向量的元素之间进行的.但也有一个例外,由于线性算符 L L L 中的常数 c c c 在矩阵化时乘了单位矩阵 I N \boldsymbol{I}_{N} IN​, 所以实际上 c I N c \boldsymbol{I}_{N} cIN​ 与向量 u \boldsymbol{u} u 之间也是矩阵乘法, 这样才能将其与线性算符 L L L 中的其他项相加: L a D N ( 2 ) b D N c I N \boldsymbol{L}a \boldsymbol{D}_{N}^{(2)}b \boldsymbol{D}_{N}c \boldsymbol{I}_{N} LaDN(2)​bDN​cIN​ . 若方程式 % \eqref{4-26} 再增加一个维度, 等号右边包含了 u ( x , y , t ) u(x, y, t) u(x,y,t) 的 ∂ n / ∂ x n \partial^{n} / \partial x^{n} ∂n/∂xn 和 ∂ n / ∂ y n \partial^{n} / \partial y^{n} ∂n/∂yn, 那么求解步骤中的一些细节就需要推广到二维空间上.在 x x x 轴、 y y y 轴上的计算区间内分别取等间距的 N N N 个位置 x ( x 1 , x 2 , … , x N ) T \boldsymbol{x}\left(x_{1}, x_{2}, \ldots, x_{N}\right)^{\mathrm{T}} x(x1​,x2​,…,xN​)T 以及 y ( y 1 , y 2 , … , y N ) T \boldsymbol{y}\left(y_{1}, y_{2}, \ldots, y_{N}\right)^{\mathrm{T}} y(y1​,y2​,…,yN​)T, 于是在 x − y x-y x−y 平面上的计算区域内就得到了 N 2 N^{2} N2 个位置的坐标 ( x 1 , y 1 ) , ( x 1 , y 2 ) , … , ( x 1 , y N ) , ( x 2 , y 1 ) , … , ( x 2 , y N ) , … , ( x N , y N ) \left(x_{1}, y_{1}\right),\left(x_{1}, y_{2}\right), \ldots,\left(x_{1}, y_{N}\right),\left(x_{2}, y_{1}\right), \ldots,\left(x_{2}, y_{N}\right), \ldots,\left(x_{N}, y_{N}\right) (x1​,y1​),(x1​,y2​),…,(x1​,yN​),(x2​,y1​),…,(x2​,yN​),…,(xN​,yN​) .相应地, 函数 u u u 可以被离散化为 N N N 阶方阵第一种形式或 N 2 N^{2} N2 维列向量第二种形式, 如式 % \eqref{4-28} 、式 % \eqref{4-29} 所示: u N × N ( u 11 u 12 ⋯ u 1 N u 21 u 22 ⋯ u 2 N ⋮ ⋮ ⋱ ⋮ u N 1 u N 2 ⋯ u N N ) \begin{aligned} \boldsymbol{u}_{N \times N}\left(\begin{array}{cccc} u_{11} u_{12} \cdots u_{1 N} \\ u_{21} u_{22} \cdots u_{2 N} \\ \vdots \vdots \ddots \vdots \\ u_{N 1} u_{N 2} \cdots u_{N N} \end{array}\right) \end{aligned}% \label{4-28} ​uN×N​ ​u11​u21​⋮uN1​​u12​u22​⋮uN2​​⋯⋯⋱⋯​u1N​u2N​⋮uNN​​ ​​ u N 2 × l ( u 11 , u 21 , … , u N 1 , u 12 , u 22 , … , u N 2 , … , u N N ) T \boldsymbol{u}_{N^2\times\mathbf{l}}\begin{pmatrix}u_{11},u_{21},\ldots,u_{N1},u_{12},u_{22},\ldots,u_{N2},\ldots,u_{NN}\end{pmatrix}^\mathrm{T}% \label{4-29} uN2×l​(u11​,​u21​,​…,​uN1​,​u12​,​u22​,​…,​uN2​,​…,​uNN​​)T 式 % \eqref{4-28} 中, 第 i i i 行 j j j 列的元素 u i j u_{i j} uij​ 对应的坐标是 ( x j , y i ) \left(x_{j}, y_{i}\right) (xj​,yi​) .列向量 % \eqref{4-29} 的第 1 到第 N N N个元素对应于式 % \eqref{4-28} 的第 1 列, 第 N 1 N1 N1 到第 2 N 2 N 2N 个元素对应于式 % \eqref{4-28} 的第 2 列……依此类推. 另外, 可以通过 Matlab 中的 reshape 函数在二者间进行转换. 收敛阶说明 收敛阶定义 o r d e r { log ⁡ 2 [ E ( τ ) / E ( τ / 2 ) ] , in time  log ⁡ 2 [ E ( N ) / E ( 2 N ) ] , in space.  order \left\{\begin{array}{c}\log _2[E(\tau) / E(\tau / 2)], \text { in time } \\ \log _2[E(N) / E(2 N)], \text { in space. }\end{array}\right. order{log2​[E(τ)/E(τ/2)], in time log2​[E(N)/E(2N)], in space. ​ 时间方向空间方向斜率含义斜率含义 k log ⁡ 2 E ( τ ) − log ⁡ 2 E ( τ 2 ) log ⁡ 2 τ − log ⁡ 2 τ 2 log ⁡ 2 E ( τ ) E ( τ 2 ) log ⁡ 2 τ τ 2 log ⁡ 2 E ( τ ) E ( τ 2 ) order  \begin{aligned} k \frac{\log _2 E(\tau)-\log _2 E\left(\frac{\tau}{2}\right)}{\log _2 \tau-\log _2 \frac{\tau}{2}} \\ \frac{\log _2 \frac{E(\tau)}{E\left(\frac{\tau}{2}\right)}}{\log _2 \frac{\tau}{\frac{\tau}{2}}} \\ \log _2 \frac{E(\tau)}{E\left(\frac{\tau}{2}\right)} \\ \text { order }\end{aligned} k​log2​τ−log2​2τ​log2​E(τ)−log2​E(2τ​)​log2​2τ​τ​log2​E(2τ​)E(τ)​​log2​E(2τ​)E(τ)​ order ​ k log ⁡ 2 E ( N ) − log ⁡ 2 E ( 2 N ) N − 2 N − 1 N log ⁡ 2 E ( N ) E ( 2 N ) − 1 N order  \begin{aligned} k \frac{\log _2 E(N)-\log _2 E\left(2N\right)}{N-2 N} \\ -\frac{1}{N} \log _2 \frac{E(N)}{E\left(2N\right)} \\ -\frac{1}{N} \text { order } \end{aligned} k​N−2Nlog2​E(N)−log2​E(2N)​−N1​log2​E(2N)E(N)​−N1​ order ​时间步长 τ \tau τ与误差 E ( τ ) E(\tau) E(τ)的关系空间剖分 N N N与误差 E ( N ) E(N) E(N)的关系 log ⁡ 2 E ( τ ) k log ⁡ 2 τ b log ⁡ 2 E ( τ ) log ⁡ 2 τ k log ⁡ 2 2 b log ⁡ 2 E ( τ ) log ⁡ 2 2 b τ k E ( τ ) 2 b τ k \begin{aligned} \log _2 E(\tau) k\log _2\tau b \\ \log _2 E(\tau) \log _2\tau^k \log _22^b\\\log _2 E(\tau) \log _22^b\tau^k\\E(\tau)2^b\tau^k\end{aligned} log2​E(τ)log2​E(τ)log2​E(τ)E(τ)​klog2​τblog2​τklog2​2blog2​2bτk2bτk​ log ⁡ 2 E ( N ) k N b log ⁡ 2 E ( N ) log ⁡ 2 2 k N b E ( N ) 2 k N b E ( N ) 2 b 2 k N \begin{aligned} \log _2 E(N) kN b \\ \log _2 E(N) \log _2 2^{kN b}\\E(N)2^{kN b}\\E(N)2^b2^{kN}\end{aligned} log2​E(N)log2​E(N)E(N)E(N)​kNblog2​2kNb2kNb2b2kN​
http://www.zqtcl.cn/news/829056/

相关文章:

  • 做零售网站智慧建筑信息平台
  • 山西住房建设厅官方网站建设部建造师网站
  • 加大门户网站安全制度建设wordpress切换数据库
  • 百度代理服务器株洲seo优化
  • 即刻搜索网站提交入口网站中的打赏怎么做的
  • 电子商务网站建设课后作业开发公司管理制度
  • mysql同一数据库放多少个网站表优化大师windows
  • 微信小程序插件开发seo的网站建设
  • 婚纱摄影网站建设方案WordPress 同步网易博客
  • 上海长宁网站建设公司python语言基础
  • 官方网站怎样做餐饮业手机php网站
  • 网站建设企业有哪些内容十九届六中全会
  • 如何管理手机网站首页怎么建设一个社交网站
  • 网站规则山东网站备案网站
  • 成都网站制作龙兵科技做网站原型图用什么软件
  • 鄂州网站网站建设做网站 用哪种
  • 医药公司网站建设厦门网站建设合同
  • 网站开发全程设计注册公司哪个网站
  • 广州大型网站设计公司网站总体设计怎么写
  • 福州网站制作工具搜索引擎营销的特点是什么
  • 安徽省建设干部网站新品网络推广
  • 做网站要实名吗怎样给一个公司做网站
  • 品牌官方网站建设大航母网站建设
  • 自己做音乐网站挣钱吗网站定制公司kinglink
  • 网站建设案例新闻随州程力网站建设
  • 国外网站平台龙岩天宫山缆车收费
  • 站长工具seo综合查询是什么湖北做网站
  • 青海网站建设价格建一个免费网站的流程
  • 网站备案中 解析地址asp.net企业网站框架
  • flash里鼠标可以跟随到网站上就不能跟随了蚌埠网站建设