地下水动力学中Matlab的运用(井函数与贝塞尔函数)

地下水动力学中Matlab的运用 一、 越流含水层中贝塞尔函数的实现 越流含水层中地下水向承压水井运动的问题中,贝塞尔函数大量运用,其中精确解中运用了零阶第二类虚宗量Bessel函数K0(rB),一阶第二类虚宗量Bessel函数K1(rB)。 s=Q2πKMK0(r/B)(rw/B)K1(rw/B) 经简化后的Hantush-Jacob公式中也零阶第二类虚宗量Bessel函数K0(rB)。 s≈Q2πKMK0rB 在配线法中使用的是Hantush-Jacob公式,需要在双对数纸上绘制K0rB-rB曲线,而这在Matlab中很容易实现。Matlab中内置大量函数,其中包括五类Bessel函数,即besselj(nu,Z)、bessely(nu,Z)、 besselh(nu,Z)、 besseli(nu,Z)、 besselk(nu,Z),分别对应第一类贝塞尔函数,诺依曼函数,汉克尔函数,第一类修正贝塞尔函数以及第二类修正贝塞尔函数。而我们利用的即为第二类修正贝塞尔函数,相应的语句及图像如下: x=0:0.01:10; y0=besselk(0,x); y1=besselk(1,x); loglog(x,y0,x,y1); grid on; 二、 井函数的实现 地下水向完整井的非稳定运动中需要运用井函数W(u),其指数积分式为 Wu=-Ei-u=u∞e-yydy 在Matlab中利用quad或quad8等积命令可实现求其近似值。但Matlab中内置的Maple函数库中包含Ei函数,但不可直接显示其函数值,可直接利用mfun函数调用Matlab中的Maple函数库,以达到求值的要求。相应的语句及图像如下: for i=1:160 u(i)=10^(-15+i/10); %生成等比数列,便于画双对数坐标图像 end for i=1:160 w(i)=mfun( Ei ,1,u(i)); end loglog(u,w); grid on; 井函数数值的验证: U 10-15 10-14 10-13 10-12 10-11 10-10 W(u) 33.9615607 31.658976 29.356391 27.053805 24.751220 22.448635 U 10-9 10-8 10-7 10-6 10-5 10-4 W(u) 20.146050 17.843465 15.540880 13.238296 10.935720 8.633225 U 10-3 10-2 10-1 100 101 W(u) 6.331539 4.037930 1.822924 0.219384 0.000004 三、 利用非线性规化获得Theis解析模型数值解 Theis公式既可以用于水位预测,也可以用于求含水层参数。而在解决后者这一逆问题时,传统的方法是配线法或Jacob直线图解法,其精度不高且随意性较大。利用Matlab中非线性规化函数fmincon的功能实现统一的评判标准,保证解的唯一性与可靠性。由于我们在上面已经解决了井函数的求值问题,故只需编写非线性规划的目标函数即可。 此处最优解的原则是使目标函数值最小,也即目标函数决定了整体的优化评判标准。常见的方法是使理论值与实际值的方差最小,并认为此时函数曲线最契合实际数值点。所以Theis模型的目标函数如下 ET,μ*=i=1Ij=1Jwij[Hjti-Hjob(ti)]2 其中wij表示权数,代表数据的可信度,一般设为1。Hjti与Hjob(ti)分别表示某时刻某一点水位值的理论值与实际值。Matlab语句编写如下: function E =fune(x) t=T; %调用时间点的M文件 s=S; %调用降深值的M文件 r=R; %调用观测距离的M文件 Q=q; %调用流量的M文件 E=0; for n=1:length(r) for m=1:length(t) a=r(n)^2*x(2)/(4*x(1)*t(m)); E=E+(Q/(4*pi*x(1))*mfun( Ei ,1,a)-s(n,m))^2; end end 目标函数实现后即可在非线性规划函数中调用,fmincon中变量很多,但一般Theis模型没有对应的线性不等约束或者线性等式约束,故只需限定上下限即可,而初值可根据经验取得相应的数量级即可。具体实现代码如下: function [x fval]=funm [x,fval] = fmincon( fune ,[300;0.0001],[],[],[],[],[1;0.00001],[10000;0.01]); 四、 验证与计算 利用上述函数可根据所测得的数据计算得含水层的导水系数T与贮水系数μ*,而所需要提供的数据包括观测时间,观测点与井的距离以及观测点的降深。由于编写的fune函数中可直接调用上述数据,故使用时只需将对应的数据矩阵导入文件夹即可。现利用课本上的习题进行验证结果的可靠性。 (1)利用《地下动力学》课本中100页中观2与观15的两个孔的数据进行测试,结果如下: T=195.94m2/d μ*=3.00 x10-4 目标函数值E=0.4092 书上利用配线法的计算结果如下: T=197.67m2/d μ*=2.31x10-4 目标函数值E= 0.7426 (2)利用所提供的PDF文件中观测数据,上述Matlab程序计算结果如下: T=84.82m2/d μ*=1.46x10-3 目标函数值E=0.0394 PDF文件中自身程序计算结果为: T=77.37m2/d μ*=1.47x10-3 目标函数值E= 0.1255 两者的区别源于井函数的求值部分的差异,本报告使用的是Matlab内置的Maple函数库,而PDF中利用的quad8积分函数。但两者计算结果相差不大,且理论上讲利用内置函数库的方法更加精确。 通过上述验证我们可以确定Matlab的数值方法可靠度高,且计算过程简便。现计算所提供的两道习题: 习题1. 在某均质、各向同性的承压含水层中,有一完整抽水井,其抽水量为1256 m3/d,已知含水层的导水系数为100 m2/d,导压系数为100 m2/min。试求:(1)抽水后10min、100min、1000min时,距抽水井10m处的水位降深,以及所反映水位降深的分布规律;(2)抽水后90min后距水井3m、30m、300m处的水位降深,以及所反映水位降深的分布规律。 解:由题知导水系数T=100 m2/d,导压系数a=100 m2/min,流量Q=1256 m3/d Theis降深公式 s=Q4πTW(u) 其中 u=r2μ*4Tt=r24at (1) 将t=10min、100min、1000min

