Polynomial2 struct
ナビゲーションに移動
検索に移動
多項式の計算を行う構造体。 和・差・積、微分・積分、シフト・反転 等の操作が行える。
サンプルコード
<source lang="fortran"> program main
use polynomial2_module,only: polynomial2_struct use polynomial2_module,only: polynomial2 !!! コンストラクタ implicit none type(polynomial2_struct) :: p1, p2, p3 REAL8 :: c1(0:2), c2(0:3)
!!! 多項式の係数の設定 !!!
c1(0:2) = [ 1.0d0, 2.0d0, 1.0d0 ] !!! 1 + 2 x + x**2 c2(0:3) = [ 3.0d0, 2.0d0, 0.0d0, 2.0d0 ] !!! 3 + 2 x + + 2 x**3
!!! 構造体の作成 !!!
p1 = polynomial2(c1) p2 = polynomial2(c2) p3 = 3.0d0 !!! 定数関数は直接代入も可
write(*,*)
!!! 値の出力 !!!
!!! 多項式の次数 write(*,*) p1%degree !!! 2
!!! x を指定したときの値 write(*,*) p1%substitute(1.0d0) !!! 4
!!! 文字列として出力 write(*,*) p1%string() !!! 1 + 2 x + x**2
write(*,*) write(*,*) "###########################" write(*,*)
!!! 和・差・積、定数倍、代入 !!!
p3 = p1 + p2 write(*,*) p3%string() !!! 4 + 4 x + x**2 + 2 x**3
p3 = p1 - p2 write(*,*) p3%string() !!! - 2 + x**2 - 2 x**3
p3 = p1 * p2 write(*,*) p3%string() !!! 3 + 8 x + 7 x**2 + 4 x**3 + 4 x**4 + 2 x**5
!!! 定数は右からでも左からでも掛けることができる。 p3 = p1 * 2.0d0 write(*,*) p3%string() !!! 2 + 4 x + 2 x**2 p3 = 2.0d0 * p1 write(*,*) p3%string() !!! 2 + 4 x + 2 x**2
!!! 多項式の代入も可 p3 = p1%substitute(p2) write(*,*) p3%string() !!! 16 + 16 x + 4 x**2 + 16 x**3 + 8 x**4 + 4 x**6
write(*,*) write(*,*) "###########################" write(*,*)
!!! 微分・積分 !!!
!!! 微分 p3 = p1%differentiate() write(*,*) p3%string() !!! 2 + 2 x
!!! 積分 !!! x = 0 のとき y = 0 になるように積分定数が決められる。 p3 = p1%integrate() write(*,*) p3%string() !!! x + x**2 + (1/3) x**3
write(*,*) write(*,*) "###########################" write(*,*)
!!! シフト・反転操作 !!!
!!! 多項式のグラフを右方向に 1.0d0 だけシフトさせる。 !!! 負の値を指定すれば左にシフトする。 p3 = p1%x_shift(1.0d0) write(*,*) p3%string() !!! x**2
!!! 多項式のグラフを上方向に 1.0d0 だけシフトさせる。 !!! 負の値を指定すれば下にシフトする。 p3 = p1%y_shift(1.0d0) write(*,*) p3%string() !!! 2 + 2 x + x**2
!!! 上下反転 p3 = p1%x_reflect() write(*,*) p3%string() !!! - 1 - 2 x - x**2
!!! 左右反転 p3 = p1%y_reflect() write(*,*) p3%string() !!! 1 - 2 x + x**2
!!! 点対称に反転 p3 = p1%point_reflect() write(*,*) p3%string() !!! - 1 + 2 x - x**2
write(*,*) write(*,*) "###########################" write(*,*)
endprogram
</source>