Keyword: 3次, スプライン, 導関数
概要
本サンプルは3次スプラインと導関数の評価を行うFortranによるサンプルプログラムです。 本サンプルは以下に示されるデータについてスプライン曲線フィットを行い、スプラインの値と導関数を求めて出力します。
※本サンプルはnAG Fortranライブラリに含まれるルーチン e02bcf() のExampleコードです。本サンプル及びルーチンの詳細情報は e02bcf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はe02bcf のマニュアルページを参照)| このデータをダウンロード |
E02BCF Example Program Data 7 7 0.0 0.0 0.0 0.0 1.0 3.0 3.0 3.0 4.0 4.0 6.0 6.0 6.0 6.0 10.0 12.0 13.0 15.0 22.0 26.0 24.0 18.0 14.0 12.0 0.0 1.0 2.0 3.0 4.0 5.0 6.0
- 1行目はタイトル行で読み飛ばされます。
- 2行目にスプライン区間の数(ncap)、xの数(m)を指定しています。
- 3〜4行目にノットの値(lamda)を指定しています。
- 5〜6行目にBスプラインの係数(c)を指定しています。
- 7〜13行目に3次スプラインと導関数が評価される引数xを指定しています。
出力結果
(本ルーチンの詳細はe02bcf のマニュアルページを参照)| この出力例をダウンロード |
E02BCF Example Program Results
X Spline 1st deriv 2nd deriv 3rd deriv
0.00E+00 LEFT 0.1000E+02 0.6000E+01 -0.1000E+02 0.1067E+02
0.00E+00 RIGHT 0.1000E+02 0.6000E+01 -0.1000E+02 0.1067E+02
0.10E+01 LEFT 0.1278E+02 0.1333E+01 0.6667E+00 0.1067E+02
0.10E+01 RIGHT 0.1278E+02 0.1333E+01 0.6667E+00 0.3917E+01
0.20E+01 LEFT 0.1510E+02 0.3958E+01 0.4583E+01 0.3917E+01
0.20E+01 RIGHT 0.1510E+02 0.3958E+01 0.4583E+01 0.3917E+01
0.30E+01 LEFT 0.2200E+02 0.1050E+02 0.8500E+01 0.3917E+01
0.30E+01 RIGHT 0.2200E+02 0.1200E+02 -0.3600E+02 0.3600E+02
0.40E+01 LEFT 0.2200E+02 -0.6000E+01 0.0000E+00 0.3600E+02
0.40E+01 RIGHT 0.2200E+02 -0.6000E+01 0.0000E+00 0.1500E+01
0.50E+01 LEFT 0.1625E+02 -0.5250E+01 0.1500E+01 0.1500E+01
0.50E+01 RIGHT 0.1625E+02 -0.5250E+01 0.1500E+01 0.1500E+01
0.60E+01 LEFT 0.1200E+02 -0.3000E+01 0.3000E+01 0.1500E+01
0.60E+01 RIGHT 0.1200E+02 -0.3000E+01 0.3000E+01 0.1500E+01
- 3〜24行目にxの値、左辺値か右辺値か、スプライン、1階導関数、2階導関数、3階導関数が出力されています。
ソースコード
(本ルーチンの詳細はe02bcf のマニュアルページを参照)
※本サンプルソースコードは科学技術・統計計算ライブラリである「nAG Fortranライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
PROGRAM e02bcfe
! E02BCF Example Program Text
! Mark 23 Release. nAG Copyright 2011.
! .. Use Statements ..
USE nag_library, ONLY : e02bcf, nag_wp
! .. Implicit None Statement ..
IMPLICIT NONE
! .. Parameters ..
INTEGER, PARAMETER :: nin = 5, nout = 6
! .. Local Scalars ..
REAL (KIND=nag_wp) :: x
INTEGER :: i, ifail, l, left, m, ncap, ncap7
! .. Local Arrays ..
REAL (KIND=nag_wp), ALLOCATABLE :: c(:), lamda(:)
REAL (KIND=nag_wp) :: s(4)
! .. Executable Statements ..
WRITE (nout,*) 'E02BCF Example Program Results'
! Skip heading in data file
READ (nin,*)
READ (nin,*) ncap, m
ncap7 = ncap + 7
ALLOCATE (lamda(ncap7),c(ncap7))
READ (nin,*) lamda(1:ncap7)
READ (nin,*) c(1:(ncap+3))
DO i = 1, m
READ (nin,*) x
DO left = 1, 2
ifail = 0
CALL e02bcf(ncap7,lamda,c,x,left,s,ifail)
IF (left==1) THEN
IF (i==1) THEN
WRITE (nout,*)
WRITE (nout,*) ' X Spline &
& 1st deriv 2nd deriv 3rd deriv'
END IF
WRITE (nout,*)
WRITE (nout,99999) x, ' LEFT', (s(l),l=1,4)
ELSE
WRITE (nout,99999) x, ' RIGHT', (s(l),l=1,4)
END IF
END DO
END DO
99999 FORMAT (1X,E10.2,A,4E12.4)
END PROGRAM e02bcfe
