<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>http://comp.chem.tohoku.ac.jp/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Piecewise_polynomial_struct</id>
	<title>Piecewise polynomial struct - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="http://comp.chem.tohoku.ac.jp/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Piecewise_polynomial_struct"/>
	<link rel="alternate" type="text/html" href="http://comp.chem.tohoku.ac.jp/mediawiki/index.php?title=Piecewise_polynomial_struct&amp;action=history"/>
	<updated>2026-05-26T19:55:06Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.36.2</generator>
	<entry>
		<id>http://comp.chem.tohoku.ac.jp/mediawiki/index.php?title=Piecewise_polynomial_struct&amp;diff=1110&amp;oldid=prev</id>
		<title>Hirano: ページの作成:「== 概要 == piecewise_polynomial_struct は多項式と分岐条件で作られる一次元の区分多項式を解析的に取り扱うために作られた構造体で…」</title>
		<link rel="alternate" type="text/html" href="http://comp.chem.tohoku.ac.jp/mediawiki/index.php?title=Piecewise_polynomial_struct&amp;diff=1110&amp;oldid=prev"/>
		<updated>2026-05-26T04:15:36Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == piecewise_polynomial_struct は多項式と分岐条件で作られる一次元の区分多項式を解析的に取り扱うために作られた構造体で…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
piecewise_polynomial_struct は多項式と分岐条件で作られる一次元の区分多項式を解析的に取り扱うために作られた構造体である。&lt;br /&gt;
この構造体を利用することで、例えば多項式&lt;br /&gt;
:&amp;lt;math&amp;gt; f(x) = \begin{cases} 0  &amp;amp; x &amp;lt; 0 \\ x^2 &amp;amp; x &amp;gt; 0 \end{cases} &amp;lt;/math&amp;gt;&lt;br /&gt;
を右に 1 だけシフトさせた多項式&lt;br /&gt;
:&amp;lt;math&amp;gt; g(x) = \begin{cases} 0  &amp;amp; x &amp;lt; 1 \\ (x-1)^2 &amp;amp; 1 &amp;lt; x \end{cases} &amp;lt;/math&amp;gt;&lt;br /&gt;
を作成したり、両者を足した多項式&lt;br /&gt;
:&amp;lt;math&amp;gt; h(x) = \begin{cases} 0  &amp;amp; x &amp;lt; 0 \\ x^2 &amp;amp; 0 &amp;lt; x &amp;lt; 1 \\ x^2 + (x-1)^2 &amp;amp; 1 &amp;lt; x \end{cases} &amp;lt;/math&amp;gt;&lt;br /&gt;
を得たりといったことをプログラム中で解析的に行うことが可能となる。&lt;br /&gt;
扱える操作としては、シフト、反転、足し算、引き算、微分、積分等がある。&lt;br /&gt;
&lt;br /&gt;
== プログラムの構造 ==&lt;br /&gt;
piecewise_polynomial_struct は [[piecewise_struct]] の拡張構造体であり、&lt;br /&gt;
メンバ変数として [[polynomial2_struct]] の配列を持つ。&lt;br /&gt;
このような構造にした目的は、区分多項式の演算を行うには、&lt;br /&gt;
[[piecewise_struct|区分構造]]に関わる演算と多項式に関わる演算の 2 種類の演算を同時に行う必要があり、&lt;br /&gt;
その違いを明確化したかったためである。&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
=== コンストラクタ ===&lt;br /&gt;
piecewise_polynomial_struct のコンストラクタとして&lt;br /&gt;
&lt;br /&gt;
 type(piecewse_polynomial_struct) function piecewise_polynomial(breaks,p) result(pp)&lt;br /&gt;
   REAL8,intent(in) :: breaks(1:n)    !!! [[piecewise_struct|区分構造]]を表わす配列&lt;br /&gt;
   type([[polynomial2_struct]]),intent(in) :: p(1:n+1)    !!! 各区分で使用される多項式の配列&lt;br /&gt;
&lt;br /&gt;
が用意されており、例えば概要の f(x) は&lt;br /&gt;
&lt;br /&gt;
 p(1) = 0.0d0&lt;br /&gt;
 p(2) = polynomial([0.0d0,0.0d0,1.0d0])&lt;br /&gt;
 pp = piecewise_polynomial([0.0d0],p(1:2))&lt;br /&gt;
&lt;br /&gt;
のようにして作成する。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 可能な操作 ===&lt;br /&gt;
操作は適宜追加していく。 現在可能な操作は、&lt;br /&gt;
&lt;br /&gt;
==== 出力関係 ====&lt;br /&gt;
* 数式を文字列として出力： string([i]) result(s)&lt;br /&gt;
* 実際の値を得る: substitute(x) result(y)&lt;br /&gt;
&lt;br /&gt;
==== 関数の変形 ====&lt;br /&gt;
* x 方向に a だけ平行移動: x_shift(a) result(pp)&lt;br /&gt;
* y 方向に b だけ平行移動: y_shift(b) result(pp)&lt;br /&gt;
* x 軸に対して反転: x_reflect() result(pp)&lt;br /&gt;
* y 軸に対して反転: y_reflect() result(pp)&lt;br /&gt;
* 原点に対して反転: O_invert() result(pp)&lt;br /&gt;
* x 方向に c 倍: x_zoom(c) result(pp)&lt;br /&gt;
* y 方向に c 倍: y_zoom(c) result(pp)&lt;br /&gt;
&lt;br /&gt;
==== 加算,減算,乗算 ====&lt;br /&gt;
* 足し算: operator(+)&lt;br /&gt;
:: 現在、(区分多項式) + (区分多項式) 及び (区分多項式) + (実数) が実装されている。&lt;br /&gt;
* 引き算: operator(-)&lt;br /&gt;
:: 現在、(区分多項式) - (区分多項式) 及び (区分多項式) - (実数)、(実数) - (区分多項式) が実装されている。&lt;br /&gt;
* 掛け算: operator(*)&lt;br /&gt;
:: 現在のところ、区分領域が同じ場合のみ (区分多項式) * (区分多項式) が計算可能。&lt;br /&gt;
&lt;br /&gt;
==== 微分・積分 ====&lt;br /&gt;
* 微分: differenciate() result(pp)&lt;br /&gt;
* 積分: integrate() result(pp)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 特殊な関数の取得 ===&lt;br /&gt;
多項式で作られる特殊な関数は、&lt;br /&gt;
&lt;br /&gt;
 pp = ''special_functon''(''parameters...'')&lt;br /&gt;
&lt;br /&gt;
の形で取得できるように、piecewise_polynomial_struct 中で function として用意することにする。&lt;br /&gt;
&lt;br /&gt;
==== 関数一覧 ====&lt;br /&gt;
;smooth_step(mid,width,left,right)&lt;br /&gt;
: ステップ関数を滑らかにした関数。&lt;br /&gt;
: mid - width/2 &amp;lt; x &amp;lt; mid + width/2 の領域において C3 級の滑らかさで left から right まで変化する。&lt;/div&gt;</summary>
		<author><name>Hirano</name></author>
	</entry>
</feed>