program spline use BSINT_INT use BSNAK_INT use BSCPP_INT use PPVAL_INT use BSVAL_INT implicit none real(8) f real(8) :: xi1=0.0d0, xi2=2.0d0 integer, parameter :: korder=4, ndata=20, ncoef=20, nknot=korder+ncoef real(8) :: break(ncoef), ppcoef(korder,ncoef), bscoef(ncoef) real(8), dimension(nknot) :: xknot integer i,nppcf real(8) x, xdata(ndata), fdata(ndata) real(8) z1,z2,z3 real(8), parameter :: Pi=3.141592653589793238d0 f(x)=dsin(Pi/2.d0*x) do i=1, ndata x=xi1+(xi2-xi1)*dfloat(i-1)/dfloat(ndata-1) xdata(i) = x fdata(i) = f(x) enddo CALL D_BSNAK (NDATA, XDATA, KORDER, XKNOT) CALL D_BSINT (NCOEF, XDATA, FDATA, KORDER, XKNOT, BSCOEF) CALL D_BSCPP (KORDER, XKNOT, NCOEF, BSCOEF, NPPCF, BREAK, PPCOEF) ! Первый блок I=2*ndata-3 x = dFLOAT(I)/dFLOAT(NDATA-1) z1=f(x) z2=D_BSVAL(x,KORDER,XKNOT,NCOEF,BSCOEF) z3=D_PPVAL(x,BREAK,PPCOEF) print*,'x=',x print*,z1,' ',z2,' ',z3 print* ! Второй блок x = dFLOAT(2*ndata-3)/dFLOAT(NDATA-1) z1=f(x) z2=D_BSVAL(x,KORDER,XKNOT,NCOEF,BSCOEF) z3=D_PPVAL(x,BREAK,PPCOEF) print*,'x=',x print*,z1,' ',z2,' ',z3 print* ! Третий блок I=2*ndata-3 x = dFLOAT(I)/dFLOAT(NDATA-1) z1=f(x) z2=D_BSVAL(x,KORDER,XKNOT,NCOEF,BSCOEF) z3=D_PPVAL(x,BREAK,PPCOEF) print*,'x=',x print*,z1,' ',z2,' ',z3 print* pause 'FINISH: press ENTER.' end program spline |