Mtlab:抛物型方程的交替方向隐格式(ADI)

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)的更多相关文章
- 有限差分法(Finite Difference Method)解方程:边界和内部结点的控制方程
FDM解常微分方程 问题描述 \[\frac{d^2\phi}{dx^2}=S_{\phi} \tag{1} \] 这是二阶常微分方程(second-order Ordinary Differenti ...
- Fluent经典问题答疑
原文链接1 原文链接28 什么叫边界条件?有何物理意义?它与初始条件有什么关系? 边界条件与初始条件是控制方程有确定解的前提. 边界条件是在求解区域的边界上所求解的变量或其导数随时间和地点的变化规律. ...
- C++线性方程求解
介绍 程序SolveLinearEquations解决联立方程.该方案需要一个文本文件,其中包含输入和输出方程解决.这个项目是几年前我写在C#中http://www.codeproject.com/A ...
- 详解如何将MathType嵌入word中
将MathType嵌入word中的过程就是word插入对象的过程,插入对象是word软件中最常见的操作,MathType公式编辑器与所有的Office程序(OLE技术)都有很好的兼容性,本教程将详解如 ...
- 线性二次型控制器(LQR)——轨迹跟踪器
1 概念 2 线性时变系统的跟踪问题 3 线性定常系统的跟踪问题 公式18--22为求解的关键 根据20.21分别求出P.g的值则通过18可求得期望的输出u 4 实例分析 5 仿真实验 先将上 ...
- OpenFOAM 编程 | One-Dimensional Transient Heat Conduction
0. 写在前面 本文中将对一维瞬态热传导问题进行数值求解,并基于OpenFOAM类库编写求解器.该问题参考自教科书\(^{[1]}\)示例 8.1. 1. 问题描述 一维瞬态热传导问题控制方程如下 \ ...
- vijos P1915 解方程 加强版
背景 B酱为NOIP 2014出了一道有趣的题目, 可是在NOIP现场, B酱发现数据规模给错了, 他很伤心, 哭得很可怜..... 为了安慰可怜的B酱, vijos刻意挂出来了真实的题目! 描述 已 ...
- NOIP2014 uoj20解方程 数论(同余)
又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...
- vijos1910解方程
描述 已知多项式方程: a0+a1x+a2x2+...+anxn=0a0+a1x+a2x2+...+anxn=0 求这个方程在[1, m]内的整数解(n 和 m 均为正整数). 格式 输入格式 输 ...
随机推荐
- kendo upload必填验证
@using Kendo.Mvc.UI @using StudentManage.Common.Helper @model StudentManage.Models.Home.ImportDataFr ...
- java核心技术第十版 笔记
1.java区分大小写 2.类名是以大写字母开头 (驼峰) 3.http://docs.oracle.com/javase/specs java语言规范 4. /* */ 注释不能嵌套 5. Jav ...
- Cannot locate BeanDefinitionParser for element [scoped-proxy]
指定使用 CGLIB 而不使用 JDK 生成代理对象:注意:此两个标签必须同时出现,不然会报:Cannot locate BeanDefinitionParser for element [scope ...
- QT 添加外部库文件
LIBS += D:\Code\Opengltest\OpenGL32.Lib D:\Code\Opengltest\GlU32.Lib LIBS += OpenGL32.Lib GlU32.Lib ...
- tinkpad e450c 进入 BIOS
电脑开机状态下重启电脑,同时连续单击F1 听到"嘟"的一声继续按F1键即可进入BIOS管理界面. 注意:此时Fn要在锁定状态,即Fn键盘灯亮.[可用Fn+Esc切换Fn锁定和未锁定 ...
- python list用法
a = ['张三','李四','赵六','王五'] #打印列表 print(a) #增 a.apppend('徐七') print(a) a.insert(1,'张六') print(a) #删 a. ...
- JZ2440学习笔记之链接文件lds
如果在Linux环境下用arm-linux-gcc来编译arm程序,需要编写链接文件lds: 1. 运行地址=链接地址,表示代码在SDRAM中执行的地址,如果程序中有对某部分代码执行过搬运,需要在ld ...
- python数据类型:字典dict常用操作
字典是Python语言中的映射类型,他是以{}括起来,里面的内容是以键值对的形式储存的: Key: 不可变(可哈希)的数据类型.并且键是唯一的,不重复的. Value:任意数据(int,str,boo ...
- JSESSIONID的简单说明
原文地址:http://blog.csdn.net/chunqiuwei/article/details/23461995 1)第一次访问服务器的时候,会在响应头里面看到Set-Cookie信息(只有 ...
- asp.net简繁体转换
简繁体转换添加Microsoft.VisualBasic.dll引用 //简转繁 string str= Microsoft.VisualBasic.Strings.StrConv("民生银 ...