我是靠谱客的博主 高大指甲油,最近开发中收集的这篇文章主要介绍Matlab傅里叶谱方法求解二维波动方程傅里叶谱方法求解基本偏微分方程—二维波动方程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

傅里叶谱方法求解基本偏微分方程—二维波动方程

二维波动方程

将一维波动方程中的一维无界弦自由振动方程推广到二维空间上, 就得到了描述无界 ( − ∞ < x , y < ∞ ) (-infty<x, y<infty) (<x,y<) 弹性薄膜的波动方程:
∂ 2 u ∂ t 2 = a 2 ( ∂ 2 ∂ x 2 + ∂ 2 ∂ y 2 ) u (1) frac{partial^2 u}{partial t^2}=a^2left(frac{partial^2}{partial x^2}+frac{partial^2}{partial y^2}right) u tag{1} t22u=a2(x22+y22)u(1)
a = 1 a=1 a=1, 初始条件为:
u ∣ t = 0 = e − 20 [ ( x − 0.4 ) 2 + ( y + 0.4 ) 2 ] + e − 20 [ ( x + 0.4 ) 2 + ( y − 0.4 ) 2 ] , ∂ u ∂ t ∣ t = 0 = 0 (2) left.uright|_{t=0}=mathrm{e}^{-20left[(x-0.4)^2+(y+0.4)^2right]}+mathrm{e}^{-20left[(x+0.4)^2+(y-0.4)^2right]},left.quad frac{partial u}{partial t}right|_{t=0}=0 tag{2} ut=0=e20[(x0.4)2+(y+0.4)2]+e20[(x+0.4)2+(y0.4)2],tu t=0=0(2)
可以这样理解上述初始条件的物理意义: 两手抓住弹性薄膜的两个位置, 分别提起, 使薄膜上形成两个峰, 在 t = 0 t=0 t=0 时刻突然松手。根据生活常识可以预料到, 这两个位置的薄 膜将来回振动, 与此同时, 产生的波向四周传播, 而且波与波会在相遇处叠加。
为便于求解, 引入函数 v v v 对式 ( 1 ) (1) (1) 进行降阶, 得:
{ ∂ u ∂ t = v ∂ v ∂ t = a 2 ( ∂ 2 ∂ x 2 + ∂ 2 ∂ y 2 ) u (3) left{begin{array}{l} frac{partial u}{partial t}=v \ frac{partial v}{partial t}=a^2left(frac{partial^2}{partial x^2}+frac{partial^2}{partial y^2}right) u end{array}right. tag{3} {tu=vtv=a2(x22+y22)u(3)

对上式等号两边做傅里叶变换, 得到常微分方程组:
{ ∂ u ~ ^ ∂ t = v ^ ^ ∂ v ^ ^ ∂ t = − a 2 ( k x 2 + k y 2 ) u ^ ^ (4) left{begin{array}{l} frac{partial hat{tilde{u}}}{partial t}=hat{hat{v}} \ frac{partial hat{hat{v}}}{partial t}=-a^2left(k_x^2+k_y^2right) hat{hat{u}} end{array}right. tag{4} {tu~^=v^^tv^^=a2(kx2+ky2)u^^(4)
接下来用 ode45 求解即可, 代码如下:

主程序代码如下:

clear all; close all;

L=4;N=64;
x=L/N*[-N/2:N/2-1];y=x;
kx=(2*pi/L)*[0:N/2-1 -N/2:-1];ky=kx;
[X,Y]=meshgrid(x,y);
[kX,kY]=meshgrid(kx,ky);
K2=kX.^2+kY.^2;
% 初始条件
u=exp(-20*((X-0.4).^2+(Y+0.4).^2))+exp(-20*((X+0.4).^2+(Y-0.4).^2));
ut=fft2(u);vt=zeros(N);uvt=[ut(:); vt(:)];
% 求解
a=1;t=[0 0.25 0.5 1];
[t,uvtsol]=ode45('wave2D',t,uvt,[],N,K2(:),a);
% 画图
for n=1:4
    subplot(2,2,n)
    mesh(x,y,ifft2(reshape(uvtsol(n,1:N^2),N,N))),view(10,45)
    title(['t=' num2str(t(n))]),axis([-L/2 L/2 -L/2 L/2 0 1])
    xlabel x,ylabel y,xlabel x,zlabel u
end

文件 wave1D.m 代码如下:

function duvt=wave2D(t,uvt,dummy,N,K2,a)
ut=uvt(1:N^2);vt=uvt(N^2+[1:N^2]);
duvt=[vt;-a^2*K2.*ut];
end

程序输出结果如图所示, 它反映了弹性薄膜上的波向四周传播的过程。

二维波动方程的数值解

最后

以上就是高大指甲油为你收集整理的Matlab傅里叶谱方法求解二维波动方程傅里叶谱方法求解基本偏微分方程—二维波动方程的全部内容,希望文章能够帮你解决Matlab傅里叶谱方法求解二维波动方程傅里叶谱方法求解基本偏微分方程—二维波动方程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部