文档库 最新最全的文档下载
当前位置:文档库 › MATLAB平差程序

MATLAB平差程序

MATLAB平差程序
MATLAB平差程序

function BJPC2

ZB=[];ZJ=[];BC=[];

%%

format long

[filename,filepath]=uigetfile('*.txt','选择平差文件:'); name=[filepath filename];

fid1=fopen(name,'rt');

if(fid1==-1)

disp('文件未打开,请重试!');

return;

end

n=fscanf(fid1,'%f',1);%输入边的个数

b=fscanf(fid1,'%f',1);%输入多余观测个数

E=fscanf(fid1,'%f',1);%输入测角中误差

t=fscanf(fid1,'%f',1);%输入坐标个数

ZB=fscanf(fid1,'%f',[2 t]);

dms1=fscanf(fid1,'%f',[3 n+1]);

BC=fscanf(fid1,'%f',[1 n]);

T0=fscanf(fid1,'%f',1);

T1=fscanf(fid1,'%f',1);

fclose(fid1);

dms=dms1';

ZJ=dms2degrees(dms);

%%

if t==2

T0=T0;%若告诉起始方位角就直接输入

end

if t==4 %若没有告诉起始方位角由坐标反算

Xa=ZB(1,1);Xb=ZB(1,2);

Ya=ZB(2,1);Yb=ZB(2,2);

Tx=Xb-Xa; Ty=Yb-Ya;

T0=atan(Ty/Tx)*180/pi;%对方位角的讨论

if ((Tx>0)&&(Ty>0))

T0;

end

if (((Tx<0)&&(Ty>0))||((Tx<0)&&(Ty<0)))

T0=T0+180;

end

if ((Tx>0)&&(Ty<0))

T0=T0+360;

end

if ((Tx==0)&&(Ty>0))

T0=90;

end

if ((Tx==0)&&(Ty<0))

T0=270;

end

if((Ty==0)&&(Tx>0))

T0=0;

end

if ((Ty==0)&&(Tx<0))

T0=180;

end

end

a0=T0;

x0=ZB(1,t/2);

y0=ZB(2,t/2);

A=[0,0];

FWJ=[];%开始计算近似方位角

J=1;

while(J<=n+1)

belta=ZJ(J);%讨论方位角

if J==1

a=a0+belta;

else

a=a+belta;

end

if a>=180

a=a-180;

else

a=a+180;

end

if a>=360

a=a-360;

end

FWJ(J)=a;

J=J+1;

end

FWJ;

%%

J=1;%开始计算近似坐标A

while(J<=n)

if J==1

A(1,1)=x0+BC(1)*cos(FWJ(1)*pi/180);

A(2,1)=y0+BC(1)*sin(FWJ(1)*pi/180);

else

A(1,J)=A(1,J-1)+BC(J)*cos(FWJ(J)*pi/180); A(2,J)=A(2,J-1)+BC(J)*sin(FWJ(J)*pi/180);

end

J=J+1;

end

A;

%%

W=[];%开始计算闭合差

if t==2

T1=T1;

end

if t==4

Xa=ZB(1,3);Xb=ZB(1,4);

Ya=ZB(2,3);Yb=ZB(2,4);

Tx=Xb-Xa; Ty=Yb-Ya;

T1=atan(Ty/Tx)*180/pi;

if ((Tx>0)&&(Ty>0))

T1;

end

if (((Tx<0)&&(Ty>0))||((Tx<0)&&(Ty<0)))

T1=T1+180;

end

if ((Tx>0)&&(Ty<0))

T1=T1+360;

end

if ((Tx==0)&&(Ty>0))

T1=90;

end

if ((Tx==0)&&(Ty<0))

T1=270;

end

if((Ty==0)&&(Tx>0))

T1=0;

end

if ((Ty==0)&&(Tx<0))

T1=180;

end

end

W(1,1)=-(FWJ(n+1)-T1)*3600;%以秒为单位

W(2,1)=-(A(1,n)-ZB(1,t/2+1))*100;%以厘米为单位

W(3,1)=-(A(2,n)-ZB(2,t/2+1))*100;

W;

%%

XS=zeros(3,2*n+1);%开始计算系数阵,XS是系数阵

