Keyword: 3次, スプライン, 導関数
概要
本サンプルは3次スプラインと導関数の評価を行うFortranによるサンプルプログラムです。 本サンプルは以下に示されるデータについてスプライン曲線フィットを行い、スプラインの値と導関数を求めて出力します。
※本サンプルはnAG Fortranライブラリに含まれるルーチン e02bcf() のExampleコードです。本サンプル及びルーチンの詳細情報は e02bcf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はe02bcf のマニュアルページを参照)1 2 3 4 5 6 7 8 9 10 11 12 13
このデータをダウンロード |
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 のマニュアルページを参照)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
この出力例をダウンロード |
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ライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法
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 49 50 51 52 53 54 55 56 57 58 59
このソースコードをダウンロード |
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