利用中心差分格式求解一阶波动方程(附Matlab代码)

这篇具有很好参考价值的文章主要介绍了利用中心差分格式求解一阶波动方程(附Matlab代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

利用中心差分格式求解一阶波动方程(附Matlab代码)

∂ 2 u ∂ t 2 − ∂ 2 u ∂ x 2 = 0 , 0 < x < 1 , t > 0 , \frac{\partial^2u}{\partial t^2}-\frac{\partial^2u}{\partial x^2}=0,0<x<1,t>0, t22ux22u=0,0<x<1,t>0,
初始边值条件为:
u ( 0 , x ) = 2 s i n ( π x ) , u\left(0,x\right)=2sin\left(\pi x\right), u(0,x)=2sin(πx),
u t ( 0 , x ) = 0 , 0 < x < 1 , u_t\left(0,x\right)=0,0<x<1, ut(0,x)=0,0<x<1,
u ( t , 0 ) = u ( t , 1 ) = 0 , t ≥ 0. u\left(t,0\right)=u\left(t,1\right)=0,t\geq0. u(t,0)=u(t,1)=0,t0.
精确解: u = s i n ( π ( x − t ) ) + s i n ( π ( x + t ) ) 。 u=sin\left(\pi\left(x-t\right)\right)+sin\left(\pi\left(x+t\right)\right)。 u=sin(π(xt))+sin(π(x+t))
(1) 取 τ \tau τ=0.05,h=0.1计算 t = 0.5,1.0,1.5,2.0 的解。
(2) 取 τ \tau τ=h=0.1,计算 t = 0.5,1.0,1.5,2.0 的解。

解:

(1)问题分析

Step 1:网格剖分

取时间步长 τ = T N \tau=\frac{T}{N} τ=NT和空间步长 h = l J h=\frac{l}{J} h=Jl,记矩形区域 G = 0 ≤ t ≤ T , 0 ≤ x ≤ l G = {0 \le t \le T, 0 \le x \le l} G=0tT,0xl。用两族平行直线把这个区域 G 分割成矩形网格。网格节点用坐标点来 ( t n , x j ) \left(t_n,x_j\right) (tn,xj)表示。 G h G_h Gh表示网格内点的集合。 Γ h = G / G h = G − G h \Gamma_h=G/G_h=G-G_h Γh=G/Gh=GGh表示界点的集合。用 u ( t n , x j ) u\left(t_n,x_j\right) u(tn,xj)表示真解, u j n u_j^n ujn表示在 ( t n , x j ) \left(t_n,x_j\right) (tn,xj)处的近似值。定义网比 r 2 = τ 2 h 2 r^2=\frac{\tau^2}{h^2} r2=h2τ2

Step 2:差分方程,中心差分格式

u j n + 1 − 2 u j n + u j n − 1 = r 2 ( u j + 1 n − 2 u j n + u j − 1 n ) u_j^{n+1}-2u_j^n+u_j^{n-1}=r^2\left(u_{j+1}^n-2u_j^n+u_{j-1}^n\right) ujn+12ujn+ujn1=r2(uj+1n2ujn+uj1n)
⇒ u j n + 1 = r 2 ( u j − 1 n + u j + 1 n ) + 2 ( 1 − r 2 ) u j n − u j n − 1                   ( 1 ) \Rightarrow u_j^{n+1}=r^2\left(u_{j-1}^n+u_{j+1}^n\right)+2\left(1-r^2\right)u_j^n-u_j^{n-1} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (1) ujn+1=r2(uj1n+uj+1n)+2(1r2)ujnujn1                 (1)
由初值条件得: u j 0 = s i n ( π x j ) , u j 1 − u j − 1 2 τ = 0. u_j^0=sin\left(\pi x_j\right),\frac{u_j^1-u_j^{-1}}{2\tau}=0. uj0=sin(πxj),2τuj1uj1=0.
(1)式中令n=0, 得: u j 1 = r 2 ( u j − 1 0 + u j + 1 0 ) + 2 ( 1 − r 2 ) u j 0 − u j − 1 ,消去 u j − 1 u_j^1=r^2\left(u_{j-1}^0+u_{j+1}^0\right)+2\left(1-r^2\right)u_j^0-u_j^{-1},消去u_j^{-1} uj1=r2(uj10+uj+10)+2(1r2)uj0uj1,消去uj1,得:
u j 1 = r 2 ( s i n ( π x j − 1 ) + s i n ( π x j + 1 ) ) + ( 1 − r 2 ) s i n ( π x j ) . u_j^1=r^2\left(sin\left(\pi x_{j-1}\right)+sin\left(\pi x_{j+1}\right)\right)+\left(1-r^2\right)sin\left(\pi x_j\right). uj1=r2(sin(πxj1)+sin(πxj+1))+(1r2)sin(πxj).
  U n = ( u 1 n , u 2 n , ⋯   , u J − 1 n ) T , {\ U}^n=\left(u_1^n,u_2^n,\cdots,u_{J-1}^n\right)^T,  Un=(u1n,u2n,,uJ1n)T, A = [ 2 ( 1 − r 2 ) r 2 0 ⋯ 0 0 0 r 2 2 ( 1 − r 2 ) r 2 ⋯ 0 0 0 ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ 0 0 0 0 ⋯ r 2 2 ( 1 − r 2 ) r 2 0 0 0 ⋯ 0 r 2 2 ( 1 − r 2 ) ] A=\left[\begin{matrix}2\left(1-r^2\right)&r^2&0&\cdots&0&0&0\\r^2&2\left(1-r^2\right)&r^2&\cdots&0&0&0\\\cdots&\cdots&\cdots&\cdots&\cdots&\cdots&0\\0&0&0&\cdots&r^2&2\left(1-r^2\right)&r^2\\0&0&0&\cdots&0&r^2&2\left(1-r^2\right)\\\end{matrix}\right] A= 2(1r2)r200r22(1r2)000r20000r20002(1r2)r2000r22(1r2) 为一个 J − 1 × J − 1 J-1×J-1 J1×J1,的单位矩阵,特别地,   U 0 = ( 2 s i n ( π x 1 ) , 2 s i n ( π x 2 ) , ⋯   , 2 s i n ( π x J − 1 ) ) T ,   U 1 = ( u 1 1 , u 2 1 , ⋯   , u J − 1 1 ) T . {\ U}^0=\left(2sin\left(\pi x_1\right),2sin\left(\pi x_2\right),\cdots,2sin\left(\pi x_{J-1}\right)\right)^T,{\ U}^1=\left(u_1^1,u_2^1,\cdots,u_{J-1}^1\right)^T.  U0=(2sin(πx1),2sin(πx2),,2sin(πxJ1))T, U1=(u11,u21,,uJ11)T.

(2)上机程序

function [U1,E]=shuangqv(J,N)
x0=0;xJ=1;h=(xJ-x0)/J;x=[x0:h:xJ]';
t0=0;tN=2;tau=(tN-t0)/N;t=[t0:tau:tN]';
r=tau^2/h^2;
u(:,1)=2*sin(pi*x(2:J,1));
for j=1:J-1
    u(j,2)=r*(sin(pi*x(j))+sin(pi*x(j+2)))+(1-r)*2*sin(pi*x(j+1));
end
U(:,1)=[u(:,2);u(:,1)];
A=diag(ones(1,J-1))*(2-2*r)+(diag(ones(1,J-2),1)+diag(ones(1,J-2),-1))*r;
E=diag(ones(1,J-1));
B=[A,-E;E,zeros(J-1,J-1)];
for n=2:N+1
    U(:,n)=B*U(:,n-1);
end
U1=U(J:2*(J-1),:);
U1=[zeros(1,N+1);U1;zeros(1,N+1)];
for j=1:J+1
    for n=1:N+1
        V(j,n)=sin(pi*(x(j)-t(n)))+sin(pi*(x(j)+t(n)));
    end
end
E=max(max(abs(U1-V)));
end
 %调试
clear all;clc;close  all;
[U1,E1]=shuangqv(10,40);
[U2,E2]=shuangqv(10,20);

(3)问题结果

利用中心差分格式求解一阶波动方程(附Matlab代码)( τ \tau τ=h=0.1时,解析解与数值解图像)
由图像可以看出,解析解与数值解的图像高度吻合。接着我们看一下两种情况下的最大误差:

最大误差
τ \tau τ=0.05,h=0.1 0.029747384249724
τ \tau τ=0.1,h=0.1 1.665334536937735e-15

( τ \tau τ=0.05,h=0.1时对应时间对应的数值解)
利用中心差分格式求解一阶波动方程(附Matlab代码)
( τ \tau τ=0.1,h=0.1时对应时间对应的数值解)
利用中心差分格式求解一阶波动方程(附Matlab代码)文章来源地址https://www.toymoban.com/news/detail-463835.html

到了这里,关于利用中心差分格式求解一阶波动方程(附Matlab代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • matlab求解方程和多元函数方程组

    核心函数solve 一般形式 S=solve(eqns,vars,Name,Value) ,其中: eqns是需要求解的方程组; vars是需要求解的变量; Name-Value对用于指定求解的属性(一般用不到); S是结果,对应于vars中变量; 单个方程求解 方程:sin(x)=1 代码: 结果: 说明: MATLAB定义方程用的是 == 符号,就是这样

    2024年02月08日
    浏览(32)
  • 前向差分、后向差分、中心差分精度,matlab仿真

    前向差分公式:(1) 泰勒展开为:(2) 由泰勒展开可以推出 f \\\'(x) : (3) 由(3)可以知道右边第一项是前向差分,而其他项的和是函数f \\\'(x)与前向差分的误差,用o(x)表示,得出:(4) 因为误差项为o(x),o(x)主要项为Δx/2。 而Δx为一阶,所以前向差分为一阶精度。 同理可以推出后

    2024年02月01日
    浏览(29)
  • 有限差分法-一维热传导方程及其Matlab程序实现

    2.2.2 一维热传导方程 热传导方程是描述热量在介质中传导的数学模型。在许多实际应用中,我们需要预测物体的温度随时间和空间的演化情况,这就需要用到热传导方程。 热传导方程的背景可以追溯到18世纪,当时科学家们对热的本质和热量如何传递产生了浓厚的兴趣。傅里

    2024年02月10日
    浏览(30)
  • MATLAB-线性方程组求解

    线性方程组是线性代数中的重要内容之一,其理论发展的最为完善。MATLAB中包含多种处理线性方程组的命令,下面进行详细介绍。 对于形如AX=B的方程组来说,假设其系数矩阵A是m×n的矩阵,根据其维数可以将方程组分以下3种情况。 1)若m=n,则为恰定方程组,即方程数等于未知

    2023年04月16日
    浏览(36)
  • MATLAB-常微分方程求解

    MATLAB中可以用来求解常微分方程(组)的函数有ode23、 ode23s、 ode23t、 ode23tb 、ode45、ode15s和odel13等,见下表。它们的具体调用方法类似,为了方便后面的描述, 在后面的介绍中将使用solver统一代替它们。 函数的具体调用方法如下。 [T,Y] =solver( odefun, tspan,y0) [T,Y] = solver( odefun,

    2024年02月02日
    浏览(35)
  • MATLAB:方程组的求解

    综合实例应用:方程组的求解 无论工程应用问题,还是数学计算问题,方程组都是解决问题转化的重要途径之一,将复杂问题转化为简单的方程组矩阵求解问题。 利用矩阵分解来求解线性方程组,是工程计算中最常用的计算。 LU分解法是先将系数矩阵A进行LU分解,得到LU=P

    2024年01月19日
    浏览(29)
  • MATLAB 之 非线性方程数值求解、最优化问题求解和常微分方程初值问题的数值求解

    非线性方程的求根方法很多,常用的有牛顿迭代法,但该方法需要求原方程的导数,而在实际运算中这一条件有时 是不能满足的,所以又出现了弦截法、二分法等其他方法。 在 MATLAB 中,非线性方程的求解和最优化问题往往需要调用最优化工具箱来解决。优化工具箱提供了一

    2024年02月08日
    浏览(40)
  • 热传导方程以及Matlab求解

    设 u = u ( x ⃗ , t ) u=u(vec{x},t) u = u ( x , t ) 表示某一个均匀物体 Ω ⊂ R 3 Omegasubsetmathbb{R}^3 Ω ⊂ R 3 在位置 x ⃗ vec{x} x ,时刻 t t t 的温度(单位: K K K ), c c c 表示比热(单位: J / ( k g ⋅ K ) J/(kgcdot K) J / ( k g ⋅ K ) ), ρ rho ρ 表示密度(单位: k g / m 3 kg/m^3 k g / m 3 ),令

    2024年02月06日
    浏览(42)
  • MATLAB 之 线性方程组求解

    在 MATLAB 中,关于线性方程组的解法一般分为两类:一类是直接法,就是在没有舍入误差的情况下,通过有限步的矩阵初等运算来求得方程组的解;另一类是迭代法,就是先给定一个解的初始值,然后按照一定的迭代算法进行逐步逼近,求出更精确的近似解。 线性方程组的直

    2024年02月08日
    浏览(38)
  • 矩阵方程的计算求解:使用 MATLAB

    矩阵方程的计算求解:使用 MATLAB 矩阵方程是数学中一类重要的方程,它以矩阵的形式表示,并涉及到矩阵的乘法、加法和逆运算等。在 MATLAB 中,我们可以使用多种方法来求解矩阵方程,包括直接求解、迭代法和数值方法等。本文将介绍几种常见的方法,并给出相应的 MATL

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包