版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上 ADI隐式交替法三种解法及误差分析(一般的教材上只说第一种)理论部分参看孙志忠:偏微分方程数值解法注意:1. 最好不要直接看程序,中间很多公式很烦人的(一定要小心),我写了两天,终于写对了。2. 中间:例如r*(u(i-1,m1,k)+u(i+1,m1,k)形式写成分形式:r*u(i-1,m1,k)+r*u(i+1,m1,k)后面会出错,我也不是很清楚为什么,可能由于舍入误差,或者大数吃掉小数的影响。3. 下面有三个程序4. 具体理论看书,先仔细看书(孙志忠:偏微分方程数值解法)或者网上搜一些理论。Matlab程序:1.function u u0 p e x y t
2、=ADI1(h1,h2,m1,m2,n)%ADI解二维抛物线型偏微分方程(P-R交替隐式,截断)%此程序用的是追赶法解线性方程组%h1为空间步长,h2为时间步长%m1,m2分别为x方向,y方向网格数,n为时间网格数%p为精确解,u为数值解,e为误差%定义u0(i,j,k)=u(i,j,k+1/2),因为矩阵中,i,j,k必须全为整数x=(0:m1)*h1+0;%定义x0,y0,t0是为了f(x,t)=0的情况%y=(0:m2)*h1+0;t=(0:n)*h2+0; t0=(0:n)*h2+1/2*h2;for k=1:n+1 for i=1:m2+1 for j=1:m1+1 f(i,j,k)
3、=-1.5*exp(0.5*(x(j)+y(i)-t0(k); end endendfor i=1:m2+1 for j=1:m1+1 u(i,j,1)=exp(0.5*(x(j)+y(i); endendfor k=1:n+1 for i=1:m2+1 u(i,1 m1+1,k)=exp(0.5*y(i)-t(k) exp(0.5*(1+y(i)-t(k); u0(i,1 m1+1,k)=exp(0.5*y(i)-t0(k) exp(0.5*(1+y(i)-t0(k) ; endendfor k=1:n+1 for j=1:m1+1 u(1 m2+1,j,k)=exp(0.5*x(j)-t(
4、k) exp(0.5*(1+x(j)-t(k); u0(1 m2+1,j,k)=exp(0.5*x(j)-t0(k) exp(0.5*(1+x(j)-t0(k); endendr=h2/(h1*h1);r1=2*(1-r);r2=2*(1+r);for k=1:n %外循环,先固定每一时间层,每一时间层上解一线性方程组% for i=2:m2 a=-r*ones(1,m1-1); c=a;a(1)=0;c(m1-1)=0; b=r2*ones(1,m1-1); d(1)=r*u0(i,1,k)+r*(u(i-1,2,k)+u(i+1,2,k)+r1*u(i,2,k)+. h2*f(i,2,k)
5、; for l=2:m1-2 d(l)=r*(u(i-1,l+1,k)+u(i+1,l+1,k)+r1*u(i,l+1,k)+. h2*f(i,l+1,k); %输入部分系数矩阵,为0的矩阵元素不输入%一定要注意输入元素的正确性 end d(m1-1)=r*u0(i,m1+1,k)+r*(u(i-1,m1,k)+u(i+1,m1,k). +r1*u(i,m1,k)+h2*f(i,m1,k); for l=1:m1-2 %开始解线性方程组 消元过程 a(l+1)=-a(l+1)/b(l); b(l+1)=b(l+1)+a(l+1)*c(l); d(l+1)=d(l+1)+a(l+1)*d(l);
6、 end u0(i,m1,k)=d(m1-1)/b(m1-1); %回代过程% for l=m1-2:-1:1 u0(i,l+1,k)=(d(l)-c(l)*u0(i,l+2,k)/b(l); end end for j=2:m1 a=-r*ones(1,m2-1); c=a;a(1)=0;c(m2-1)=0; b=r2*ones(1,m2-1); d(1)=r*u(1,j,k+1)+r*(u0(2,j-1,k)+u0(2,j+1,k)+r1*u0(2,j,k)+. h2*f(2,j,k); for l=2:m2-2 d(l)=r*(u0(l+1,j-1,k)+u0(l+1,j+1,k)+r1
7、*u0(l+1,j,k)+. h2*f(l+1,j,k); %输入部分系数矩阵,为0的矩阵元素不输入%一定要注意输入元素的正确性 end d(m2-1)=r*u(m2+1,j,k+1)+r*(u0(m2,j-1,k)+u0(m2,j+1,k). +r1*u0(m2,j,k)+h2*f(m2,j,k); for l=1:m2-2 %开始解线性方程组 消元过程 a(l+1)=-a(l+1)/b(l); b(l+1)=b(l+1)+a(l+1)*c(l); d(l+1)=d(l+1)+a(l+1)*d(l); end u(m2,j,k+1)=d(m2-1)/b(m2-1); %回代过程% for l
8、=m2-2:-1:1 u(l+1,j,k+1)=(d(l)-c(l)*u(l+2,j,k+1)/b(l); end endendfor k=1:n+1 for i=1:m2+1 for j=1:m1+1 p(i,j,k)=exp(0.5*(x(j)+y(i)-t(k); %p为精确解 e(i,j,k)=abs(u(i,j,k)-p(i,j,k); %e为误差 end endend2.function u p e x y t=ADI2(h1,h2,m1,m2,n)%ADI解二维抛物线型偏微分方程(D'Yakonov交替方向隐格式)%此程序用的是追赶法解线性方程组%h1为空间步长,h2为时
9、间步长%m1,m2分别为x方向,y方向网格数,n为时间网格数%p为精确解,u为数值解,e为误差%定义u0(i,j,k)=u'(i,j,k)(引入的过渡层),因为矩阵中,i,j,k必须全为整数x=(0:m1)*h1+0;y=(0:m2)*h1+0;t=(0:n)*h2+0;t0=(0:n)*h2+1/2*h2;%定义t0是为了f(x,y,t)=0的情况%for k=1:n+1 for i=1:m2+1 for j=1:m1+1 f(i,j,k)=-1.5*exp(0.5*(x(j)+y(i)-t0(k); %编程时-t0(k)写成了+t0(k),导致错误; end endend%初始条件
10、for i=1:m2+1 for j=1:m1+1 u(i,j,1)=exp(0.5*(x(j)+y(i); endend%边界条件for k=1:n+1 for i=1:m2+1 u(i,1 m1+1,k)=exp(0.5*y(i)-t(k) exp(0.5*(1+y(i)-t(k); endendr=h2/(h1*h1);r4=1+r;r5=r/2;for k=1:n for i=2:m2 u0(i,1 m1+1,k)=r4*u(i,1 m1+1,k+1)-r5*(u(i-1,1 m1+1,. k+1)+u(i+1,1 m1+1,k+1); endendfor k=1:n+1 for j=
11、1:m1+1 u(1 m2+1,j,k)=exp(0.5*x(j)-t(k) exp(0.5*(1+x(j)-t(k); endendr1=r-r*r;r2=2*(r-1)*(r-1);r3=r*r/2;for k=1:n %外循环,先固定每一时间层,每一时间层上解一线性方程组% for i=2:m2 a=-r*ones(1,m1-1); c=a;a(1)=0;c(m1-1)=0; b=2*r4*ones(1,m1-1); d(1)=r*u0(i,1,k)+r1*(u(i-1,2,k)+u(i,1,k)+u(i+1,2,k)+. u(i,3,k)+r2*u(i,2,k)+r3*(u(i-1,1
12、,k)+. u(i+1,1,k)+u(i-1,3,k)+u(i+1,3,k)+2*h2*f(i,2,k); for l=2:m1-2 d(l)=r1*(u(i-1,l+1,k)+u(i,l,k)+u(i+1,l+1,k)+. u(i,l+2,k)+r2*u(i,l+1,k)+r3*(u(i-1,l,k)+. u(i+1,l,k)+u(i-1,l+2,k)+u(i+1,l+2,k)+2*h2*f(i,l+1,k); %输入部分系数矩阵,为0的矩阵元素不输入%一定要注意输入元素的正确性 end d(m1-1)=r*u0(i,m1+1,k)+r1*(u(i-1,m1,k)+u(i,m1-1,k)+.
13、 u(i+1,m1,k)+u(i,m1+1,k)+r2*u(i,m1,k)+. r3*(u(i-1,m1-1,k)+. u(i+1,m1-1,k)+u(i-1,m1+1,k)+u(i+1,m1+1,k)+2*h2*f(i,m1,k); for l=1:m1-2 %开始解线性方程组 消元过程 a(l+1)=-a(l+1)/b(l); b(l+1)=b(l+1)+a(l+1)*c(l); d(l+1)=d(l+1)+a(l+1)*d(l); end %回代过程% u0(i,m1,k)=d(m1-1)/b(m1-1); for l=m1-2:-1:1 u0(i,l+1,k)=(d(l)-c(l)*u
14、0(i,l+2,k)/b(l); end end for j=2:m1 a=-r*ones(1,m2-1); c=a;a(1)=0;c(m2-1)=0; b=2*r4*ones(1,m2-1); d(1)=r*u(1,j,k+1)+2*u0(2,j,k); for l=2:m2-2 d(l)=2*u0(l+1,j,k); %输入部分系数矩阵,为0的矩阵元素不输入%一定要注意输入元素的正确性 end d(m2-1)=2*u0(m2,j,k)+r*u(m2+1,j,k+1); for l=1:m2-2 %开始解线性方程组 消元过程 a(l+1)=-a(l+1)/b(l); b(l+1)=b(l+1
15、)+a(l+1)*c(l); d(l+1)=d(l+1)+a(l+1)*d(l); end u(m2,j,k+1)=d(m2-1)/b(m2-1); %回代过程% for l=m2-2:-1:1 u(l+1,j,k+1)=(d(l)-c(l)*u(l+2,j,k+1)/b(l); end endendfor k=1:n+1 for i=1:m2+1 for j=1:m1+1 p(i,j,k)=exp(0.5*(x(j)+y(i)-t(k); %p为精确解 e(i,j,k)=abs(u(i,j,k)-p(i,j,k); %e为误差 end endend3.function u u0 p e x
16、y t=ADI5(h1,h2,m1,m2,n)%ADI解二维抛物线型偏微分方程(P-R交替隐式,未截断)%此程序用的是追赶法解线性方程组%h1为空间步长,h2为时间步长%m1,m2分别为x方向,y方向网格数,n为时间网格数%p为精确解,u为数值解,e为误差%定义u0(i,j,k)=u(i,j,k+1/2),因为矩阵中,i,j,k必须全为整数x=(0:m1)*h1+0;%定义x0,y0,t0是为了f(x,t)=0的情况%y=(0:m2)*h1+0;t=(0:n)*h2+0; t0=(0:n)*h2+1/2*h2;for k=1:n+1 for i=1:m2+1 for j=1:m1+1 f(i,
17、j,k)=-1.5*exp(0.5*(x(j)+y(i)-t0(k); end endendfor i=1:m2+1 for j=1:m1+1 u(i,j,1)=exp(0.5*(x(j)+y(i); endendfor k=1:n+1 for i=1:m2+1 u(i,1 m1+1,k)=exp(0.5*y(i)-t(k) exp(0.5*(1+y(i)-t(k); u1(i,1 m1+1,k)=exp(0.5*y(i)-t0(k) exp(0.5*(1+y(i)-t0(k) ; endendr=h2/(h1*h1);r1=2*(1-r);r2=r/4;r3=2*(1+r);for k=1:
18、n for i=2:m2 u0(i,1 m1+1,k)=u1(i,1 m1+1,k)-r2*(u(i-1,1 m1+1,k+1)-. 2*u(i,1 m1+1,k+1)+u(i+1,1 m1+1,k+1)-u(i-1,1 m1+1,k)+. 2*u(i,1 m1+1,k)-u(i+1,1 m1+1,k); endendfor k=1:n+1 for j=1:m1+1 u(1 m2+1,j,k)=exp(0.5*x(j)-t(k) exp(0.5*(1+x(j)-t(k); endendfor k=1:n %外循环,先固定每一时间层,每一时间层上解一线性方程组% for i=2:m2 a=-r*
19、ones(1,m1-1); c=a;a(1)=0;c(m1-1)=0; b=r3*ones(1,m1-1); d(1)=r*u0(i,1,k)+r*(u(i-1,2,k)+u(i+1,2,k)+r1*u(i,2,k)+. h2*f(i,2,k); for l=2:m1-2 d(l)=r*(u(i-1,l+1,k)+u(i+1,l+1,k)+r1*u(i,l+1,k)+. h2*f(i,l+1,k); %输入部分系数矩阵,为0的矩阵元素不输入%一定要注意输入元素的正确性 end d(m1-1)=r*u0(i,m1+1,k)+r*(u(i-1,m1,k)+u(i+1,m1,k). +r1*u(i,
20、m1,k)+h2*f(i,m1,k); for l=1:m1-2 %开始解线性方程组 消元过程 a(l+1)=-a(l+1)/b(l); b(l+1)=b(l+1)+a(l+1)*c(l); d(l+1)=d(l+1)+a(l+1)*d(l); end u0(i,m1,k)=d(m1-1)/b(m1-1); %回代过程% for l=m1-2:-1:1 u0(i,l+1,k)=(d(l)-c(l)*u0(i,l+2,k)/b(l); end end for j=2:m1 a=-r*ones(1,m2-1); c=a;a(1)=0;c(m2-1)=0; b=r3*ones(1,m2-1); d(
21、1)=r*u(1,j,k+1)+r*(u0(2,j-1,k)+u0(2,j+1,k)+r1*u0(2,j,k)+. h2*f(2,j,k); for l=2:m2-2 d(l)=r*(u0(l+1,j-1,k)+u0(l+1,j+1,k)+r1*u0(l+1,j,k)+. h2*f(l+1,j,k); %输入部分系数矩阵,为0的矩阵元素不输入%一定要注意输入元素的正确性 end d(m2-1)=r*u(m2+1,j,k+1)+r*(u0(m2,j-1,k)+u0(m2,j+1,k). +r1*u0(m2,j,k)+h2*f(m2,j,k); for l=1:m2-2 %开始解线性方程组 消元过
22、程 a(l+1)=-a(l+1)/b(l); b(l+1)=b(l+1)+a(l+1)*c(l); d(l+1)=d(l+1)+a(l+1)*d(l); end u(m2,j,k+1)=d(m2-1)/b(m2-1); %回代过程% for l=m2-2:-1:1 u(l+1,j,k+1)=(d(l)-c(l)*u(l+2,j,k+1)/b(l); end endendfor k=1:n+1 for i=1:m2+1 for j=1:m1+1 p(i,j,k)=exp(0.5*(x(j)+y(i)-t(k); %p为精确解 e(i,j,k)=abs(u(i,j,k)-p(i,j,k); %e为
23、误差 end endend up e x y t=ADI2(0.01,0.001,100,100,1000);surf(x,y,e(:,:,1001) t=1的误差曲面下面是三种方法的误差比较:1.u u0 p e x y t=ADI1(0.1,0.1,10,10,10)(P-R交替隐式,截断)截断中间过渡层用u(i,j,k+1/2)代替)(t=1时的误差)2.u u0 p e x y t=ADI5(0.1,0.1,10,10,10)(P-R交替隐式,未截断)(未截断过渡层u(i,j,)=u(i,j,k+1/2)-h22/4*dy2dtu(i,j,k+1/2);)3.u p e x y t=A
24、DI2(0.1,0.1,10,10,10)(D'Yakonov交替方向隐格式) surf(x,y,e(:,:,11)(表示t=1时的误差)下面是相关数据:1: u u0 p e x y t=ADI1(0.1,0.1,10,10,10)(P-R交替隐式,截断)截断 中间过渡层用u(i,j,k+1/2)代替)e(:,:,11) = Columns 1 through 6 0 0 0 0 0 0 0 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0 0. 0. 0. 0.
25、0. 0 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0 0 0 0 0 02.u u0 p e x y t=ADI5(0.1,0.1,10,10,10)(P-R交替隐式,未截断)(未截断过渡层u(i,j,)=u(i,j,k+1/2)-h22/4*dy2dtu(i,j,k+1/2);)e(:,:,11) = Columns 1 through 6 0 0 0 0 0 0 0 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0
26、 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0 0. 0. 0. 0. 0. 0 0 0 0 0 03.u p e x y t=ADI2(0.1,0.1,10,10,10)(D'Yakonov交替方向隐格式)e(:,:,11) = Columns 1 through 6 0 0 0 0 0 0 0 8.6469e-006 1.4412e-005 1.8364e-005 2.091e-005 2.2174e-005 0 1.4412e-005 2.4777e-005 3.2047e-005 3.6716e-005 3.8961e-0
27、05 0 1.8364e-005 3.2047e-005 4.1789e-005 4.8054e-005 5.1008e-005 0 2.091e-005 3.6716e-005 4.8054e-005 5.5353e-005 5.8764e-005 0 2.2174e-005 3.8961e-005 5.1008e-005 5.8764e-005 6.2389e-005 0 2.2118e-005 3.8698e-005 5.0523e-005 5.8126e-005 6.171e-005 0 2.055e-005 3.5581e-005 4.6157e-005 5.2942e-005 5.6197e-005 0 1.707e-005 2.8951e-005 3.7128e-005 4.2365e-005 4.4952e-005 0 1.0851e-005 1.7698e-005 2.2265e-005 2.5203e-005 2.672e-005 0 0 0 0 0 01.u u0 p e x y t=ADI1(0.1,0.1,10,10,10)(P-R交替隐式,截断)截断 中间过渡层用u(i,j,k+1/2)代替) Columns 7 through 11 0 0 0 0 0 0. 0. 0. 0. 0 0. 0. 0. 0.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖南常德桃源县惠民中小企业融资担保有限公司招聘2人笔试参考题库附带答案详解
- 2026及未来5年中国2-萘胺-3,6,8-三磺酸市场数据分析及竞争策略研究报告
- 眉山市2025下半年中共四川天府新区眉山工作委员会党群工作部四川天府新区眉山教育笔试历年参考题库典型考点附带答案详解
- 2026乌鲁木齐市辅警招聘考试题库及答案
- 2025-2030中国化学制剂行业市场全景调研及投资价值评估咨询报告
- 2025-2030高端微电子锡基焊粉材料行业发展机遇及投资策略深度研究研究报告
- 2025-2030中国心脏保健胶囊市场供需现状及战略规划投资可行性研究报告
- 2026中国智能控制器行业运营态势及投资盈利预测报告
- 2025-2030中国偏硅酸矿泉水市场营销策略及前景竞争优势分析研究报告
- 2026中国半导体超高纯度(UHP)阀门行业运行态势与应用前景预测报告
- 2026年广东广州市高三二模高考数学试卷试题(含答案详解)
- 2025广东潮州府城文化旅游投资集团有限公司及其下属企业招聘8人笔试历年参考题库附带答案详解
- 2026山东日照银行烟台分行社会招聘备考题库完整参考答案详解
- 2026年高考历史高分冲刺学习指南
- 商场消防教育培训制度
- 心包积液诊疗指南(2025年版)
- 2025年四川省达州市中考物理模拟试题(试卷+解析)
- 2026浙江浙大圆正科技创新服务有限公司招聘中层管理人员1人笔试参考题库及答案解析
- 2026春教科版一年级下册科学《身边的物体》教案
- 《汽车轮毂单元》
- 五金厂IPQC培训课件
评论
0/150
提交评论