主题:[讨论]关于檔案数据内插
okwep
[专家分:0] 发布于 2011-01-28 16:20:00
请教各位大大“这是输出每个网格深度对应压力水头的数据档,而我想找出地下水位的位置,也就是内插出压力水头=0所对应的深度,若是都为负压,地下水位则为zmax,若是都为正压,地下水位则为0,该如如写出这个回圈呢?或是可以用哪个软体完成?
Z(高程) P(压力水头)
1 23.1534(坡度)
0.10000E-01 -0.87486
0.30914 -0.62195
0.60828 -0.36905
0.90743 -0.11615
1.2066 0.13675
1.5057 0.38964
2 33.8669(坡度)
0.10000E-01 -0.35461
0.22594 -0.20572
0.44188 -0.56834E-01
0.65782 0.92050E-01
0.87376 0.24093
1.0897 0.38982 . .
. .
. . . .
121809 11.9548(坡度)
0.10000E-01 -1.7343
0.45376 -1.3096
0.89752 -0.88484
1.3413 -0.46011
1.7850 -0.35382E-01
2.2288 0.38934
回复列表 (共7个回复)
沙发
yeg001 [专家分:14390] 发布于 2011-01-28 18:41:00
没看明白什么意思. 是要求出p=0的z值?
板凳
okwep [专家分:0] 发布于 2011-01-28 19:12:00
[quote]没看明白什么意思. 是要求出p=0的z值?[/quote]
恩...是这样的,输出的檔案是地下水深所对应的压力水头值,我的目的是求出地下水位深,根据地下水位以下为负压,以上为正压观念,即压力水头=0时为地下水位,那么透过内插即可得地下水位深(z值),但在内插之前有两个假设条件,假设一若全是负压,那么地下水饱和,地下水位深z=0,假设二若全是正压,则没有地下水,地下水位深=zmax,除这两个假设条件以外,才可进行内插计算,而且必须做回圈121809次,算出每个点的地下水位深z值,单纯计算没有问题,不过回圈这部分想请教高手该如何做?
3 楼
yeg001 [专家分:14390] 发布于 2011-01-28 23:55:00
太专业了, 不会做, 盼懂这个的高手来帮你.
4 楼
okwep [专家分:0] 发布于 2011-01-29 00:07:00
[quote]太专业了, 不会做, 盼懂这个的高手来帮你.[/quote]
恩...其实只是内插,首先将资料整理如下
0.10000E-01 -0.87486 ---------第一笔资料
0.30914 -0.62195
0.60828 -0.36905
0.90743 -0.11615
1.2066 0.13675
1.5057 0.38964
0.10000E-01 -0.35461---------第二笔资料
0.22594 -0.20572
0.44188 -0.56834E-01
0.65782 0.92050E-01
0.87376 0.24093
1.0897 0.38982
0.10000E-01 -1.7343 ------第三笔资料
0.45376 -1.3096
0.89752 -0.88484
1.3413 -0.46011
1.7850 -0.35382E-01
2.2288 0.38934
写了一个LEAST SQUARE,输出P=0时对应的深度
PROGRAM LS
PARAMETER(NX=6,NY=3)
REAL::X(NX) !X的資料
REAL::Y(NX) !Y的資料
REAL::A !LEAST SQUARE中的A值
REAL::B !LEAST SQUARE中的B值
OPEN(10,FILE="DATA.TXT")
!讀資料
DO J=1,NY
DO I=1,NX
READ(10,*)Y(I),X(I)
WRITE(*,*)Y(I),X(I)
ENDDO
DO I=1,NX
SUM_X=SUM_X+X(I) !計算SUM_X、SUM_Y
SUM_Y=SUM_Y+Y(I)
SUM_XSQUARE=SUM_XSQUARE+X(I)**2 !計算SUM_XSQUARE、SUM_YSQUARE
SUM_YSQUARE=SUM_YSQUARE+Y(I)**2
SUM_XY=SUM_XY+X(I)*Y(I) !計算SUM_XY
ENDDO
WRITE(*,*)"SUM_X=",SUM_X
WRITE(*,*)"SUM_Y=",SUM_Y
WRITE(*,*)"SUM_XSQUARE=",SUM_XSQUARE
WRITE(*,*)"SUM_XY=",SUM_XY
A=(SUM_XSQUARE*SUM_Y-SUM_X*SUM_XY)/(NX*SUM_XSQUARE- SUM_X**2)
B=(NX*SUM_XY-SUM_X*SUM_Y)/(NX*SUM_XSQUARE-SUM_X**2)
WRITE(*,*)"A=",A," B=",B
XX=0
YI=A+B*XX
WRITE(*,*)YI
ENDDO
END
但是回圈的结果,第一笔的资料计算出来是正确的,但是第二、三笔都是错,请教高手该如何写这个回圈呢
5 楼
okwep [专家分:0] 发布于 2011-01-29 11:31:00
内础伴场だノ阵秆决现璶处瞶内础玡两个安设条ン
PROGRAM LS
PARAMETER(NX=6,NY=3)
REAL::X(NX,NY) !X戈
REAL::Y(NX,NY) !Y戈
REAL::SUM_X(NY)
REAL::SUM_Y(NY)
REAL::SUM_XSQUARE(NY)
REAL::SUM_YSQUARE(NY)
REAL::SUM_XY(NY)
CHARACTER::TITLE !戈夹肈
REAL::A !LEAST SQUAREいA
REAL::B !LEAST SQUAREいB
OPEN(10,FILE="DATA.TXT")
!弄戈
DO J=1,NY
READ(10,*)TITLE !弄戈夹肈
DO I=1,NX
READ(10,*)Y(I,J),X(I,J)
WRITE(*,*)Y(I,J),X(I,J)
ENDDO
DO I=1,NX
SUM_X(J)=SUM_X(J)+X(I,J) !璸衡SUM_XSUM_Y
SUM_Y(J)=SUM_Y(J)+Y(I,J)
SUM_XSQUARE(J)=SUM_XSQUARE(J)+X(I,J)**2 !璸衡SUM_XSQUARESUM_YSQUARE
SUM_YSQUARE(J)=SUM_YSQUARE(J)+Y(I,J)**2
SUM_XY(J)=SUM_XY(J)+X(I,J)*Y(I,J) !璸衡SUM_XY
ENDDO
WRITE(*,*)"SUM_X(J)=",SUM_X(J)
WRITE(*,*)"SUM_Y(J)=",SUM_Y(J)
WRITE(*,*)"SUM_XSQUARE(J)=",SUM_XSQUARE(J)
WRITE(*,*)"SUM_XY(J)=",SUM_XY(J)
A=(SUM_XSQUARE(J)*SUM_Y(J)-SUM_X(J)*SUM_XY(J))/(NX*SUM_XSQUARE(J)- SUM_X(J)**2)
B=(NX*SUM_XY(J)-SUM_X(J)*SUM_Y(J))/(NX*SUM_XSQUARE(J)-SUM_X(J)**2)
WRITE(*,*)"A=",A," B=",B
XX=0
YI=A+B*XX
WRITE(*,*)"YI=",YI
ENDDO
END
6 楼
okwep [专家分:0] 发布于 2011-01-29 11:46:00
内插回圈的部分用阵列解决了,现在要处理内插前的两个假设条件
PROGRAM LS
PARAMETER(NX=6,NY=3)
REAL::X(NX,NY) !X的資料
REAL::Y(NX,NY) !Y的資料
REAL::SUM_X(NY)
REAL::SUM_Y(NY)
REAL::SUM_XSQUARE(NY)
REAL::SUM_YSQUARE(NY)
REAL::SUM_XY(NY)
CHARACTER::TITLE !資料標題
REAL::A !LEAST SQUARE中的A值
REAL::B !LEAST SQUARE中的B值
OPEN(10,FILE="DATA.TXT")
!讀資料
DO J=1,NY
READ(10,*)TITLE !讀取資料標題
DO I=1,NX
READ(10,*)Y(I,J),X(I,J)
WRITE(*,*)Y(I,J),X(I,J)
ENDDO
DO I=1,NX
SUM_X(J)=SUM_X(J)+X(I,J) !計算SUM_X、SUM_Y
SUM_Y(J)=SUM_Y(J)+Y(I,J)
SUM_XSQUARE(J)=SUM_XSQUARE(J)+X(I,J)**2 !計算SUM_XSQUARE、SUM_YSQUARE
SUM_YSQUARE(J)=SUM_YSQUARE(J)+Y(I,J)**2
SUM_XY(J)=SUM_XY(J)+X(I,J)*Y(I,J) !計算SUM_XY
ENDDO
WRITE(*,*)"SUM_X(J)=",SUM_X(J)
WRITE(*,*)"SUM_Y(J)=",SUM_Y(J)
WRITE(*,*)"SUM_XSQUARE(J)=",SUM_XSQUARE(J)
WRITE(*,*)"SUM_XY(J)=",SUM_XY(J)
A=(SUM_XSQUARE(J)*SUM_Y(J)-SUM_X(J)*SUM_XY(J))/(NX*SUM_XSQUARE(J)- SUM_X(J)**2)
B=(NX*SUM_XY(J)-SUM_X(J)*SUM_Y(J))/(NX*SUM_XSQUARE(J)-SUM_X(J)**2)
WRITE(*,*)"A=",A," B=",B
XX=0
YI=A+B*XX
WRITE(*,*)"YI=",YI
ENDDO
END
7 楼
okwep [专家分:0] 发布于 2011-01-29 14:14:00
内插前的两个假设条件OK了
我来回复