首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何一步步构建自己的水质模型(1)(订正

很多做模型的同学其实不太清楚数值模型如何实现的,导致一些不理解或者不懂,其实不算一个合格的数模技术人员;so,打算借助 python,一步步的构建一些简单的水质模拟,给大家一个较好的认识,图是自己解决一些问题所构建的小工具集(语言:python)

the first day:

(1)前期准备工作,安装python软件,大家可以去网上随便搜下,我现在用的是anconda,大家可以直接去下载它然后安装。(python的一些具体教程需要大家自行学习下,很简单,其实跟MATLAB蛮像,脚本性语言,通俗易懂)

(2)方程基础

我们以简单的一维水质方程为基础,具体方程参照此教材,个人比较喜欢的一本书:

:河段中某种污染物的浓度,mg/l

t :时间,d

x :河水流动距离,km

u :河水平均流速。m/s

e :河流纵向离散系数

:河流水体污染物的源漏项;

(1网格点的划分)

(2差分方程的推导)

(4)编程

安装一个Python的编译环境,我是用的anaconda

首先做一些配置:

import numpy

from matplotlib import pyplot ;

numpy的功能是允许我们像matlab那样操作矩阵,matplotlib是用来画图的。然后是“几何建模”,这里的几何模型很简单,就是一个线段:0

描述这么一个场景 10mg/l的污染物,在边界处恒定释放,河流流速为5m/s。衰减系数k及离散系数e分别给定位0.1,1.我们模拟5000个时间步长的污染沿河分布情况,T=5000*dt=50s,dt时间间隔可以自由设定,但也不是随意的。大家可以试试,结果会不会收敛,因为数值模型还有个柯朗数的限制,即

dt*u/dx

以下是程序:

nx = 50

# 给定网格数量nx及网格间距dx

dx = 49 / (nx-1)

nt = 500

dt = 0.01

a = 1

#离散系数取值

E=1

#衰减系数及流速取值

k=0.1

u=5

#计算α、β、γ

接下来是初始条件及开始值的一些考虑,如c[-1]=c[0](假定)

#给的初始值,这里为1的线性矩阵

c = numpy.ones(nx)

#因为差分方程有c[-1]。初期拟定为c[-1]=c[0]

c[0]=10

c[-1]=c[0]

cn = numpy.ones(nx)

for n in range(nt):

cn = c.copy()

for i in range(1, nx):

c[i] = α*cn[i-2] +β*cn[i-1]+γ*cn[i]

pyplot.plot(numpy.linspace(0, 201, nx), c)

运行的结果大概长这个样子:

可以清晰的看到,随着距离慢慢增加,浓度逐渐接近初始值1,。。可以做个试验,我们调整nt(即污染持续时间,100 200 300 400 500 1000。看到如下效果,即时间越久,沿河浓度逐渐增高。

这次先说到这儿吧。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181227G0BNAK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券