matlab井函数,地下水动力学中Matlab的运用(井函数与贝塞尔函数)相关推荐

  1. matlab 第一类修正贝塞尔函数,零阶贝塞尔函数 在MATLAB中怎样画出零阶修正贝塞尔函数...

    第二类修正贝塞尔函数的零阶和一阶,分别怎样用mat回忆终究只是回忆,它只代表一段过去,一段历史,回忆再美也只是曾经,告别过去,期待未来. 书上说 (0和1都是下标) K0(z), the zeroth ...

  2. pandas使用query函数和sample函数、使用query函数筛选dataframe中的特定数据行并使用sample函数获取指定个数的随机抽样数据

    pandas使用query函数和sample函数.使用query函数筛选dataframe中的特定数据行并使用sample函数获取指定个数的随机抽样数据(query dataframe and ran ...

  3. matalb中的wden函数_小波分析中MATLAB阈值获取函数及其应用附程序代码

    小波分析中MATLAB阈值获取函数及其应用附程序代码 1.小波分析中MATLAB阈值获取函数 MATLAB中实现阈值获取的函数有ddencmp.thselect.wbmpen和wwdcbm,下面对它们 ...

  4. matlab ode45求解齿轮动力学,[转载]Matlab中解常微分方程的ode45 【转载】

    ode是专门用于解微分方程的功能函数,他有ode23,ode45,ode23s等等,采用的是Runge-Kutta算法.ode45表示采用四阶,五阶runge-kutta单步算法,截断误差为(Δx)^ ...

  5. matlab矩阵输出txt文件中,matlab怎么把矩阵输出到txt

    1.matlab如何输出这样的矩阵到txt 带有非数值字符的输出,除了上面同学提到的自定义输出格式以外,还可以将其看成字符串进行输出.如下: clear clc %构造A矩阵 A = 1:9; A = ...

  6. python使用get函数在字典中加入键_Python使用字典键作为函数名

    我希望能够使用字典键作为函数名,但我不确定是否可行.作为一个简单的例子,我想要一个class().dictkey(otherstuff)的选项,而不是class().dothis(dictkey, o ...

  7. 以下对c语言函数的描述中正确的是,以下对C语言函数的有关描述中,正确的是

    摘要: 它决习定于的学后天,下语密切关系的能与社力是会文化有.关描透性的是起渗利尿可引.认的r默链接路径是(,述中在建点时立站.... 它决习定于的学后天,下语密切关系的能与社力是会文化有. 函数人感 ...

  8. linux内核的外部接口函数,linux内核中GPIO的使用(二)--标准接口函数

    在linux内核中,有一些基本模块可以使用标准的接口函数来操作,比如GPIO.interrupt.clock,所谓的标准接口函数是指一些与硬件平台无关的.linux下做驱动通用的函数, 常用的有: g ...

  9. np.meshgrid()函数 以及 三维空间中的坐标位置生成 以及 numpy.repeat()函数介绍

    一.np.meshgrid()函数 1.np.meshgrid()介绍 X, Y = np.meshgrid(x, y) 代表的是将x中每一个数据和y中每一个数据组合生成很多点,然后将这些点的x坐标放 ...

最新文章

  1. R语言difftime函数计算时间差值实战
  2. 北京师范大学计算机应用基础考试,北京师范大学-计算机应用基础作业(一至九全套)...
  3. springboot整合rabbitmq(搭建)
  4. MyEclipse创建struts.xml
  5. 无限踩坑系列(4)-远程登入服务器
  6. php编写大型网站问题集
  7. Android 浏览器启动应用程序
  8. 计算机基础远程教育答案,浙大远程教育2013年计算机作业答案-1-计算机基础知识题.docx...
  9. pandas 处理 csv
  10. 在这个人人拥抱python的时代,R真的out了吗?
  11. 实战 团队项目如何把控log日志输出
  12. 负载均衡(Load Balance)
  13. 运维审计系统是堡垒机么?跟堡垒机有啥区别?
  14. 小米8 twrp recovery_小米max3一键刷入TWRP recovery 刷机教程
  15. SAP License:SAP系统备料发货时的流程规范
  16. 无线路由器及Wi-Fi组网指南(史上最全)
  17. 三步修改jupyter notebook默认路径
  18. 数组类型的修改和去重
  19. 【工具封装】Python 字典列表按中文姓名首字母排序
  20. 2022美亚杯电子数据取证大赛-个人赛

热门文章

  1. pkcs1转pkcs8 php,pkcs1与pkcs8格式RSA私钥互相转换
  2. 华为Nova9搭载鸿蒙OS采用4K录像镜头100W快充9月23日发布
  3. cesium调用天地图服务
  4. Linux ROS 安装
  5. java版微信调用小i机器人
  6. 第一行代码-第二版(郭霖著)笔记四(Fragment)
  7. 字节Byte与位bit
  8. C#中控制键盘只输入数字,退格
  9. LabVIEW通过MC协议实现与三菱FX 3U系列PLC的通讯(TCP)
  10. 2022蓝桥杯——积木画