e=n+1;

while(e<=2*n+1)

XS(1,e)=1;

e=e+1;

end

f=1;

while(f<=n)

XS(2,f)=cos(FWJ(f)*pi/180);%纵坐标边长改正数的系数 XS(3,f)=sin(FWJ(f)*pi/180);%横坐标边长改正数的系数 f=f+1;

end

u=1;

y0=A(2,n);

x0=A(1,n);

Y=[];

X=[];

y1=[];

x1=[];

while(u<=n+1)

if u==1

Y(1)=ZB(2,t/2);

X(1)=ZB(1,t/2);

else

Y(u)=A(2,u-1);

X(u)=A(1,u-1);

end

u=u+1;

end

y1=-1/2062.65*(y0-Y);%纵坐标转角改正数的系数x1=1/2062.65*(x0-X);%横坐标转角改正数的系数y1;

x1;

d=n+1;

z=1;

while(d<=2*n+1)

XS(2,d)=y1(1,z);

XS(3,d)=x1(1,z);

d=d+1;

z=z+1;

end

XS;

%%

r=[];

h=1;

while (h<=n)

s=(5+5*BC(h)/1000)/10;%求中误差厘米为单位

r(h)=E^2/s^2;%计算距离的权

h=h+1;

end

aa=[];

y=1;

while(y<=n)

aa(y)=r(y);%将距离的权赋给矩阵aa

y=y+1;

end

c=n+1;

while(c<=2*n+1)

aa(c)=1;%转角的权都是1

c=c+1;

end

P=diag(aa);%形成权阵

P;

%%

Q=inv(P);

N=XS*Q*XS';

N1=inv(N);

K=inv(N)*W;

V=Q*XS'*K;

V;

BC1=BC'+V(1:n)/100;%将改正数加到观测值以求平差边长(除一百统一单位)ZJ1=ZJ+V(n+1:2*n+1)/3600;%同上

BC1;

i=1;

while (i<=n+1)

ZJ2(i,1)=fix(ZJ(i));

ZJ2(i,2)=fix((ZJ(i)-fix(ZJ(i)))*60);

ZJ2(i,3)=((ZJ(i)-fix(ZJ(i)))*60-fix((ZJ(i)-fix(ZJ(i)))*60))*60;

i=i+1;

end

ZJ2;

%%

A1=[0,0];

FWJ1=[];

J=1;

while(J<=n+1)

belta=ZJ1(J);

if J==1

a=a0+belta;

else

a=a+belta;

end

if a>=180

a=a-180;

else

a=a+180;

end

if a>=360

a=a-360;

end

FWJ1(J)=a;

J=J+1;

end

i=1;

while (i<=n+1)

FWJ3(i,1)=fix(FWJ(i));

FWJ3(i,2)=fix((FWJ(i)-fix(FWJ(i)))*60);

FWJ3(i,3)=((FWJ(i)-fix(FWJ(i)))*60-fix((FWJ(i)-fix(FWJ(i)))*60))*60;

FWJ2(i,1)=fix(FWJ1(i));

FWJ2(i,2)=fix((FWJ1(i)-fix(FWJ1(i)))*60);

FWJ2(i,3)=((FWJ1(i)-fix(FWJ1(i)))*60-fix((FWJ1(i)-fix(FWJ1(i)))*60))*60; i=i+1;

end

FWJ3;

FWJ2;

%%

J=1;%开始计算平差坐标A1

while(J<=n)

if J==1

A1(1,1)=ZB(1,t/2)+BC1(1)*cos(FWJ1(1)*pi/180);

A1(2,1)=ZB(2,t/2)+BC1(1)*sin(FWJ1(1)*pi/180);

else

A1(1,J)=A1(1,J-1)+BC1(J)*cos(FWJ1(J)*pi/180);

A1(2,J)=A1(2,J-1)+BC1(J)*sin(FWJ1(J)*pi/180);

end

J=J+1;

end

A1;

