爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6649|回复: 10

[源代码] 新人报道,现在开始,每天为大家发一个气象常用程序

[复制链接]
发表于 2012-11-28 20:13:56 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
已知节点x(n)和函数值y(n),用三次样条求节点t(m)上的内插值sy(m)。
c-----------------------------------------------
      subroutine splinev(n,x,y,m,t,yp1,ypn,sy)
C     PROGRAM FOR COMPLETE OR NATURAL CUBIC SPLINE INTERPOLATION
C     SPLINEV EVALUATES CUBIC SPLINE INTERPOLATION AT POINTS T(M).
C     INPUT: N,X(N),Y(N),M,T(M),YP1,YPN
C       N: NUMBER OF INTERPOLATION KNOTS
C       X: ARRAY OF INTERPOLATION KNOTS. X MUST BE AN ORDERED ARRAY,
C          I.E., X(1)<X(2)<...<X(N).
C       Y: FUNCTION VALUES AT KNOTS IN X
C       M: NUMBER OF KNOTS AT WHICH VALUES OF SPLINE ARE FOUND
C       T: ARRAY OF POINTS AT WHICH VALUES OF SPLINE ARE FOUND
C       YP1: VALUE OF FIRST DERIVATVE AT ENDPOINT X(1)
C       YPN: VALUE OF FIRST ORDER DERIVATVE AT ENDPOINT X(N)
C         NOTE:(1)THE CUBIC SPLINE FUNCTION IS CALLED COMPLETELY CUBIC
C              SPLINE FUNCTION IF S'(X(1))=YP1 AND S'(X(N))=YPN.
C          (2)THE SUBROUTINE USES THE NATURAL SPLINE FUNCTION WHEN
C             BOTH YP1 AND YPN ARE GIVEN NUMBERS > OR = 1.E30.
C             THAT IS S''(X(1))=S''(X(N))=0.
C     OUTPUT: SY(M)
C       SY: VALUE OF SPLINE AT T.
C     WORK ARRAY: Y2(N)
C       Y2: VALUES OF SECOND DERITAVE OF SPLINE FUNCTION AT KNOTS IN X
C     Modified By Dr. Jianping Li on October 17, 1998.
      dimension x(n),y(n),t(m),sy(m)
      dimension y2(n)
      call spline01(n,x,y,yp1,ypn,y2)
do 100 i=1,m
      klo=1
      khi=n
   1  if((khi-klo).gt.1)then
        k=(khi+klo)/2
        if(x(k).gt.t(i))then
          khi=k
        else
          klo=k
        endif
        goto 1
      endif
      h=x(khi)-x(klo)
      if(h.eq.0.)pause'BAD X INPUT'
      a=(x(khi)-t(i))/h
      b=(t(i)-x(klo))/h
      sy(i)=a*y(klo)+b*y(khi)+((a**3-a)*y2(klo)
     *      +(b**3-b)*y2(khi))*(h**2)/6.
100  continue
      return
      end
c----------------------------------------------------
      subroutine spline01(n,x,y,yp1,ypn,y2)
C     SPLINE01 DETERMINES CUBIC SPLINE INTEROPLATION
C     INPUT: N,X,Y,YP1,YPN
C       N: NUMBER OF INTERPOLATION POINTS
C       X: ARRAY OF INTERPOLATION POINTS
C       Y: FUNCTION VALUES AT KNOTS IN X
C       YP1: VALUE OF FIRST DERIVATVE AT ENDPOINT X(1)
C       YPN: VALUE OF FIRST ORDER DERIVATVE AT ENDPOINT X(N)
C         NOTE:(1)THE CUBIC SPLINE FUNCTION IS CALLED COMPLETELY CUBIC
C              SPLINE FUNCTION IF S'(X(1))=YP1 AND S'(X(N))=YPN.
C          (2)THE SUBROUTINE USES THE NATURAL SPLINE FUNCTION WHEN
C             BOTH YP1 AND YPN ARE GIVEN NUMBERS > OR = 1.E30.
C             THAT IS S''(X(1))=S''(X(N))=0.
C     OUTPUT: Y2
C       Y2: ARRAY OF VALUES OF SECOND DERATIVE AT KNOTS X(I)
C     U: WORK ARRAY
C     Modified By Dr. Jianping Li on October 17, 1998.
      dimension x(n),y(n),u(100000),y2(n)
      if(yp1.gt.0.99e30)then
        y2(1)=0.
        u(1)=0.
      else
        y2(1)=-0.5
        u(1)=(3./(x(2)-x(1)))*((y(2)-y(1))/(x(2)-x(1))-yp1)
      endif
      do 10 i=2,n-1
        sig=(x(i)-x(i-1))/(x(i+1)-x(i-1))
        p=sig*y2(i-1)+2.
        y2(i)=(sig-1.)/p
        u(i)=(6.*((y(i+1)-y(i))/(x(i+1)-x(i))-(y(i)-
     *        y(i-1))/(x(i)-x(i-1)))/(x(i+1)-x(i-1))-
     *        sig*u(i-1))/p
  10  continue
      if(ypn.gt.0.99e30)then
        qn=0.
        un=0.
      else
        qn=0.5
        un=(3./(x(n)-x(n-1)))*(ypn-(y(n)-y(n-1))/(x(n)-x(n-1)))
      endif
      y2(n)=(un-qn*u(n-1))/(qn*y2(n-1)+1.)
      do 20 k=n-1,1,-1
        y2(k)=y2(k)*y2(k+1)+u(k)
  20  continue
      return
      end

评分

参与人数 3金钱 +30 贡献 +8 收起 理由
易小凯 + 10 + 4 支持一下
Aires + 10 + 2
言深深 + 10 + 2 很给力!

查看全部评分

密码修改失败请联系微信:mofangbao
发表于 2012-11-28 22:06:10 | 显示全部楼层
顶一下啊  不过这些是从李老师网站上直接拿下来的吧  至少应该清楚的注明出处啊
密码修改失败请联系微信:mofangbao
发表于 2012-11-29 08:24:40 | 显示全部楼层
谢谢分享
密码修改失败请联系微信:mofangbao
0
早起挑战累计收入
发表于 2012-11-29 09:05:54 | 显示全部楼层
1楼有道理啊,如果能找到出处,还是得标记一下出处的哈~算是对原作者的尊重啦!
密码修改失败请联系微信:mofangbao
发表于 2012-11-29 12:06:41 | 显示全部楼层
收藏一下,用的时候再来下
密码修改失败请联系微信:mofangbao
发表于 2012-11-30 12:16:19 | 显示全部楼层
也行,共享就行,要坚持不懈呀
密码修改失败请联系微信:mofangbao
发表于 2012-11-30 12:17:06 | 显示全部楼层
两天没发了,
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2012-12-5 19:35:51 | 显示全部楼层
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2012-12-5 19:36:49 | 显示全部楼层
mofangbao 发表于 2012-11-29 09:05
1楼有道理啊,如果能找到出处,还是得标记一下出处的哈~算是对原作者的尊重啦!

我都是问老师要的一些程序,平时用过,修改了的,具体不知道哪里的
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2012-12-5 19:37:16 | 显示全部楼层
两柯枣树 发表于 2012-11-28 22:06
顶一下啊  不过这些是从李老师网站上直接拿下来的吧  至少应该清楚的注明出处啊

我都是问老师要的一些程序,平时用过,修改了的,具体不知道哪里的
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表