Program e02cafe ! E02CAF Example Program Text ! Mark 24 Release. NAG Copyright 2012. ! .. Use Statements .. Use nag_library, Only: e02caf, e02cbf, nag_wp ! .. Implicit None Statement .. Implicit None ! .. Parameters .. Integer, Parameter :: nin = 5, nout = 6 ! .. Local Scalars .. Real (Kind=nag_wp) :: ymax Integer :: i, ifail, inuxp1, inuyp1, j, k, l, & mi, mtot, n, na, nwork, r, t ! .. Local Arrays .. Real (Kind=nag_wp), Allocatable :: a(:), f(:), ff(:), nux(:), nuy(:), & w(:), work(:), x(:), xmax(:), & xmin(:), y(:) Integer, Allocatable :: m(:) ! .. Intrinsic Procedures .. Intrinsic :: max, sum ! .. Executable Statements .. Write (nout,*) 'E02CAF Example Program Results' ! Skip heading in data file Read (nin,*) ! Input the number of lines Y = Y(I) on which data is given, ! and the required degree of fit in the X and Y directions Read (nin,*) n, k, l inuxp1 = 1 inuyp1 = 1 na = (k+1)*(l+1) Allocate (a(na),m(n),y(n),xmin(n),xmax(n),nux(inuxp1),nuy(inuyp1)) ! Input Y(I), the number of data points on Y = Y(I) and the ! range of X-values on this line, for I = 1,2,...N Do i = 1, n Read (nin,*) y(i), m(i), xmin(i), xmax(i) End Do mtot = sum(m(1:n)) nwork = 3*mtot + 2*n*(k+2) + 5*(1+max(k,l)) Allocate (x(mtot),f(mtot),w(mtot),ff(mtot),work(nwork)) ! Input the X-values and function values, F, together with ! their weights, W. Read (nin,*)(x(i),f(i),w(i),i=1,mtot) ! Evaluate the coefficients, A, of the fit to this set of data ifail = 0 Call e02caf(m,n,k,l,x,y,f,w,mtot,a,na,xmin,xmax,nux,inuxp1,nuy,inuyp1, & work,nwork,ifail) mi = 0 Write (nout,*) Write (nout,*) ' Data Y Data X Data F Fitted F Residual' Write (nout,*) Do r = 1, n t = mi + 1 mi = mi + m(r) ymax = y(n) If (n==1) Then ymax = ymax + 1.0E0_nag_wp End If ! Evaluate the fitted polynomial at each of the data points ! on the line Y = Y(R) ifail = 0 Call e02cbf(t,mi,k,l,x,xmin(r),xmax(r),y(r),y(1),ymax,ff,a,na,work, & nwork,ifail) ! Output the data and fitted values on the line Y = Y(R) Do i = t, mi Write (nout,99999) y(r), x(i), f(i), ff(i), ff(i) - f(i) End Do Write (nout,*) End Do ! Output the Chebyshev coefficients of the fit Write (nout,*) 'Chebyshev coefficients of the fit' Write (nout,*) Do j = 1, k + 1 Write (nout,99998)(a(i),i=1+(j-1)*(l+1),j*(l+1)) End Do 99999 Format (3X,4F11.4,E11.2) 99998 Format (1X,6F11.4) End Program e02cafe