m=sqrt(V'*P*V/b);%测量精度单位权中误差。

%% 输出导线平差结果%%%%%%%%%%%%%%%%%%%%%%%%%%

disp('导线平差结果如下:');

disp('具体见工作目录result.txt');

fprintf('\n');

disp('近似方位角是:');FWJ3 %近似方位角

disp('近似坐标是:');A %近似坐标

disp('闭合差是:');W %闭合差

disp('权阵是:');P %权阵

disp('条件方程的系数阵是:');XS %系数

disp('法方程N:');N %

disp('N的逆:');N1 %

disp('法方程K:');K %

disp('改正数是:');V %改正数

disp('边长平差值是:'); BC1 %边长平差值

disp('转角平差值是:'); ZJ2 %转角平差值

disp('平差方位角是:'); FWJ2 %平差方位角

disp('平差坐标是:');A1 %平差坐标

disp('单位权中误差是:');m %单伟权

fid2=fopen('result.txt','wt'); %% wt不同于w或是w+,\n不能识别

if(fid2==-1)

disp('创建result文件未成功,请重试!');

return;

end

fprintf(fid2,'1.近似方位角是:\n 度分秒\n');

for i=1:n+1

fprintf(fid2,'%5d %5d %5.4f \n',FWJ3(i,1),FWJ3(i,2),FWJ3(i,3));

end

fprintf(fid2,'2.导线坐标近似值:\n x坐标 y坐标(m)\n');

for i=1:n

fprintf(fid2,'%5.4f %5.4f\n',A(1,i),A(2,i));

end

fprintf(fid2,'3.导线闭合差值:\n 角度(秒) x坐标 y坐标(m)\n');

fprintf(fid2,'%5.4f %5.4f %5.4f\n',W(1),W(2),W(3));

fprintf(fid2,'4.权阵:\n ');

for i=1:2*n+1

fprintf(fid2,'%5.4f\n',P(i,i));

end

fprintf(fid2,'5.系数阵值:\n 第一列第二列第三列\n');

for i=1:2*n+1

fprintf(fid2,'%5.4f %5.4f %5.4f\n',XS(1,i),XS(2,i),XS(3,i)); end

fprintf(fid2,'6.改正数值:\n 边长(厘米)转角(秒)\n');

for i=1:2*n+1

fprintf(fid2,'%5.4f\n',V(i));

end

fprintf(fid2,'7.导线边长平差结果: \n 边长\n');

for i=1:n

fprintf(fid2,'%5.4f \n',BC1(i));

end

fprintf(fid2,'8.导线转角平差结果: \n 度分秒\n');

for i=1:n+1

fprintf(fid2,'%5d %5d %5.4f \n',ZJ2(i,1),ZJ2(i,2),ZJ2(i,3)); end

fprintf(fid2,'9.平差方位角是:\n 度分秒\n');

for i=1:n+1

fprintf(fid2,'%5d %5d %5.4f \n',FWJ2(i,1),FWJ2(i,2),FWJ2(i,3)); end

fprintf(fid2,'10.导线坐标平差值:\n x坐标 y坐标(m)\n');

for i=1:n

fprintf(fid2,'%5.4f %5.4f\n',A1(1,i),A1(2,i));

end

fprintf(fid2,'11.单位权中误差m= %5.4f秒\n',m); fclose(fid2);

%%%%%%%%%%%%%%%%%% 刘峰所作 %%%%%%%%%%%%%%%%%%%%%%%

有限差分法求解偏微分方程MATLAB教学教材

有限差分法求解偏微分方程M A T L A B

南京理工大学 课程考核论文 课程名称:高等数值分析 论文题目:有限差分法求解偏微分方程姓名:罗晨 学号: 115104000545 成绩: 有限差分法求解偏微分方程

一、主要内容 1.有限差分法求解偏微分方程,偏微分方程如一般形式的一维抛物线型方程: 22(,)()u u f x t t x αα??-=??其中为常数 具体求解的偏微分方程如下: 22001 (,0)sin()(0,)(1,)00 u u x t x u x x u t u t t π???-=≤≤?????? =??? ==≥??? 2.推导五种差分格式、截断误差并分析其稳定性; 3.编写MATLAB 程序实现五种差分格式对偏微分方程的求解及误差分析; 4.结论及完成本次实验报告的感想。 二、推导几种差分格式的过程: 有限差分法(finite-difference methods )是一种数值方法通过有限个微分方程近似求导从而寻求微分方程的近似解。有限差分法的基本思想是把连续的定解区域用有限个离散点构成的网格来代替;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解。 推导差分方程的过程中需要用到的泰勒展开公式如下: ()2 100000000()()()()()()()......()(()) 1!2!! n n n f x f x f x f x f x x x x x x x o x x n +'''=+-+-++-+- (2-1) 求解区域的网格划分步长参数如下:

【毕业设计(论文)】二维热传导方程有限差分法的MATLAB实现

第1章前言 1.1问题背景 在史策教授的《一维热传导方程有限差分法的MATLAB实现》和曹刚教授的《一维偏微分方程的基本解》中,对偏微分方程的解得MATLAB实现问题进行过研究,但只停留在一维中,而实际中二维和三维的应用更加广泛。诸如粒子扩散或神经细胞的动作电位。也可以作为某些金融现象的模型,诸如布莱克-斯科尔斯模型与Ornstein-uhlenbeck过程。热方程及其非线性的推广形式也被应用与影响分析。 在科学和技术发展过程中,科学的理论和科学的实验一直是两种重要的科学方法和手段。虽然这两种科学方法都有十分重要的作用,但是一些研究对象往往由于他们的特性(例如太大或太小,太快或太慢)不能精确的用理论描述或用实验手段来实现。自从计算机出现和发展以来,模拟那些不容易观察到的现象,得到实际应用所需要的数值结果,解释各种现象的规律和基本性质。 科学计算在各门自然科学和技术科学与工程科学中其越来越大的作用,在很多重要领域中成为不可缺少的重要工具。而科学与工程计算中最重要的内容就是求解科学研究和工程技术中出现的各种各样的偏微分方程或方程组。 解偏微分方程已经成为科学与工程计算的核心内容,包括一些大型的计算和很多已经成为常规的计算。为什么它在当代能发挥这样大的作用呢?第一是计算机本身有了很大的发展;第二是数值求解方程的计算法有了很大的发展,这两者对人们计算能力的发展都是十分重要的。 1.2问题现状 近三十年来,解偏微分方程的理论和方法有了很大的发展,而且在各个学科技术的领域中应用也愈来愈广泛,在我国,偏微分方程数值解法作为一门课程,不但在计算数学专业,而且也在其他理工科专业的研究生的大学生中开设。同时,求解热传导方程的数值算法也取得巨大进展,特别是有限差分法方面,此算法的特点是在内边界处设计不同于整体的格式,将全局的隐式计算化为局部的分段隐式计算。而且精度上更好。 目前,在欧美各国MATLAB的使用十分普及。在大学的数学、工程和科学系科,MATLAB

一维导热方程 有限差分法 matlab实现

第五次作业(前三题写在作业纸上) 一、用有限差分方法求解一维非定常热传导方程,初始条件和边界条件见说明.pdf 文件,热扩散系数α=const , 22T T t x α??=?? 1. 用Tylaor 展开法推导出FTCS 格式的差分方程 2. 讨论该方程的相容性和稳定性,并说明稳定性要求对求解差分方程的影响。 3. 说明该方程的类型和定解条件,如何在程序中实现这些定解条件。 4. 编写M 文件求解上述方程,并用适当的文字对程序做出说明。(部分由网络搜索得到,添加,修改后得到。) function rechuandaopde %以下所用数据,除了t 的范围我根据题目要求取到了20000,其余均从pdf 中得来 a=0.00001;%a 的取值 xspan=[0 1];%x 的取值范围 tspan=[0 20000];%t 的取值范围 ngrid=[100 10];%分割的份数,前面的是t 轴的,后面的是x 轴的 f=@(x)0;%初值 g1=@(t)100;%边界条件一 g2=@(t)100;%边界条件二 [T,x,t]=pdesolution(a,f,g1,g2,xspan,tspan,ngrid);%计算所调用的函数 [x,t]=meshgrid(x,t); mesh(x,t,T);%画图,并且把坐标轴名称改为x ,t ,T xlabel('x') ylabel('t') zlabel('T') T%输出温度矩阵 dt=tspan(2)/ngrid(1);%t 步长 h3000=3000/dt;

h9000=9000/dt; h15000=15000/dt;%3000,9000,15000下,温度分别在T矩阵的哪些行T3000=T(h3000,:) T9000=T(h9000,:) T15000=T(h15000,:)%输出三个时间下的温度分布 %不再对三个时间下的温度-长度曲线画图,其图像就是三维图的截面 %稳定性讨论,傅里叶级数法 dx=xspan(2)/ngrid(2);%x步长 sta=4*a*dt/(dx^2)*(sin(pi/2))^2; if sta>0,sta<2 fprintf('\n%s\n','有稳定性') else fprintf('\n%s\n','没有稳定性') error end %真实值计算 [xe,te,Te]=truesolution(a,f,g1,g2,xspan,tspan,ngrid); [xe,te]=meshgrid(xe,te); mesh(xe,te,Te);%画图,并且把坐标轴名称改为xe,te,Te xlabel('xe') ylabel('te') zlabel('Te') Te%输出温度矩阵 %误差计算 jmax=1/dx+1;%网格点数 [rms]=wuchajisuan(T,Te,jmax) rms%输出误差

有限差分法的Matlab程序(椭圆型方程)

有限差分法的Matlab程序(椭圆型方程) function FD_PDE(fun,gun,a,b,c,d) % 用有限差分法求解矩形域上的Poisson方程 tol=10^(-6); % 误差界 N=1000; % 最大迭代次数 n=20; % x轴方向的网格数 m=20; % y轴方向的网格数 h=(b-a)/n; % x轴方向的步长 l=(d-c)/m; % y轴方向的步长 for i=1:n-1 x(i)=a+i*h; end % 定义网格点坐标 for j=1:m-1 y(j)=c+j*l; end % 定义网格点坐标 u=zeros(n-1,m-1); %对u赋初值 % 下面定义几个参数 r=h^2/l^2; s=2*(1+r); k=1; % 应用Gauss-Seidel法求解差分方程 while k<=N % 对靠近上边界的网格点进行处理 % 对左上角的网格点进行处理 z=(-h^2*fun(x(1),y(m-1))+gun(a,y(m-1))+r*gun(x(1),d)+r*u(1,m-2)+u(2,m-1))/s; norm=abs(z-u(1,m-1)); u(1,m-1)=z; % 对靠近上边界的除第一点和最后点外网格点进行处理 for i=2:n-2 z=(-h^2*fun(x(i),y(m-1))+r*gun(x(i),d)+r*u(i,m-2)+u(i+1,m-1)+u(i-1,m-1))/s; if abs(u(i,m-1)-z)>norm; norm=abs(u(i,m-1)-z); end u(i,m-1)=z; end % 对右上角的网格点进行处理 z=(-h^2*fun(x(n-1),y(m-1))+gun(b,y(m-1))+r*gun(x(n-1),d)+r*u(n-1,m-2)+u(n-2,m-1))/s; if abs(u(n-1,m-1)-z)>norm norm=abs(u(n-1,m-1)-z); end u(n-1,m-1)=z; % 对不靠近上下边界的网格点进行处理 for j=m-2:-1:2 % 对靠近左边界的网格点进行处理

电磁场实验一_有限差分法的matlab实现

电磁场与电磁波实验报告 实验项目:_______有限差分法__ ____ 班级:_____ __12电子2 ____ __ 实验日期:__2014年12月23日 姓名:___ _ __陈奋裕 __ __ 学号:___ ___1215106003 _____ 组员姓名:___ _ __ __ __ 组员学号:___ ___ _____ 指导教师:_ ____张海 ______

一、实验目的及要求 1、学习有限差分法的原理与计算步骤; 2、学习用有限差分法解静电场中简单的二维静电场边值问题; 3、学习用Matlab 语言描述电磁场与电磁波中内容,用matlab 求解问题并用图形表示出了,学习matlab 语言在电磁波与电磁场中的编程思路。 二、实验内容 理论学习:学习静电场中边值问题的数值法中的优先差分法的求解知识; 实践学习:学习用matlab 语言编写有限差分法计算二维静电场边值问题; 三、实验仪器或软件 电脑(WIN7)、Matlab7.11 四、实验原理 基本思想是把连续的定解区域用有限个离散点构成的网格来代替, 这些离散点称作网格的节点;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似, 积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组 , 解此方程组就可以得到原问题在离散点上的近似解。然后再利用插值方法便可以从离散解得到定解问题在整个区域上的近似解。 简单迭代法: 这一方法的求解过程是,先对场域内的节点赋予迭代初值(0),i j ?,这里上标(0)表示0次 (初始)近似值。然后按Laplace 方程 (k 1)(k)(k)(k)(k),1,,11,,11 []4 i j i j i j i j i j ?????+--++=+++(i,j=1,2,…) 进行反复迭代(k=0,1,2,…)。若当第N 次迭代以后,所有的内节点的相邻两次迭代值之间的最大误差不超过允许范围,即 (N)(N-1) ,,max|-|

matlab实现有限差分法计算电场强度(最新)

实验一:有限差分法研究静电场边值问题 实验报告人:年级和班级:学号: 1. 实验用软件工具: Matlab 2. 实验原理:电磁场课本P36-38 1)差分方程 2)差分方程组的解 简单迭代法 高斯-赛德尔迭代法 逐次超松弛法 3. 实验步骤: 1)简单迭代法 程序: hx=41;hy=21; v1=zeros(hy,hx); v1(hy,:)=zeros(1,hx); v1(1,:)=ones(1,hx)*100; v1(:,1)=zeros(hy,1); v1(:,hx)=zeros(hy,1); v1 v2=v1;maxt=1;t=0; k=0; while(maxt>1e-5) k=k+1; maxt=0; for i=2:hy-1 for j=2:hx-1 v2(i,j)=(v1(i,j+1)+v1(i+1,j)+v1(i-1,j)+v1(i,j-1))/4; t=abs(v2(i,j)-v1(i,j)); if(t>maxt) maxt=t;end end end v1=v2; end v2 k clf subplot(1,2,1),mesh(v2) axis([0,41,0,21,0,100]) subplot(1,2,2),contour(v2,15) hold on

axis([-1,42,-1,25]) plot([1,1,hx,hx,1],[1,hy+1,hy+1,1,1],'r') text(hx/2,0.3,'0V','fontsize',11); text(hx/2-0.5,hy+0.5,'100V','fontsize',11); text(-0.5,hy/2,'0V','fontsize',11); text(hx+0.3,hy/2,'0V','fontsize',11); hold off 当W=1e-5, 迭代次数:1401次 2)高斯-赛德尔迭代法 程序: hx=41;hy=21; v1=ones(hy,hx); v1(hy,:)=zeros(1,hx); v1(1,:)=ones(1,hx)*100; v1(:,1)=zeros(hy,1); v1(:,hx)=zeros(hy,1); v2=v1;maxt=1;t=0; k=0; while(maxt>1e-5) k=k+1; maxt=0; for i=2:hy-1 for j=2:hx-1 v2(i,j)=(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1))/4; t=abs(v2(i,j)-v1(i,j)); if(t>maxt) maxt=t;end end end v1=v2; end v2 k clf subplot(1,2,1),mesh(v2) axis([0,41,0,21,0,100]) subplot(1,2,2),contour(v2,15) hold on axis([-1,42,-1,25]) plot([1,1,hx,hx,1],[1,hy+1,hy+1,1,1],'r') text(hx/2,0.3,'0V','fontsize',11); text(hx/2-0.5,hy+0.5,'100V','fontsize',11); text(-0.5,hy/2,'0V','fontsize',11); text(hx+0.3,hy/2,'0V','fontsize',11); hold off

一维扩散方程的有限差分法matlab

一维扩散方程的有限差分法 ——计算物理实验作业七 陈万 ● 题目: 编程求解一维扩散方程的解 取1.0,1.0,1.0,10,0.1,0,1,1,0,1,1max 0222111======-=====τh D t a c b a c b a 。输出t=1,2,...,10时刻的x 和u(x),并与解析解u=exp(x+0.1t)作比较。 ● 主程序: % 一维扩散方程的有限差分法 clear,clc; %定义初始常量 a1 = 1; b1 = 1; c1 = 0; a2 = 1;b2 = -1; c2 = 0; a0 = 1.0; t_max = 10; D = 0.1; h = 0.1; tao = 0.1; %调用扩散方程子函数求解 u = diffuse_equation(a0,t_max,h,tao,D,a1,b1,c1,a2,b2,c2); ● 子程序1: function output = diffuse_equation(a0,t_max,h,tao,D,a1,b1,c1,a2,b2,c2) % 一维扩散方程的有限差分法,采用隐式六点差分格式(Crank-Nicolson) % a0: x 的最大值 % t:_max: t 的最大值 % h: 空间步长 % tao: 时间步长

% D:扩散系数 % a1,b1,c1是(x=0)边界条件的系数;a2,b2,c2是(x=a0)边界条件的系数x = 0:h:a0; n = length(x); t = 0:tao:t_max; k = length(t); P = tao * D/h^2; P1 = 1/P + 1; P2 = 1/P - 1; u = zeros(k,n); %初始条件 u(1,:) = exp(x); %求A矩阵的对角元素d d = zeros(1,n); d(1,1) = b1*P1+h*a1; d(2:(n-1),1) = 2*P1; d(n,1) = b2*P1+h*a2; %求A矩阵的对角元素下面一行元素e e = -ones(1,n-1); e(1,n-1) = -b2; %求A矩阵的对角元素上面一行元素f f = -ones(1,n-1); f(1,1) = -b1; R = zeros(k,n);%求R %追赶法求解

有限差分法求解偏微分方程MATLAB

南京理工大学 课程考核论文 课程名称:高等数值分析 论文题目:有限差分法求解偏微分方程姓名:罗晨 学号: 1 成绩: 有限差分法求解偏微分方程

一、主要内容 1.有限差分法求解偏微分方程,偏微分方程如一般形式的一维抛物线型方程: 22(,)()u u f x t t x αα??-=??其中为常数 具体求解的偏微分方程如下: 22001 (,0)sin()(0,)(1,)00 u u x t x u x x u t u t t π???-=≤≤?????? =??? ==≥??? 2.推导五种差分格式、截断误差并分析其稳定性; 3.编写MATLAB 程序实现五种差分格式对偏微分方程的求解及误差分析; 4.结论及完成本次实验报告的感想。 二、推导几种差分格式的过程: 有限差分法(finite-difference methods )是一种数值方法通过有限个微分方程近似求导从而寻求微分方程的近似解。有限差分法的基本思想是把连续的定解区域用有限个离散点构成的网格来代替;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解。 推导差分方程的过程中需要用到的泰勒展开公式如下: ()2100000000()()()()()()()......()(()) 1!2!! n n n f x f x f x f x f x x x x x x x o x x n +'''=+-+-++-+- (2-1) 求解区域的网格划分步长参数如下: 11k k k k t t x x h τ ++-=?? -=? (2-2) 2.1 古典显格式

有限差分法求解偏微分方程matlab

理工大学 课程考核论文 课程名称:高等数值分析 论文题目:有限差分法求解偏微分方程姓名:罗晨 学号:115104000545 成绩:

有限差分法求解偏微分方程 一、主要容 1.有限差分法求解偏微分方程,偏微分方程如一般形式的一维抛物线型方程: 22(,)()u u f x t t x αα??-=??其中为常数 具体求解的偏微分方程如下: 22001 (,0)sin()(0,)(1,)00 u u x t x u x x u t u t t π???-=≤≤?????? =??? ==≥??? 2.推导五种差分格式、截断误差并分析其稳定性; 3.编写MATLAB 程序实现五种差分格式对偏微分方程的求解及误差分析; 4.结论及完成本次实验报告的感想。 二、推导几种差分格式的过程: 有限差分法(finite-difference methods )是一种数值方法通过有限个微分方程近似求导从而寻求微分方程的近似解。有限差分法的基本思想是把连续的定解区域用有限个离散点构成的网格来代替;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解。 推导差分方程的过程中需要用到的泰勒展开公式如下: ()2100000000()()()()()()()......()(()) 1!2!! n n n f x f x f x f x f x x x x x x x o x x n +'''=+-+-++-+-

相关文档
相关文档 最新文档