学习笔记21 有限差分法求解热传导方程的代码

距离9月份全国大学生数学建模竞赛只剩10天,然而,进度缓慢。有限差分法这部分我可能卡了一个星期,不过好在现在并不是毫无头绪,理解了算法,现在阅读代码更加容易了。 未来的准备计划。2018A搞定以后进入冲刺阶段。在加强阶段我们学习了不少模型,也阅读了一部分论文,现在积累了一些评价模型、预测模型、微分方程模型,这样已经有实力解决部分问题了。9月4日至6日要找一个赛题练习一下,查缺补漏。然后再看看自己缺什么。 废话不多说,下面贴上matlab代码(同样是在b站上看到的,把它打下来,跟学习笔记20的是一套的)。

clc,clear
a=1;
dx=0.02;
x=0:dx:1;
dt=0.0001;t=0:dt:1;
u=zeros(length(x),length(t));
%行数和x的个数一样
u(:,1)=sin(pi*x);%x的函数,初始函数,第一列
m1=0+0.1*sin(t);
m2=0-0.1*sin(t);
A=-2*eye(length(x))+diag(ones(1,length(x)-1),1);
%diag(,1)对角矩阵往上挪1
for n=1:length(t)-1
    u(:,n+1)=u(:,n)+a^2*dt/dx^2*A*u(:,n);
    u(1,n+1)=m1(n+1);
    u(end,n+1)=m2(n+1);
    plot(x,u(:,n+1))
    axis([x(1) x(end) 0 1])
    %坐标轴范围限制axis,axis(xmin,xmax,ymin,ymax)
    getframe;
end
clc,clear,close all
a=1;
dx=0.02;
x=0:dx:1;
dt=0.00005;t=0:dt:1;
u=zeros(length(x),length(t));
%行数和x的个数一样
u(:,1)=sin(pi*x);%x的函数,初始函数,第一列
m1=1+0.0*sin(t);
m2=2-0.0*sin(t);
A=-2*eye(length(x))+diag(ones(1,length(x)-1),1);
%diag(,1)对角矩阵往上挪1
for n=1:length(t)-1
    u(:,n+1)=u(:,n)+a^2*dt/dx^2*A*u(:,n);
    u(1,n+1)=m1(n+1);
    u(end,n+1)=m2(n+1);
end
[T,X]=meshgrid(t,x);%该命令生成网格
surf(X,T,u)%绘图
shading interp%处理色彩效果
hold on
经验分享 程序员 微信小程序 职场和发展