tic;
clear
clc
M=[,,,,];
N=M;
for p=:length(M)
h=/M(p);% 这里定义空间步长等距
tau=/N(p); % 时间步长
x=:h:;
y=:h:;
t=:tau:;
Numerical(M(p)+,M(p)+,N(p)+)=;%u
numerical(M(p)+,M(p)-)=;%u*
%-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
% 求解u*ij和uij过程中构造三对角矩阵
% a 表示下对角线元素
% b 表示主对角线元素
% c 表示上对角线元素
a=-tau/(*h^)*ones(M(p)-,);
b=(tau/h^+)*ones(M(p)-,);
c=-tau/(*h^)*ones(M(p)-,);
%-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
for i=:M(p)+
for j=:M(p)+
Numerical(i,j,)=exp(/*(x(i)+y(j)));% 初值Numerical(x,y,)=u(i,j,)
end
end
for j=:M(p)+
for k=:N(p)+
Numerical(,j,k)=exp(/*y(j)-t(k));% 边值Numerical(,y,t)=u(,j,k)
end
end
for j=:M(p)+
for k=:N(p)+
Numerical(M(p)+,j,k)=exp(/*(+y(j))-t(k));% 边值Numerical(,y,t)=u(m,j,k)
end
end
for i=:M(p)+
for k=:N(p)+
Numerical(i,,k)=exp(/*x(i)-t(k));% 边值Numerical(x,,t)=u(i,,k)
end
end
for i=:M(p)+
for k=:N(p)+
Numerical(i,M(p)+,k)=exp(/*(+x(i))-t(k));% 边值Numerical(x,,t)=u(i,m,k)
end
end
f=inline('-3/2*exp(1/2*(x+y)-t)','x','y','t');
fun=inline('exp(1/2*(x+y)-t)','x','y','t');
for i=:M(p)+
for j=:M(p)+
for k=:M(p)+
Accurate(i,j,k)=fun(x(i),y(j),t(k));
end
end
end
for k=:N(p);
for j=:M(p)-;% 固定j
numerical(,j)=-tau/(*h^)*Numerical(,j,k+)+(tau/h^+)*Numerical(,j+,k+)-tau/(*h^)*Numerical(,j+,k+);% u*0j
numerical(M(p)+,j)=-tau/(*h^)*Numerical(M(p)+,j,k+)+(tau/h^+)*Numerical(M(p)+,j+,k+)-tau/(*h^)*Numerical(M(p)+,j+,k+);% u*mj
for i=:M(p)-
numerical_right_vector(i,)=tau*f(x(i+),y(j+),t(k)+tau/)+Numerical(i+,j+,k)...
+tau/(*h^)*(Numerical(i,j+,k)-*Numerical(i+,j+,k)+Numerical(i+,j+,k))...
+tau/(*h^)*(Numerical(i+,j,k)-*Numerical(i+,j+,k)+Numerical(i+,j+,k))...
+tau^/(*h^)*(Numerical(i,j,k)-*Numerical(i+,j,k)+Numerical(i+,j,k))...
+tau^/(*h^)*(-*Numerical(i,j+,k)+*Numerical(i+,j+,k)-*Numerical(i+,j+,k))...
+tau^/(*h^)*(Numerical(i,j+,k)-*Numerical(i+,j+,k)+Numerical(i+,j+,k));
end
numerical_right_vector(,)=numerical_right_vector(,)+tau/(*h^)*numerical(,j);
numerical_right_vector(M(p)-,)=numerical_right_vector(M(p)-,)+tau/(*h^)*numerical(M(p)+,j);
numerical(:M(p),j)=chase(a,b,c,numerical_right_vector);
end
for i=:M(p)- % 固定i
for j=:M(p)-
Numerical_right_vector(j,)=numerical(i+,j);
end
Numerical_right_vector(,)=Numerical_right_vector(,)+tau/(*h^)*Numerical(i+,,k+);
Numerical_right_vector(M(p)-,)=Numerical_right_vector(M(p)-,)+tau/(*h^)*Numerical(i+,M(p)+,k+);
Numerical(i+,:M(p),k+)=chase(a,b,c,Numerical_right_vector);
end
end
error=abs(Numerical(:,:,M(p)+)-Accurate(:,:,M(p)+));
error_inf(p)=max(max(error));
figure(p)
[X,Y]=meshgrid(y,x);
subplot(,,)
surf(X,Y,Accurate(:,:,M(p)));
xlabel('x');ylabel('y');zlabel('Numerical');
title('the image of Accurate rusult');
grid on;
subplot(,,)
surf(X,Y,Numerical(:,:,M(p)));
xlabel('x');ylabel('y');zlabel('Numerical');
title('the image of Numerical');
grid on;
subplot(,,)
surf(X,Y,error);
xlabel('x');ylabel('y');zlabel('error');
title('the image of error Numerical');
grid on;
end
for k=:length(M)
X=error_inf(k-)/error_inf(k);
Norm(k-)=log2(X);
end
figure(length(N)+)
plot(:length(N)-,Norm,'-b^');
xlabel('序号');ylabel('误差阶数');
title('ADI格式误差阶');
grid on;
toc;

取t=1,N=5,10,20,40,80;真解与数值解的结果图:

N=5:

N=10;

N=20;

N=40;

N=80;

误差阶数:

Mtlab:抛物型方程的交替方向隐格式(ADI)的更多相关文章

  1. 有限差分法(Finite Difference Method)解方程:边界和内部结点的控制方程

    FDM解常微分方程 问题描述 \[\frac{d^2\phi}{dx^2}=S_{\phi} \tag{1} \] 这是二阶常微分方程(second-order Ordinary Differenti ...

  2. Fluent经典问题答疑

    原文链接1 原文链接28 什么叫边界条件?有何物理意义?它与初始条件有什么关系? 边界条件与初始条件是控制方程有确定解的前提. 边界条件是在求解区域的边界上所求解的变量或其导数随时间和地点的变化规律. ...

  3. C++线性方程求解

    介绍 程序SolveLinearEquations解决联立方程.该方案需要一个文本文件,其中包含输入和输出方程解决.这个项目是几年前我写在C#中http://www.codeproject.com/A ...

  4. 详解如何将MathType嵌入word中

    将MathType嵌入word中的过程就是word插入对象的过程,插入对象是word软件中最常见的操作,MathType公式编辑器与所有的Office程序(OLE技术)都有很好的兼容性,本教程将详解如 ...

  5. 线性二次型控制器(LQR)——轨迹跟踪器

    1 概念 2 线性时变系统的跟踪问题 3 线性定常系统的跟踪问题 公式18--22为求解的关键     根据20.21分别求出P.g的值则通过18可求得期望的输出u 4 实例分析 5 仿真实验 先将上 ...

  6. OpenFOAM 编程 | One-Dimensional Transient Heat Conduction

    0. 写在前面 本文中将对一维瞬态热传导问题进行数值求解,并基于OpenFOAM类库编写求解器.该问题参考自教科书\(^{[1]}\)示例 8.1. 1. 问题描述 一维瞬态热传导问题控制方程如下 \ ...

  7. vijos P1915 解方程 加强版

    背景 B酱为NOIP 2014出了一道有趣的题目, 可是在NOIP现场, B酱发现数据规模给错了, 他很伤心, 哭得很可怜..... 为了安慰可怜的B酱, vijos刻意挂出来了真实的题目! 描述 已 ...

  8. NOIP2014 uoj20解方程 数论(同余)

    又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...

  9. vijos1910解方程

      描述 已知多项式方程: a0+a1x+a2x2+...+anxn=0a0+a1x+a2x2+...+anxn=0 求这个方程在[1, m]内的整数解(n 和 m 均为正整数). 格式 输入格式 输 ...

随机推荐

  1. windows之电脑开机出现 this product is covered by one or more of the following prtents

    电脑开机出现 this product is covered by one or more of the following prtents 有次意外断电后就每次都出现这个提示,然后要等检查完才能进入 ...

  2. Objective-C RunTime 学习笔记 之 消息转发流程

    1) 当向某个对象发送消息时,先从cache(cache_t)中查找方法对象(method_t),如果找到则进行回调:否则通过查找对象的类(元类)定义中方法列表,一直追溯到NSObject, 如果找到 ...

  3. python小知识点随笔

    可能会有不局限于Python语言的内容,文中“>>>”表示结果,而不是命令行交互的提示符 1.关于字符串编码 ASCII编码 占用一个字节 二进制11111111=十进制255 所以 ...

  4. [ABP] ASP.NET Zero 5.6.0 之 ASP.NET Zero Power Tools 上手日志

    之前破解了这个工具后,却没有使用它. 现在使用这个小工具,帮我完成创建Entity类,Dto类,AppService类,View视图等DDD相关工作以及Entity Framework Migrati ...

  5. Liunx中三种网络模式配置及Xshell连接

    Liunx网络配置 NAT模式下的网络配置: 首先打开网络配置文件:vi   /etc/sysconfig/network-scripts/ifcfg-ens33 修改网卡信息,配置动态Ip过程中,只 ...

  6. deno深入揭秘及未来展望

    deno node.js之父Ryan Dahl在一个月前发起了名为deno的项目,项目的初衷是打造一个基于v8引擎的安全的TypeScript运行时,同时实现HTML5的基础API.所谓的安全运行时, ...

  7. 使用kubesql进行kubernetes资源查询

    kubesql kubesql(https://github.com/xuxinkun/kubesql)是我最近开发的一个使用sql查询kubernetes资源的工具.诸如node,pod等kuber ...

  8. Python模块1

    序列化模块: 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 序列化的目的 1.以某种存储形式使自定义对象持久化: 2.将对象从一个地方传递到另一个地方. 3.使程序更具维护性. jso ...

  9. Java基础学习-流程控制语句

    在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说程序的流程对运行结果有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过控制语句的执行顺序来实现我 ...

  10. Python3 tkinter基础 Radiobutton variable 默认选中的按钮

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...