aboutsummaryrefslogtreecommitdiff
path: root/math/deboor/progs/prog15.f
blob: 2158931e7bcf6683569d98c9543a9b0bc388a85f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
chapter xiv, example 1. cubic smoothing spline
c  from  * a practical guide to splines *  by c. de boor
calls  bsplpp(bsplvb), ppvalu(interv), smooth(setupq,chol1d)
c     values from a cubic b-spline are rounded to  n d i g i t	places
c  after the decimal point, then smoothed via  s m o o t h  for
c  various values of the control parameter  s .
      integer i,is,j,l,lsm,ndigit,npoint,ns
      real a(61,4),bcoef(7),break(5),coef(4,4),coefsm(4,60),dely,dy(61)
     *	  ,s(20),scrtch(427),sfp,t(11),tenton,x(61),y(61)
      real ppvalu,smooth
      equivalence (scrtch,coefsm)
      data t /4*0.,1.,3.,4.,4*6./
      data bcoef /3*0.,1.,3*0./
      call bsplpp(t,bcoef,7,4,scrtch,break,coef,l)
      npoint = 61
      read 500,ndigit,ns,(s(i),i=1,ns)
  500 format(2i3/(e10.4))
      print 600,ndigit
  600 format(24h exact values rounded to,i2,21h digits after decimal
     *	     ,7h point./)
      tenton = 10.**ndigit
      dely = .5/tenton
      do 10 i=1,npoint
	 x(i) = .1*float(i-1)
	 y(i) = ppvalu(break,coef,l,4,x(i),0)
	 y(i) = float(int(y(i)*tenton + .5))/tenton
   10	 dy(i) = dely
      do 15 i=1,npoint,5
	 do 15 j=1,4
   15	    a(i,j) = ppvalu(break,coef,l,4,x(i),j-1)
      print 615,(i,(a(i,j),j=1,4),i=1,npoint,5)
  615 format(52h value and derivatives of noisefree function at some
     *	    ,7h points/(i4,4e15.7))
      do 20 is=1,ns
	 sfp = smooth ( x, y, dy, npoint, s(is), scrtch, a )
	 lsm = npoint - 1
	 do 16 i=1,lsm
	    do 16 j=1,4
   16	       coefsm(j,i) = a(i,j)
	 do 18 i=1,npoint,5
	    do 18 j=1,4
   18	       a(i,j) = ppvalu(x,coefsm,lsm,4,x(i),j-1)
   20	 print 620, s(is), sfp, (i,(a(i,j),j=1,4),i=1,npoint,5)
  620 format(15h prescribed s =,e10.3,23h, s(smoothing spline) =,e10.3/
     *	     54h value and derivatives of smoothing spline at corresp.
     *	    ,7h points/(i4,4e15.7))
					stop
      end