收藏 分销(赏)

一维地下水运动MATLAB模拟.doc

上传人:二*** 文档编号:4591370 上传时间:2024-09-30 格式:DOC 页数:11 大小:238KB 下载积分:5 金币
下载 相关 举报
一维地下水运动MATLAB模拟.doc_第1页
第1页 / 共11页
本文档共11页,全文阅读请下载到手机保存,查看更方便
资源描述
(word完整版)一维地下水运动MATLAB模拟 Error! Bookmark not defined.Problem 1 The ground flow equation for 1D heterogeneous, isotropic porous medium with a constant aquifer thickness is given by: Where h(x,t) is the hydraulic head, T(x) is the transmissivity, and S is the storativity. The boundary conditions imposed are constant head hL (15m) and hR (5m) at the left and right ends of soil column, respectively. The initial condition is 0 or random number at each node. The length of aquifer is 1m (L=1m). The storativity is 1 (S = 1)。 Develop a MATLAB program which can handle a heterogeneous transmissivity field using the implicit method。 1) Test the program for the case of homogenous parameters, and compare the results with the results generated from flow equation with homogenous transmissivity field (i.e., ) 2) Test the program for patch- heterogeneous T field, which comprises a two—zone T field with a fivefold difference in transmissivity (T1=5T2, T1=0.01m2s—1, T2=0.002m2s-1 ; or, T1=0。2T2, T1=0。002m2s—1, T2=0。01m2s-1) and an interface in the middle of the domain。 Problem 1解答 1 理论推导 非均质一维地下水运动方程为: \* MERGEFORMAT (Error! Bookmark not defined.) 如右图,各个点的水头分别为,水头和之间水力传导系数为. 将方程(1)进行离散化:设,则 \* MERGEFORMAT Error! Bookmark not defined.(Error! Bookmark not defined.) (Error! Bookmark not defined.) \* MERGEFORMAT (3) Error! Bookmark not defined.(Error! Bookmark not defined.) 设 则 (Error! Bookmark not defined.) Error! Bookmark not defined.(Error! Bookmark not defined.) 所以: (5) 设, 则 , , \* MERGEFORMAT Error! Bookmark not defined.(Error! Bookmark not defined.) 2 编码实现 根据第一部分的理论推导编写代码 2.1 均质情况下一维地下水运动 function plot_Data = oneDimGroudwaterFlowHom(hL,hR,L,S,T,method,dx,dt) %% Finite difference method to solve 1—D flow equation %% Writed By Dongdong Kong, 2014—01—07 % Sun Yat-Sen University, Guangzhou, China % emal: kongdd@mail2.sysu。 % -—--—-————---——-—--—--—-——-—-——---—----————-—----—-——- % one dimension groundwater flow model script % which can handle a heterogeneous transmissivity field % ——-—--————----—-—--———-————-----——--—-——-———-——-—--—-— % because of T value, this function only suit for patch-heterogeneous T % field comprises a two—zone T field, or homogeneous field。 you can Modify % input discreted T value to suit other heterogeneous situation. % ——-—-—--————--—-————-————--—-———---——----——----—--——-- % hL % left constant hydraulic head (m) % hR % left constant hydraulic head (m) % L % the length of aquifer % S % storativity % T % transmissivity % method% ’forward’ or ’backward’ approximation % ---—--———-—-—————--------—-—-—-———-——---—--———-—-———-- x=0:dx:L; nx=length(x); w=T/S*dt/dx/dx; h=rand(nx,1); h(1)=hL; h(end)=hR; times = 100; Result = zeros(nx,times+1); if strcmp(method,’forward') %% forward approximation W=(1-2*w)*diag(ones(nx,1),0)+。.. w*diag(ones(nx-1,1),1)+。.。 w*diag(ones(nx-1,1),-1); W(1,1)=1;W(1,2)=0; W(nx,nx)=1;W(nx,nx-1)=0; for i=1:times+1 Result(:,i)=h; h=W*h; end elseif strcmp(method,'backward’) %% backward approximation w=T/S*dt/dx/dx; W=(1+2*w)*diag(ones(nx,1),0) - 。。。 w*diag(ones(nx—1,1),1) — 。。. w*diag(ones(nx-1,1),—1); W(1,1)=1;W(1,2)=0; W(nx,nx)=1;W(nx,nx-1)=0; for i=1:times+1 Result(:,i)=h; h=W\h; end else warning('error method input, method can be only set ’’forward’’,’'backward'’’) end figure timeID=[0 1 5 10 20 40 100]+1; plot_Data=Result(:,timeID); plot(x,plot_Data,'linewidth’,1。5) legend({’t= 0’,’t= 1’,’t= 5’,’t= 10','t= 20','t= 40',’t= 100’}) 2.2 非均质情况下一维地下水运动 function plot_Data = oneDimGroudwaterFlowHet(hL, hR, L, S, T) %% Finite difference method to solve 1-D flow equation %% Writed By Dongdong Kong, 2014—01-07 % Sun Yat-Sen University, Guangzhou, China % emal: kongdd@ % ——————---—-—-------———-——-—-—-----———---————-—————---- % one dimension groundwater flow model script % which can handle a heterogeneous transmissivity field % -—-——————-—----—-———--—--—------——--——--——-—---—-————- % because of T value, this function only suit for patch—heterogeneous T % field comprises a two—zone T field, or homogeneous field. you can Modify % input discreted T value to suit other heterogeneous situation. % —-—----—-—-------—-—----———-----——-----—————--——-————— % hL % left constant hydraulic head (m) % hR % left constant hydraulic head (m) % L % the length of aquifer % S % storativity % T % transmissivity % ——————------——--——--————----—-———-—-—-—--—-—--—--—-——- nx=50; x=linspace(0,L,nx*2+1); dx=x(2)-x(1); dt = 0.1; N = length(x); Ti=[repmat(T(1),1,nx),repmat(T(2),1,nx)]; W=zeros(N); w=dt/dx/dx/S; for i=2:N-1 W(i, i+1) =—w*Ti(i); W(i, i) =1+w*(Ti(i)+Ti(i—1)); W(i, i—1)=—w*Ti(i—1); end W(1,1)=1; W(end,end)=1; h=rand(N,1); h(1)=hL; h(end)=hR; times=10000; %simualtion times Result=zeros(N,times+1); figure,hold on for i=1:times+1 Result(:,i)=h; h=W\h; end timeID=[0 1 5 10 20 40 100 1000]*10+1; plot_Data=Result(:,timeID); plot(x,plot_Data,'linewidth’,1.5) legend({'t= 0’,'t= 1',’t= 5',’t= 10',’t= 20',’t= 40','t= 100',’t=1000'}) 2.3 主函数 clear,clc %% Writed By Dongdong Kong, 2014-12-30 % one dimension groundwater flow model script % which can handle a heterogeneous transmissivity field hL = 15; % left constant hydraulic head (m) hR = 5; % left constant hydraulic head (m) L = 1; % the length of aquifer S = 1; % storativity % # question1.1 dt=1; dx=0.2; %for delta_w 〈 0.5 T=0.01; method=’forward'; Hom_forward = oneDimGroudwaterFlowHom(hL,hR,L,S,T,method,dx,dt); dx=0.01; T=0。01; method=’backward’; Hom_backward = oneDimGroudwaterFlowHom(hL,hR,L,S,T,method,dx,dt); T=[0。01 0.01]; Hom = oneDimGroudwaterFlowHet(hL,hR,L,S,T); % # question1。2 T=[0。01 0.002]; Het_situ1 = oneDimGroudwaterFlowHet(hL,hR,L,S,T); T=[0.002 0.01]; Het_situ2 = oneDimGroudwaterFlowHet(hL,hR,L,S,T); save(’oneDimFlowPlotData.mat’,’Hom_forward',’Hom_backward’,’Hom',’Het_situ1','Het_situ2') 3。 结果输出 Question1.1 result: 由图一可以看出非均质插分和均质情况下向前插分、向后插分,计算结果和收敛速度大致相同,考虑到向前插分中,因此向前差分时取,其他情况取。 图一。 非均质与均质求解下的差异,从左到右分别为非均质T插分、均质情况下向后插分、均质情况下向前插分 Question1。2 result: T1=0.01, T2=0。002 和 T1=0.2T2, T1=0。002, T2=0。01非均质T情况下插分结果如图二. 图二. 非均质情况下两个情景下插分结果 Problem 2 Use rainfall from 8 stations to estimate the annual rainfall for 6 stations using the kriging ordinary methods. The locations of the 8 stations where rainfall is available are as follows: No。 station name latitude logitude 1 boulder 40.033 105。267 2 castle 39.383 104.867 3 green9ne 39.267 104.750 4 lawson 39。767 105。633 5 longmont 40。252 105.150 6 manitou 38。850 104.933 7 parker 39.533 104.650 8 woodland 39。100 105.083 The 15-year rainfall records for 8 the stations are available in the Excel file “Rain_8Stations_Known。xls” The locations of the 6 stations where rainfall need to be estimated are as follows: No。 station name latitude logitude 1 byers 39。750 104。133 2 estes 40。383 105.517 3 golden 39。700 105。217 4 green9se 39。100 104。733 5 lakegeor 38。917 105.483 6 morrison 39。650 105.200 The annual rainfall for 6 the stations are available in the Excel file “AnnualRain_6Stations_ToBeEstimated。xls”. This will be used to calculate the estimate error by using different interpolation methods 1) For each of 6 stations (i。e., byers, estes, golden, green9se, lakegeor, and morrison) where the annual will be estimated, estimate the annual rainfall based on rainfall at 8 stations (i。e。, boulder, castle, green9ne, lawson, longmont, manitou, parker and woodland) using the kriging method. 2) Estimate the annual rainfall using the inverse-distance-square method and the arithmetic mean method, and compare the error from the kriging method. 3) Calculate the error variance for kriging method at each of 6 stations Note: use an exponential function to model covariance: , where a and b are parameters to be determined, and d is the distance between two points。 Problem 2解答 1. Kriging MATLAB 编码如下 KrigineInterpolate.m clear,clc %% Writed By Dongdong Kong, 2014-01—08 % Sun Yat—Sen University, Guangzhou, China % email: kongdd@ % -——--——--———---———--—-—-——-———-——----———-—-—-—-————-—— dataDir = '。/data/’; stationInfo_known= xlsread([dataDir,’LatitudeLogitude_8Stations_Known.xls']); stationInfo_pre = xlsread([dataDir,’LatitudeLogitude_6Stations_ToBeEstimated。xls’]); Rain_known = xlsread([dataDir,'Rain_15year_8Stations_Known。xls']); Rain_preReal = xlsread([dataDir,'AnnualRain_6Stations_ToBeEstimated。xls']); stationInfo_known = stationInfo_known(:,[3,4]); stationInfo_pre = stationInfo_pre(:,[3,4]); nYear = size(Rain_known,1); Np_know = 8; % station number of know data Np_pre = 6; % station number to predict RainPredict = zeros(nYear, Np_pre); for k = 1:Np_pre stationInfo = [stationInfo_pre(k,:); stationInfo_known]; nStation = size(stationInfo,1); dispPoint=zeros(nStation); % calculate two station distance for i=1:nStation dispPoint(:,i) = distance(stationInfo, stationInfo(i,:)); end % covariance mat_cor = cov(Rain_known); % simulate Cov function x = dispPoint(2:end,2:end); y = mat_cor; x_tri = tril(x); y_tri = tril(y); X = x_tri(:); ind = X~=0; Y = y_tri(:); % delete diag zeros data X_nozeros = X(ind); Y_nozeros = Y(ind); Y_zeros = diag(y); % General model Exp1: % y = a*exp(b*x) [fitResult, gof] = expFit(X_nozeros, Y_nozeros); a = fitResult.a; b = fitResult.b; C0 = mean(Y_zeros) — b; Cov_fit = reshape(feval(fitResult,x),8,8); for i=1:length(Cov_fit) Cov_fit(i, i) = C0 + b; end C = [Cov_fit,ones(8,1); ones(1,8),0]; dh = dispPoint(2:end,1); D = [feval(fitResult,dh);1]; W = C\D; %last element is mu w = W(1:end—1); RainPredict(:,k) = Rain_known*w; end Rain_kriging = mean(RainPredict) expFit。m function [fitresult, gof] = expFit(X1, Y1) % MATLAB AUTO GENERATE CODE expFit FUNCTION [xData, yData] = prepareCurveData( X1, Y1 ); % Set up fittype and options. ft = fittype( ’exp1' ); opts = fitoptions( ft ); opts。Display = ’Off’; opts。Lower = [-Inf -Inf]; opts。StartPoint = [871049.657333104 —6.29140824382876]; opts.Upper = [Inf Inf]; % Fit model to data。 [fitresult, gof] = fit( xData, yData, ft, opts ); % ——-————-——--—-——--—-—-——--———-——-—--——---—-——--——-———-----—-—--— 计算结果保留在第二问的表格里。 2. 反距离权重插值、算术平均值和kriging插值的误差比较 反距离权重插值采用R语言下的工具包gstat的idw函数进行,对于每个站点采用8个雨量站进行插值。 IDW Interpolation R 代码如下: library(gstat) library(maptools) ## Loading required package: sp ## Checking rgeos availability: TRUE rm(list=ls()) setwd("F:/Users/kongdd/Documents/MATLAB/finalWork/krigineInterpolation") stationInfo_known=read.table('。/data/LatitudeLogitude_8Stations_Known.txt',sep=”\t”,head=T) stationInfo_pre = read。table('./data/LatitudeLogitude_6Stations_ToBeEstimated。txt',sep=”\t”,head=T) Rain_known = read。table(’。/data/Rain_15year_8Stations_Known。txt’,sep="\t”,head=T) Rain_preReal = read.table('./data/AnnualRain_6Stations_ToBeEstimated.txt',head=T) Rain_known <- t(Rain_known[-1]) colnames(Rain_known)〈—paste(”year",1:15,sep=””) stationInfo_known = stationInfo_known[,c(3,4)] stationInfo_pre = stationInfo_pre[,c(3,4)] Rain_known<- data。frame(stationInfo_known,Rain_known) coordinates(stationInfo_pre)<-~long+lat coordinates(Rain_known)<—~long+lat nYear <— 15 Result〈—list() RainPredict<—matrix(0,nYear,6) for(i in 1:nYear){ varName <- sprintf(”year%d”,i) evalStr<- sprintf("Result[[%d]] 〈— idw(%s~1,Rain_known,stationInfo_pre,nmin=8)",i,varName) eval(parse(text=evalStr)) RainPredict[i,] 〈— Result[[i]]$var1。pred } AnnualRainPredict<—apply(RainPredict,2,mean) station byers estes golden green9se lakegeor morrison Real 8916.3 7949.7 9054.9 8859。6 8276.5 7743。4 kriging 8416。6 8259。8 8262。8 8464.5 8383.9 8283.5 idw 8531.8 8191。1 8233。6 8515.3 8460。3 8277。9 Mean 8363。9 8363。9 8363.9 8363.9 8363。9 8363.9 表一. 不同插值方法的年均降雨插值结果 station byers estes golden green9se lakegeor morrison kriging —499.69 310.14 —792.04 —395。11 107。42 540。11 idw 115.23 -68。78 -29。20 50。76 76.35 —5.57 Mean —167。94 172.83 130。24 -151.38 —96.41 85。99 表一. 年均降雨不同插值方法的相对误差 3. 计算kriging插值的误差的方差 , 其中代表真实值、代表预测值,n为样本长度。Var= 268791.14
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服