1 Star 1 Fork 1

韩志洋 / mathematical modeling

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Grank_Nicholson.m 888 Bytes
一键复制 编辑 原始数据 按行查看 历史
韩志洋 提交于 2019-04-09 16:30 . 上传初始化文件
function [u,x,t] = Grank_Nicholson(A,xf,T,it0,bx0,bxf,M,N)
%解方程A u_xx = u_t , 0 <= x <= xf, 0 <= t <= T
%初值: u(x,0) = it0(x)
% 边界条件: u(0,t) = bx0(t), u(xf,t) = bxf(t)
% M : x 轴的等分段数
% N : t 轴的等分段数
dx = xf/M; x = [0:M]'*dx;
dt = T/N; t = [0:N]*dt;
for i = 1:M + 1
u(i,1) = it0(x(i));
end
for n = 1:N + 1
u([1 M + 1],n) = [bx0(t(n)); bxf(t(n))];
end
r = A*dt/dx/dx;
r1 = 2*(1 - r); r2 = 2*(1 + r);
if(r>0.5)
disp('r>0.5,unstability');
end
for i = 1:M - 1
P(i,i) = r1; %(9.2.17)
Q(i,i)=r2;
if i > 1
P(i - 1,i) = -r; P(i,i - 1) = -r; %(9.2.17)等式左边矩阵
Q(i - 1,i) = r; Q(i,i - 1) = r;%(9.2.17)等式右边矩阵
end
end
for k = 2:N + 1
% for n = 1:N + 1
% u([1 M],n) = [bx0(t(n)); bxf(t(n))];
% end
b=Q*u(2:M,k-1)+[r*(u(1,k)+u(1,k-1));zeros(M-2,1)];
u(2:M,k) = linsolve(P,b); %(9.2.17)
% for l=2:M
% if(u(l,k)>u(l-1,k))
% u(l,k)=u(l-1,k);
% end
% end
end
u=u';
Matlab
1
https://gitee.com/HIT_Hz/mathematical_modeling.git
git@gitee.com:HIT_Hz/mathematical_modeling.git
HIT_Hz
mathematical_modeling
mathematical modeling
master

搜索帮助