资源描述:
《地下水水质预测的一元线性回归方法研究_以乌鲁木齐河流域仓房沟地区为例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第24卷第3期《新疆师范大学学报》(自然科学版)Vol.24,No.32005年9月JournalofXinjiangNormalUniversitySep.2005(NaturalSciencesEdition)地下水水质预测的一元线性回归方法研究——以乌鲁木齐河流域仓房沟地区为例杨奉广,木合塔尔·扎日,封丽华(新疆大学资源与环境科学学院,新疆乌鲁木齐830046)①摘要:一元线性回归分析预测方法是利用一个自变量和预测变量之间的依赖关系来进行预测的方法,主要适用于中短期地下水水质变化预测。文章介绍了一元线性回归模型的建模过程和精度检验,
2、并用C语言将其实现。利用模型预测了乌鲁木齐河流域仓房沟地下水水质的变化趋势。关键词:一元线性回归模型;地下水水质;C语言中图分类号:P641文献标识码:A文章编号:1008296592(2005)20320103205地下水系统作为自然环境的组成部分,其水质特征是系统本体与系统环境综合作用的结果,由于乌鲁木齐河流域仓房沟离柴窝堡水源地仅有50公里,加上一些工厂集中在这里,所以对其水质监测尤为重要。本文利用回归分析法,对大量的数据进行处理,得出比较符合地下水水质变化规律的数学表达式,并用C语言编程对模型进行了实现。1回归方程的求法地下水动态
3、要素y和影响因素x(图1)间的一元线性回归方程为:dy=a+bx(1)对于监测值(x1,y1),(x2,y2),⋯,(xn,yn),记x,y的离差平方和为Lxx、Lyy,它们间的离差乘积和为Lxy,nnn图1测得的x、y的散点图(xq)2212(2)则Lxx=∑i-x=∑xi-n∑xii=1i=1i=1nnn(q2212Lyy=∑yi-y)=∑yi-n∑yi(3)i=1i=1i=1nnnnqq1LXy=∑(xi-x)(yi-y)=∑xiyi-n∑xi∑yi(4)i=1i=1i=1i=1Lxyqq回归系数b=;A=y-bx(5)LxxLxy
4、相关系数:r=(6)LxxLyy2回归方程的显著性检验求得的回归方程能否揭示变量间的规律,应进行显著性检验,方法如下:n记SA=∑(ydi-qy)2=b2Lxx(7)i=12SE=Lyy-bLxx(8)①收稿日期:2005-1-6基金项目:中国-荷兰合作项目《中国地下水信息中心能力建设》乌鲁木齐河流域示范区作者简介:杨奉广(1979-),男,汉族,在读硕士研究生,主要研究方向为水资源计算与管理。·104·新疆师范大学学报(自然科学版)2005年(n-2)SAF=(9)SE已知显著性水平A,可通过查F分布求出临界值FA(1,n-2),若F>
5、F0.01时,认为回归方程高度显著,用“333”表示;若F0.01>F>F0.05时,视为显著,用“33”表示若F0.05>F>F0.10时,视为较显著,用“3”表示;若F0.10>F,视为不显著。回归后的剩余标准差:Lyy-bLxySy=(10)n-2为了进行预测,要算出x=x0时,y0的置信区间,记为:-(21x0-x)Se=1++(11)nLxx则y0在显著性水平为A时的置信区间ddy-SySetAFy0Fy+SySetA(12)tA是自由度为n-2的t分布值(查表可得)。x0相应的预报值y0的标准误差(SE)为:SE=SySe(1
6、3)3线性转换在实际水文地质研究中,地下水动态要素y和影响因素x间的关系有时是某种曲线相关关系。这时如果仍直接用线性回归,就不能反映这两个变量之间的内在联系,可以通过变量代换,化为线性回归的问题。有如下几种曲线:1b3.1双曲线(图2)=a+yx11令y1=、x1=,yx则得:y1=a+bx1bx3.2指数曲线(图3)y=Ce令y1=lny,则得:y1=a+bxb3.3幂函数曲线(图4)y=cx令y1=lny、x1=lnx,则得:y1=a+bx13.4对数曲线(图5)y=a+blnx令x1=lnx,则得:y=a+bx1图2双曲线图3指数曲
7、线图4幂函数曲线图5对数曲线第3期杨奉广等地下水水质预测的一元线性回归方法研究·105·4程序实现4.1对不满足线形曲线的进行线性代换,我们设置一个转换标志flag,其中1代表双曲线、2代表指数曲线、3代表幂函数曲线、4代表对数曲线、0代表线性曲线。当flag为0时不对数据进行线性转换。if(flag==1)for(i=1;i<=N;i++){printf“(pleaseinput:”);scanf“(àfàf”,&c,&d);kk[0][i]=1.0öc;kk[1][i]=1.0öd;}elseif(flag==2)for(i=1;i<
8、=N;i++){printf“(pleaseinput:”);scanf“(àfàf”,&c,&d);kk[0][i]=c;kk[1][i]=log(d);}elseif(flag==3)fo