Piecewise polynomial struct

提供: ComplexRI: Manual
2026年5月26日 (火) 04:15時点におけるHirano (トーク | 投稿記録)による版 (ページの作成:「== 概要 == piecewise_polynomial_struct は多項式と分岐条件で作られる一次元の区分多項式を解析的に取り扱うために作られた構造体で…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

piecewise_polynomial_struct は多項式と分岐条件で作られる一次元の区分多項式を解析的に取り扱うために作られた構造体である。 この構造体を利用することで、例えば多項式

を右に 1 だけシフトさせた多項式

を作成したり、両者を足した多項式

を得たりといったことをプログラム中で解析的に行うことが可能となる。 扱える操作としては、シフト、反転、足し算、引き算、微分、積分等がある。

プログラムの構造

piecewise_polynomial_struct は piecewise_struct の拡張構造体であり、 メンバ変数として polynomial2_struct の配列を持つ。 このような構造にした目的は、区分多項式の演算を行うには、 区分構造に関わる演算と多項式に関わる演算の 2 種類の演算を同時に行う必要があり、 その違いを明確化したかったためである。

使い方

コンストラクタ

piecewise_polynomial_struct のコンストラクタとして

type(piecewse_polynomial_struct) function piecewise_polynomial(breaks,p) result(pp)
  REAL8,intent(in) :: breaks(1:n)    !!! 区分構造を表わす配列
  type(polynomial2_struct),intent(in) :: p(1:n+1)    !!! 各区分で使用される多項式の配列

が用意されており、例えば概要の f(x) は

p(1) = 0.0d0
p(2) = polynomial([0.0d0,0.0d0,1.0d0])
pp = piecewise_polynomial([0.0d0],p(1:2))

のようにして作成する。


可能な操作

操作は適宜追加していく。 現在可能な操作は、

出力関係

  • 数式を文字列として出力: string([i]) result(s)
  • 実際の値を得る: substitute(x) result(y)

関数の変形

  • x 方向に a だけ平行移動: x_shift(a) result(pp)
  • y 方向に b だけ平行移動: y_shift(b) result(pp)
  • x 軸に対して反転: x_reflect() result(pp)
  • y 軸に対して反転: y_reflect() result(pp)
  • 原点に対して反転: O_invert() result(pp)
  • x 方向に c 倍: x_zoom(c) result(pp)
  • y 方向に c 倍: y_zoom(c) result(pp)

加算,減算,乗算

  • 足し算: operator(+)
現在、(区分多項式) + (区分多項式) 及び (区分多項式) + (実数) が実装されている。
  • 引き算: operator(-)
現在、(区分多項式) - (区分多項式) 及び (区分多項式) - (実数)、(実数) - (区分多項式) が実装されている。
  • 掛け算: operator(*)
現在のところ、区分領域が同じ場合のみ (区分多項式) * (区分多項式) が計算可能。

微分・積分

  • 微分: differenciate() result(pp)
  • 積分: integrate() result(pp)


特殊な関数の取得

多項式で作られる特殊な関数は、

pp = special_functon(parameters...)

の形で取得できるように、piecewise_polynomial_struct 中で function として用意することにする。

関数一覧

smooth_step(mid,width,left,right)
ステップ関数を滑らかにした関数。
mid - width/2 < x < mid + width/2 の領域において C3 級の滑らかさで left から right まで変化する。