回 帖 发 新 帖 刷新版面

主题:[讨论]关于檔案数据内插

请教各位大大“这是输出每个网格深度对应压力水头的数据档,而我想找出地下水位的位置,也就是内插出压力水头=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个回复)

沙发

没看明白什么意思. 是要求出p=0的z值?

板凳

[quote]没看明白什么意思. 是要求出p=0的z值?[/quote]

恩...是这样的,输出的檔案是地下水深所对应的压力水头值,我的目的是求出地下水位深,根据地下水位以下为负压,以上为正压观念,即压力水头=0时为地下水位,那么透过内插即可得地下水位深(z值),但在内插之前有两个假设条件,假设一若全是负压,那么地下水饱和,地下水位深z=0,假设二若全是正压,则没有地下水,地下水位深=zmax,除这两个假设条件以外,才可进行内插计算,而且必须做回圈121809次,算出每个点的地下水位深z值,单纯计算没有问题,不过回圈这部分想请教高手该如何做?

3 楼

太专业了, 不会做, 盼懂这个的高手来帮你.

4 楼

[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 楼

内础伴场だノ阵秆决现璶处瞶内础玡两个安设条ン


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

6 楼

内插回圈的部分用阵列解决了,现在要处理内插前的两个假设条件


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 楼

内插前的两个假设条件OK了

我来回复

您尚未登录,请登录后再回复。点此登录或注册