一维热传到方程求数值解#
本文主要利用泰勒展开将方程中的一阶还有二阶偏导数进行离散化,推导出一种可以用程序求解的形式
求解原理#
一维热传导方程#
⎧⎪
⎪
⎪
⎪⎨⎪
⎪
⎪
⎪⎩∂u∂x(x,t)=a2∂2u∂x2u(x,t)+f(x,t)u(x,0)=φ(x)u(a,t)=γ1(t)u(b,t)=γ2(t)(1)
由于热传导方程较为复杂,只能将方程中的一阶和二阶偏导进行离散化。和欧拉法采用相同的思路,下面进行推导:
-
将x与t分别在横坐标与纵坐标上进行划分
x步长: Δx=b−aN,得到关于xj与tn的表达式:
xj=a+(j−1)Δxtn=0+(n−1)Δt
将函数进行近似替换unj≈u(xj,tn)
-
根据泰勒展开将公式进行代换
对于任意一个xj对t进行展开:
u(xj,tn+Δt)=u(xj,tn)+∂u∂t(xj,tn)Δt+⋅⋅⋅
由于很难求出函数的偏导,所以需要将其所有偏导形式转换成容易求解出来的离散形式首先用一维热传导方程进行替换
∂u∂t(xj,tn)=a2∂2u∂x2(xj,tn)+f(xj,tn)
利用上式联立下面两个式子
u(xj+Δx,tn)=u(xj,tn)+∂u∂x(xj,tn)Δx+1/2∂2u∂x2(xj,tn)Δx2+⋅⋅⋅u(xj−Δx,tn)=u(xj,tn)−∂u∂x(xj,tn)Δx+1/2∂2u∂x2(xj,tn)Δx2−⋅⋅⋅∂2u∂x2(xj,tn)≈unj+1+unj−1−2unjΔx2
最后得到递推关系式
un+1j=unj+[a2unj+1+unj−1−2unjΔx2+fnj]Δt
化成易于用程序求解的形式#
-
在时间维度上进行递推
首先设置两个时间向量,将所有的位置包括其中
un=⎛⎜
⎜
⎜
⎜
⎜
⎜⎝un1⋮⋮unN+1⎞⎟
⎟
⎟
⎟
⎟
⎟⎠un+1=⎛⎜
⎜
⎜
⎜
⎜
⎜⎝un+11⋮⋮un+1N+1⎞⎟
⎟
⎟
⎟
⎟
⎟⎠
-
建立系数矩阵
⎛⎜
⎜
⎜
⎜
⎜
⎜
⎜⎝ϕ第一取值⋮第N取值ϕ⎞⎟
⎟
⎟
⎟
⎟
⎟
⎟⎠=⎛⎜
⎜
⎜
⎜
⎜
⎜
⎜⎝−2100⋅⋅⋅1−210⋅⋅⋅⋮⋅⋅⋅01−21⋅⋅⋅001−2⎞⎟
⎟
⎟
⎟
⎟
⎟
⎟⎠⎛⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜⎝un1un2⋮⋮unN+1⎞⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟⎠
为何矩阵要这么建立,系数矩阵A的第二行为例,与右边的列向量相乘得到结果un1−2un2+un3 将结果表示成以下列向量。由于初值和末值原方程会给出,所以开始两个值可能不正确,所以先不用管。
⎛⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜⎝ϕun1−2un2+un3un2−2un3+un4⋮unN−1−2unN+unN+1ϕ⎞⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟⎠
-
扩散源或热源表示
fn=⎛⎜
⎜
⎜
⎜
⎜
⎜⎝fn1⋮⋮fnN+1⎞⎟
⎟
⎟
⎟
⎟
⎟⎠
-
得到最终表达式
un+1=un+(a21Δx2Aun+fn)Δt
以下为初始条件:
un+11=γn+11=γ(tn+1)un+1N+1=γn+12u1=γγj=γ(xj)
通过程序可以设定步长Δx 和 Δt 其它量就可以通过边界条件推出。
示例与代码#
设方程如下:
⎧⎪
⎪
⎪
⎪⎨⎪
⎪
⎪
⎪⎩∂u∂x(x,t)=a2∂2u∂x2u(x,t)+f(x,t)u(x,0)=0u(a,t)=0+0.0×sin(t)u(b,t)=0−0.0×sin(t)(2)
求解matlab代码如下:
clc; clear
a = 1;
dx = 0.01;
x = 0 : dx : 1;
dt = 0.00005;
t = 0 : dt : 1;
u = zeros(length(x), length(t));
u(:,1) = 0;
f = 5 * exp(-20 * (x - 1 / 2) .^ 2);
m1 = 0 + 0.0 * sin(t);
m2 = 0 - 0.0 * sin(t);
A = -2 * eye(length(x)) + diag(ones(1,length(x)-1),1) + diag(ones(1,length(x)-1),-1)
for n = 1 : length(t)-1
u(:, n+1) = u(:,n) + (a^2 / dx^2 * A * u(:,n) + f') * dt;
u(1, n+1) = m1(n+1);
u(end, n+1) = m2(n+1);
plot(x, u(:,end))
axis([x(1) x(end) 0 1])
getframe;
end
针对边界条件进行拓展#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】