- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第一章客观的分析
客观分析
拉格朗日插值
FORTRAN程序
LAGINT.F
!
!根据给定点的函数值,应用拉格朗日插值公式,计算指定插值点处的
!函数值。
!在指定点的前后各取四个结点,用七次拉格朗日插值公式。
!X,Y为输入参数,各有N个点
!T为指定插入点
!Z为输出参数,是插值点T处的近似值。
SUBROUTIONE LAGINT(X,Y,N ,T,Z)
DIMENSION X(N),Y(N)
DOUBLE PRECISION X,Y,T,X,S
Z=0.0
IF (N.LE.0) RETURN
IF(N.EQ.1) THEN
Z=Y(1)
ENDIF
IF(N.EQ.2) THEN
Z=(Y(1)*(T-X(2))-Y(2)*(T-X(1)))/(X(1)-X(2))
RETURN
ENDIF
I=1
IF(X(1) .LT. T)
I=I+1
IF(I .LE. N) GOTO 10
ENDIF
K=I-4
IF(K .LT. 1) K=1
M=I+3
IF( M .GT. N) M=N
DO 30 I=K,M
S=1.0
DO 20 J=K,M
IF(J .NE. I) THEN
S=S*(T-X(J))/(X(I)-X(J))
ENDIF
20 CONTINUE
Z=Z+S*Y(I)
30 CONTINUE
RETURN
END
样条插值
FORTRAN程序
SPLINE.F
! SPLINE.FOR -- Natural Cubic Spline
! Call SplineCalculate with the two arrays of control points (and
! the number of elements in each array). To interpolate the spline,
! Call SplineEvaluate for each X for which you want a Y along the
! splines curve.
!
subroutine SplineCalculate( inx, ina, numx )
!ms$if .not. defined(LINKDIRECT)
!ms$attributes dllexport :: SplineCalculate
!ms$endif
implicit none
real*4 ina(*), inx(*)
integer numx
integer MAXPOINTS
parameter( MAXPOINTS = 1000 )
integer nxs
real*4 x(0:MAXPOINTS)
real*4 a(0:MAXPOINTS), b(0:MAXPOINTS)
real*4 c(0:MAXPOINTS), d(0:MAXPOINTS)
common /SplineData/ a, b, c, d, nxs, x
integer i
real*4 alpha(0:MAXPOINTS), l(0:MAXPOINTS)
real*4 mu(0:MAXPOINTS), z(0:MAXPOINTS)
real*4 h(0:MAXPOINTS)
! ===== Step 1
nxs = numx-1
do i = 0, nxs
x(i) = inx(i+1)
a(i) = ina(i+1)
end do
do i = 0, nxs-1
h(i) = x(i+1) - x(i)
end do
x(nxs+1) = 40000
! ===== Step 2
do i = 1, nxs-1
alpha(i) = 3.0 * (a(i+1) * h(i-1)-a(i) *
(x(i+1)-x(i-1)) + a(i-1) * h(i)) /
(h(i-1) * h(i))
end do
! ===== Step 3
l(0) = 1.0
mu(0) = 0.0
z(0) = 0.0
! ===== Step 4
do i = 1, nxs-1
l(i) = 2.0 * (x(i+1)-x(i-1))-h(i-1) * mu(i-1)
mu(i) = h(i) / l(i)
z(i) = (alpha(i)-h(i-1) * z(i-1)) / l(i)
end do
! ===== Step 5
l(nxs) = 1.0
z(n
文档评论(0)