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. git for linux使用

    1 Linux下Git和GitHub环境的搭建 第一步: 安装Git,使用命令 “sudo apt-get install git” 第二步: 创建GitHub帐号 第三步: 生成ssh key,使用 ...

  2. conn.encoders[SafeBytes] = conn.encoders[bytes] KeyError: <class 'bytes'>

    问题描述:Django连接mysql数据库,修改了setting.py文件后,启动服务器报错 错误截图如下: 解决方法: 1.pip install pymsql 2.在setting.py同目录下的 ...

  3. intellij idea 官方帮助文档翻译(前言)

    对于java程序员来说,intellj idea这个编辑器,应该很多人都听说过,但用的人似乎并不是很多. 这也没办法,毕竟现在网上的教程,培训班授课,大多还是以eclipse为主. eclipse固然 ...

  4. CLASS类继承

    单继承:# class People: 经典类class People(object): #新式类 def __init__(self,name,age,n=1000): self.name = na ...

  5. Oracle生成GUID

    ,),),),),) GUID FROM ( SELECT SYS_GUID() GUID FROM DUAL )

  6. [C++ Primer Plus] 第10章、对象和类(二)课后习题

    1. bank.h #include <string> using namespace std; class BankAccount { private: std::string m_na ...

  7. Guitar Pro里的渐强渐弱符号

    今天我们来介绍Guitar Pro里经常会用到的渐强渐弱符号,渐强和减弱符号是常用的强度记号,分别用来表示音量加强或者减弱的过程. 渐强符号是由两条相等长度的线组成,它们的左端相连,右端逐渐张开.这个 ...

  8. Java基础学习-关键字的概述和特点以及常量的概述和分类

    1.关键字概述     -被Java语言赋予特定含义的单词 2.关键字的特点     -组成关键字的字母全部小写     -常用的代码编辑器,针对关键字有特殊的颜色标记,非常直观,所以我们不需要死记硬 ...

  9. Python3 tkinter基础 Scrollbar pack 创建靠右、充满Y轴的垂直滚动条

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

  10. server.Transfer不工作

    https://www.codeproject.com/Questions/56736/How-to-use-Server-Transfer-from-Ajax-UpdatePanel For Ser ...