利用中心差分格式求解一阶波动方程(附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)问题结果

在这里插入图片描述( τ \tau τ=h=0.1时,解析解与数值解图像)
由图像可以看出,解析解与数值解的图像高度吻合。接着我们看一下两种情况下的最大误差:

最大误差
τ \tau τ=0.05,h=0.10.029747384249724
τ \tau τ=0.1,h=0.11.665334536937735e-15

( τ \tau τ=0.05,h=0.1时对应时间对应的数值解)
在这里插入图片描述
( τ \tau τ=0.1,h=0.1时对应时间对应的数值解)

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1.版本:matlab2014/2019a/2021a,内含运行结果,不会运行可私信 2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,更多内容可点击博主头像 3.内容:标题所示,对于介绍可点击主页搜索博客 4.适合人群:本科,硕士等教研学习使用 5.博客介绍:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可si信 %% 开发者:Matlab科研助手 %% 更多咨询关注天天Matlab微信公众号 ### 团队长期从事下列领域算法的研究和改进: ### 1 智能优化算法及应用 **1.1 改进智能优化算法方面(单目标和多目标)** **1.2 生产调度方面** 1.2.1 装配线调度研究 1.2.2 车间调度研究 1.2.3 生产线平衡研究 1.2.4 水库梯度调度研究 **1.3 路径规划方面** 1.3.1 旅行商问题研究(TSP、TSPTW) 1.3.2 各类车辆路径规划问题研究(vrp、VRPTW、CVRP) 1.3.3 机器人路径规划问题研究 1.3.4 无人机三维路径规划问题研究 1.3.5 多式联运问题研究 1.3.6 无人机结合车辆路径配送 **1.4 三维装箱求解** **1.5 物流选址研究** 1.5.1 背包问题 1.5.2 物流选址 1.5.4 货位优化 ##### 1.6 电力系统优化研究 1.6.1 微电网优化 1.6.2 配电网系统优化 1.6.3 配电网重构 1.6.4 有序充电 1.6.5 储能双层优化调度 1.6.6 储能优化配置 ### 2 神经网络回归预测、时序预测、分类清单 **2.1 bp预测和分类** **2.2 lssvm预测和分类** **2.3 svm预测和分类** **2.4 cnn预测和分类** ##### 2.5 ELM预测和分类 ##### 2.6 KELM预测和分类 **2.7 ELMAN预测和分类** ##### 2.8 LSTM预测和分类 **2.9 RBF预测和分类** ##### 2.10 DBN预测和分类 ##### 2.11 FNN预测 ##### 2.12 DELM预测和分类 ##### 2.13 BIlstm预测和分类 ##### 2.14 宽度学习预测和分类 ##### 2.15 模糊小波神经网络预测和分类 ##### 2.16 GRU预测和分类 ### 3 图像处理算法 **3.1 图像识别** 3.1.1 车牌、交通标志识别(新能源、国内外、复杂环境下车牌) 3.1.2 发票、身份证、银行卡识别 3.1.3 人脸类别和表情识别 3.1.4 打靶识别 3.1.5 字符识别(字母、数字、手写体、汉字、验证码) 3.1.6 病灶识别 3.1.7 花朵、药材、水果蔬菜识别 3.1.8 指纹、手势、虹膜识别 3.1.9 路面状态和裂缝识别 3.1.10 行为识别 3.1.11 万用表和表盘识别 3.1.12 人民币识别 3.1.13 答题卡识别 **3.2 图像分割** **3.3 图像检测** 3.3.1 显著性检测 3.3.2 缺陷检测 3.3.3 疲劳检测 3.3.4 病害检测 3.3.5 火灾检测 3.3.6 行人检测 3.3.7 水果分级 **3.4 图像隐藏** **3.5 图像去噪** **3.6 图像融合** **3.7 图像配准** **3.8 图像增强** **3.9 图像压缩** ##### 3.10 图像重建 ### 4 信号处理算法 **4.1 信号识别** **4.2 信号检测** **4.3 信号嵌入和提取** **4.4 信号去噪** ##### 4.5 故障诊断 ##### 4.6 脑电信号 ##### 4.7 心电信号 ##### 4.8 肌电信号 ### 5 元胞自动机仿真 **5.1 模拟交通流** **5.2 模拟人群疏散** **5.3 模拟病毒扩散** **5.4 模拟晶体生长** ### 6 无线传感器网络 ##### 6.1 无线传感器定位(Dv-Hop定位优化、RSSI定位优化) ##### 6.2 无线传感器覆盖优化 ##### 6.3 无线传感器通信及优化(Leach协议优化) ##### 6.4 无人机通信中继优化(组播优化)
五点差分格式求解椭圆型偏微分方程常用的方法之一。以下是一种使用matlab实现五点差分格式求解二维椭圆型方程代码: 假设需要求解的二维椭圆型方程为: ∂^2u/∂x^2 + ∂^2u/∂y^2 = f(x,y) 其中f(x,y)为已知函数,边界条件为: u(x,y) = g(x,y) (在边界上) 首先对横坐标x和纵坐标y分别进行离散化,即在横坐标方向和纵坐标方向分别取N个等距的网格点。设Δx和Δy为网格间隔,则网格点为: x(i) = iΔx (i=0,1,...,N) y(j) = jΔy (j=0,1,...,N) 然后将需要求解的未知函数u在网格点上的值记为u(i,j),则有: u(i,j) ≈ u(x(i),y(j)) 接下来,使用五点差分法对方程进行近似求解。对于二阶导数,可以使用以下公式进行近似: ∂^2u/∂x^2 ≈ (u(i+1,j) - 2u(i,j) + u(i-1,j))/Δx^2 ∂^2u/∂y^2 ≈ (u(i,j+1) - 2u(i,j) + u(i,j-1))/Δy^2 将上式代入原方程,并代入边界条件,得到以下迭代公式: u(i,j) = (u(i+1,j) + u(i-1,j) + u(i,j+1) + u(i,j-1) - Δx^2f(i,j))/(4 + Δx^2/Δy^2) 以上迭代公式即为五点差分格式的核心。根据迭代公式,可以依次求解出每个网格点上未知函数u的值。在matlab中,可以使用循环语句实现迭代计算,具体实现方式可以参考以下代码: % 定义参数和边界条件 N = 50; % 网格点数 L = 1; % 区间长度 dx = L/N; % 网格间隔 dy = dx; % 网格间隔 x = 0:dx:L; % 网格点 y = 0:dy:L; % 网格点 u = zeros(N+1,N+1); % 初始化u f = @(x,y) 2*pi^2*sin(pi*x).*sin(pi*y); % 定义右侧函数f g = @(x,y) sin(pi*x).*sin(pi*y); % 定义边界函数g % 设置边界条件 u(1,:) = g(x,0); u(N+1,:) = g(x,L); u(:,1) = g(0,y); u(:,N+1) = g(L,y); % 迭代计算 while true u_old = u; % 记录上一次迭代的u for i = 2:N for j = 2:N u(i,j) = (u(i+1,j) + u(i-1,j) + u(i,j+1) + u(i,j-1) - dx^2*f(x(i),y(j)))/(4 + dx^2/dy^2); end end % 判断是否满足收敛条件 if max(max(abs(u - u_old))) < 1e-6 break; end end % 绘制图像 [X,Y] = meshgrid(x,y); surf(X,Y,u') xlabel('x') ylabel('y') zlabel('u(x,y)') 注意,以上代码中的右侧函数f和边界函数g需要根据具体问题进行设置。另外,差分解法的精度和稳定性还需要根据具体问题进行分析和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值