一维波动方程数值解 Matlab 教程(从入门到出图) | 您所在的位置:网站首页 › 解包教程 › 一维波动方程数值解 Matlab 教程(从入门到出图) |
最近在计算波动方程数值解时,发现网上很难找到比较详细实用的Matlab教程,所以我打算自己写一个,以一维弦的波动为例,从理论推导到代码实现,跟大家分享一下。 杜帅:一维波动方程数值解 Matlab 教程(从入门到出图)——1波动方程基本概念杜帅:一维波动方程数值解 Matlab 教程(从入门到出图)——2差分方程基本概念杜帅:一维波动方程数值解 Matlab 教程(从入门到出图)——3数值计算的Matlab实现前两篇已经讲了一维波动方程以及差分方法数值计算的基本知识,最后我们来看看如何用Matlab实现二阶偏微分方程的数值计算[1]: 一、一维波动方程的差分形式微分方程
我们将自变量 x 和 t 离散化,分别均分为 根据二阶差商的写法,改写为差分形式
整理得
这样等号右边都是关于时间 而对于位置 边界条件的差分形式 位移边界条件 即 应力边界条件 差分形式 即 1、参数离散化 c = 1; % 波速 xmin = 0; xmax = 10; Nx = 1000; % 空间离散化 tmin = 0; tmax = 15; Nt = 2000; % 时间离散化 x = linspace(xmin, xmax, Nx)'; t = linspace(tmin, tmax, Nt); hx = (xmax - xmin)/(Nx - 1); ht = (tmax - tmin)/(Nt - 1);2、初始条件 我们设置初始位移 和初始速度均为零。 u = zeros(Nx, Nt);3、循环计算 只需要从 j=2 开始循环时间,带入初始条件,计算下一时刻所有位置的位移。 其中二次差分可以利用Matlab的向量运算,避免再套循环。由于二次差分后少了两个元素,我们在两端补零即可,因为后边边界条件还会对两端进行修正,所以没有影响。 for j = 2:Nt-1 un = u(:,j); ddu = [0; un(1:end-2) - 2*un(2:end-1) + un(3:end); 0]; u(:,j+1) =(c*ht/hx)^2 * ddu+ 2*u(:,j) - u(:,j-1); u(1, j+1) = 0;%左端位移边界条件 %右端应力边界条件 if t(j) |
CopyRight 2018-2019 实验室设备网 版权所有 |