Polynomial2 struct

提供: ComplexRI: Manual
ナビゲーションに移動 検索に移動

多項式の計算を行う構造体。 和・差・積、微分・積分、シフト・反転 等の操作が行える。

サンプルコード

<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>