计算地球物理学
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
地球物理计算方法重难点题库
一、双曲线形方程算法和程序:
在如下问题中,对下列给定定值,用程序求解波动方程u x(x,t)=c2u xx(x,t),其中0≤x≤a且0≤t≤b,边界条件为:
u(0,t)=0且u(a,t)=0, 0≤t≤b
u(x,0)=f(x), 0≤x≤a
(x,0)=g(x), 0≤x≤a
u
x
用surf和contour命令画图得到近似值解。
1.设a=1,b=1,c=1,f(x)=sin(πx),g(x)=0。为了方便起见,选择
h=0.1,k=0.1。
2.设a=1,b=1,c=2,f(x)=x-x2,g(x)=0。为了方便起见,选择h=0.1,k=0.05。
解:
程序代码:
function [ u,r ,x,y] = finedif( f,g,a,b,c,h,k )
%finedion 波动方程的差分方法程序
% f:初始条件方程,字符型(sring);
% g:边界条件方程,字符型(sring);
% a:位置x的上限[0,a];
% b:时间t的上限[0,b];
% c:方程系数;
% h:x的剖分步长;
% k:t的剖分步长;
n=a/h+1;
m=b/k+1;
r=c*k/h;
r2=r^2;
r22=r^2/2;
s1=1-r^2;
s2=2-2*r^2;
U=zeros(n,m);
%赋值边界条件
for i=2:n-1
U(i,1)=feval(f,h*(i-1));
U(i,2)=s1*feval(f,h*(i-1))+k*feval(g,h*(i-1))+r22*(feval( f,h*i)+feval(f,h*(i-2)));
end
%求取个点数值
for j=3:m
for i=2:(n-1)
U(i,j)=s2*U(i,j-1)+r2*(U(i-1,j-1)+U(i+1,j-1))-U(i,j-2);
end
end
u=U'
%坐标量展示:
x=0:h:a;
y=0:k:b
end
问题1:
稳定性条件分析与运算结果:
r=1 结果稳定
结果图展示:
问题2:
稳定性条件分析与运算结果:r=1 结果稳定
结果图展示:
二、抛物型方程的算法和程序:
求解热传导方程:u
t (x,t)=c2u
xx
(x,t),其中0 u(x,0)=f(x),边界条件为:u(0,t)=g 1(t),u(1,t)=g 2 (x)。对给定的值使用surf 和contour命令画近似解。 1、使用f(x)=sin(πx)+sin(2πx), g 1(x)=g 2 (x)=0, h=0.1,k=0.005. 2、使用f(x)=3-|3x-1|-|3x-2|, g 1(x)=t2 ,g 2 (x)=e’, h=0.1,k=0.005. 解: 程序代码: function [ u,r,x,y ] = forwdif(f,g1,g2,a,b,c,h,k ) % forwdif抛物线型方程的解法¨ % f:初始条件,字符型(string); % g1,g2:左右边界条件,字符型(string); % a:位置上限[0,a]; % b:时间上线[0,b]; % c:方程系数; % h,k:位置和时间的剖分步长; n=a/h+1; m=b/k+1; r=c^2*k/h^2; s=1-2*r; U=zeros(n,m); %¸赋值边界条件 U(n,1:m)=feval(g2,0:k:b); U(1,1:m)=feval(g1,0:k:b); %¸赋值初始条件 U(2:n-1,1)=feval(f,h:h:(n-2)*h)'; %计算 for j=2:m for i=2:n-1 U(i,j)=s*U(i,j-1)+r*(U(i-1,j-1)+U(i+1,j-1)); end end end u=U' 问题1: 稳定性条件分析与运算结果:r=0.5 结果稳定 结果图展示: 问题2: 稳定性条件分析与运算结果:r=0.5 结果稳定 三、椭圆形方程算法和程序: 1、(a)用程序计算5*5的网格,确定9个未知数平p1、p2……p9的方程组,来求解矩形区域R={(x,y)|0≤x≤4,0≤y≤4}内的谐波函数u(x,y)的近似值。,边界为: u(x,0)=10和u(x,4)=120,0 u(0,y)=90和u(4,y)= 40,0 (b)用9*9的网格求解近似解。 2、用程序计算矩形区域R={(x,y)|0≤x≤1.5,0≤y≤1.5}内的谐波函数u(x,y)的近似值,h=0.15,边界为: u(x,0)=x4和u(x,4)=x4-13.5x2+5.0625,0 u(0,y)=y4和u(4,y)=y4-13.5y4+5.0625,0 程序代码: function [u,w,x,y ] = dirich( f1,f2,f3,f4,a,b,h,tol,max1) %function:椭圆型方程的差分法 %f1,f2,f3,f4:边界条件,字符型(string) %a,b:x,y上限值; %h:步长 n=fix(a/h)+1; m=fix(b/h)+1; ave=(a*(feval(f1,0)+feval(f2,0)) +b*(feval(f3,0)+feval(f4,0)))/(2*a+2*b); U=ave*ones(n,m); %边界条件赋值 U(1,1:m)=feval(f3,0:h:(m-1)*h)'; U(n,1:m)=feval(f4,0:h:(m-1)*h)'; U(1:n,1)=feval(f1,0:h:(n-1)*h); U(1:n,m)=feval(f2,0:h:(n-1)*h); U(1,1)=(U(1,2)+U(2,1))/2; U(1,m)=(U(1,m-1)+U(2,m))/2; U(n,1)=(U(n-1,1)+U(n,2))/2; U(n,m)=(U(n-1,m)+U(n,m-1))/2; %SOR parameter(超松弛因子) w=4/(2+sqrt(4-(cos(pi/(n-1))+cos(pi/(m-1)))^2)); %计算 err=1; cnt=0; while((err>tol) & (cnt<=max1)) err=0; for j=2:m-1 for i=2:n-1 relx=w*(U(i,j+1)+U(i,j-1)+U(i+1,j)+U(i-1,j)-4*U(i,j))/4; U(i,j)=U(i,j)+relx; if (err<=abs(relx)) err=abs(relx); end end end cnt=cnt+1; end u=flipud(U');