最終更新: 2024/2/6

構成ファイルの役割一覧

README.txt
LICENSE.txt


kv/ このdirectory以下が本体


kv/convert.hpp 数値型のプログラミングのため全体的に使われている
kv/constants.hpp 定数の定義


kv/interval.hpp 区間演算
kv/rdouble.hpp 内部にdoubleを持つ区間演算で精度保証するために必要な追加ファイル(実体はrdouble-hwround.hpp or rdouble-nohwround.hpp or rdouble-avx512.hpp )
kv/rdouble-hwround.hpp 内部にdoubleを持つ区間演算を丸めモード変更で実現
kv/rdouble-nohwround.hpp 内部にdoubleを持つ区間演算を丸めモード変更を使わずに実現(-DKV_NOHWROUNDで有効に)
kv/rdouble-avx512.hpp 内部にdoubleを持つ区間演算をAVX-512の丸め方向指定付き命令で実現
kv/conv-double.hpp doubleと文字列の間の丸め指定付き変換。単体でも使用可能。
kv/hwround.hpp 丸めモード変更
kv/interval-vector.hpp 区間ベクトル、区間行列のための関数群


kv/dd.hpp 4倍精度計算
kv/rdd.hpp 内部にddを持つ区間演算で精度保証するために必要な追加ファイル(実体はrdd-hwround.hpp or rdd-nohwround.hpp or rdd-avx512.hpp)
kv/rdd-hwround.hpp 内部にddを持つ区間演算を丸めモード変更で実現
kv/rdd-nohwround.hpp 内部にddを持つ区間演算を丸めモード変更を使わずに実現(-DKV_NOHWROUNDで有効に)
kv/rdd-avx512.hpp 内部にddを持つ区間演算をAVX-512の丸め方向指定付き命令で実現
kv/conv-dd.hpp ddと文字列の間の丸め指定付き変換。単体でも使用可能。
kv/fpu53.hpp Intel CPUのFPUの計算精度を53bitにセットする (version 0.4.54で使用しなくなった)


kv/rfloat64x.hpp 内部にIntel 80bit浮動小数点数 (_Float64x) を持つ区間演算を実現
kv/ddx.hpp Intel 80bit浮動小数点数 (_Float64x) を2つ繋げた全長160bit、指数部15bit、仮数部128bitの計算
kv/rddx.hpp 内部にddx型を持つ区間演算を実現
kv/conv-float64x.hpp _Float64xと文字列の間の丸め指定付き変換
kv/conv-ddx.hpp ddxと文字列の間の丸め指定付き変換


kv/mpfr.hpp mpfrのラッパー
kv/rmpfr.hpp 内部にmpfrを持つ区間演算を実現するのに必要な追加ファイル


kv/interval-conv.hpp (廃止予定。interval-converter.hppを使って下さい。) interval<double>, interval<dd>, interval<mpfr>の間の相互変換。double, dd, mpfrの間の丸め方向付き相互変換
kv/interval-converter.hpp interval<double>, interval<dd>, interval<mpfr>, interval<_Float64x>, interval<ddx>の間の相互変換。double, dd, mpfr, _float64x, ddxの間の丸め方向付き相互変換


kv/complex.hpp 複素数演算


kv/autodif.hpp 自動微分


kv/affine.hpp affine arithmetic


kv/psa.hpp ベキ級数演算


kv/kraw-approx.hpp 近似解を元にした非線形方程式に対するKrawczyk法
kv/make-candidate.hpp 候補者集合の生成のための小さな関数


kv/allsol.hpp 非線形方程式の全解探索
kv/allsol-simple.hpp allsol.hppの機能を削ってsimpleにしたもの
kv/allsol-affine.hpp Affineを使った全解探索 (十分テストされていない)


kv/ode.hpp 常微分方程式の精度保証 (psaを使った1step法、あるいはそれを繋いだもの)
kv/ode-autodif.hpp ode.hppで初期値をautodif型にしたもの。初期値に関する微分が出来る。
kv/ode-maffine.hpp ode.hppをaffineで接続したもの。
kv/ode-param.hpp odeを解くためのいろいろなパラメータを定義したもの


kv/ode-maffine2.hpp ode-maffineの高速版。初期値に関する微分ができない。
kv/ode-affine.hpp psaによる1step法で内部にまでaffineを使ったもの。高性能なはずだが遅い。
kv/ode-affine-wrapper.hpp ode-affine.hppを少し簡略化したもの。
kv/ode-qr.hpp psa法による1step法を、QR分解で接続したもの。
kv/ode-lohner.hpp Lohnerによる1step法を実装したもの。初期値に関する微分が出来るversionも含む。十分テストされていない。
kv/ode-qr-lohner.hpp Lohnerによる1step法をQR分解で接続したもの。
kv/ode-callback.hpp ode-*.hppでのcallback関数のためのbaseクラス
kv/odescale.hpp odeのscalingに関する実験。
kv/ode-nv.hpp 単なるTaylor展開によるode。精度保証しない。
kv/ode-autodif-nv.hpp ode-nv.hppの初期値をautodif型にしたもの。初期値に関する微分が出来る。精度保証しない。
kv/rk.hpp 単なる4次のルンゲクッタ法。精度保証しない。
kv/rkf45.hpp RKF45。精度保証しない。


kv/strobomap.hpp ode solverを使って、いわゆるストロボマップを定義。これとkraw-approxやallsolを組み合わせられる。
kv/poincaremap.hpp ode solverを使ってポアンカレマップを定義。これとkraw-approxやallsolを組み合わせられる。


kv/defint.hpp 精度保証付き数値積分
kv/defint-newtoncotes.hpp 複合Newton-Cotes公式による精度保証付き数値積分
kv/defint-singular.hpp 端点に特異性を持つ関数の精度保証付き数値積分
kv/doubleintegral.hpp 精度保証付き二重積分。三角形領域も。
kv/double-newtoncotes.hpp 複合Newton-Cotes公式による精度保証付き二重積分
kv/doubleint-curvededge.hpp 複合Newton-Cotes公式による曲がった辺を持つ長方形領域での精度保証付き二重積分
kv/doubleint-singular.hpp 辺及び一点に特異性を持つ関数の精度保証付き二重積分


kv/lobachevsky.hpp Lobachevsky関数の精度保証。まだまだ試作段階。
kv/gamma.hpp gamma, digamma, trigamma, lgamma関数の精度保証。まだまだ試作段階。
kv/beta.hpp beta関数の精度保証。まだまだ試作段階。
kv/hypergeom.hpp ガウスの超幾何関数の精度保証。まだまだ試作段階。
kv/airy.hpp Airy関数の精度保証。まだまだ試作段階。
kv/bessel.hpp 第1種Bessel関数の精度保証。まだまだ試作段階。
kv/geoseries.hpp 公比が区間である等比級数の和を求める関数


kv/matrix-inversion.hpp (近似)逆行列。ublasの単なるラッパー。他にもいろいろあるがundocumented。
kv/qr.hpp (近似)QR分解。単なるグラムシュミットの直交化。
kv/vleq.hpp 線形方程式の精度保証。何の工夫もない基本的なもの。
kv/eig.hpp 非対称実行列の固有値と固有ベクトルを(近似的に)計算するeig関数と、非対称実行列の固有値を精度保証付きで計算するveig関数。高安 亮紀氏の提供による。
kv/lp.hpp 線形計画問題を解く単体法の精度保証。十分テストされていない。
kv/optimize.hpp 最適化問題を解く。十分テストされていない。
kv/kkt.hpp 目的関数、不等式制約、等式制約からKKT方程式を作成する。
kv/newton.hpp 単なるNewton法。精度保証しない。十分テストされていない。
kv/dka.hpp 精度保証しないDurand Kerner Aberth法を行うdka関数と、Smithの定理を用いて精度保証するvdka関数。十分テストされてない。
kv/cardano-ferrari.hpp 3/4次の多項式の解をCardano/Ferrariの方法で直接区間演算で計算する。実用性はともかく、面白そうなので作ってみた。
kv/highderiv.hpp ベキ級数演算を用いて、与えられた1変数関数の高階微分を計算する。


kv/matplotlib.hpp python+matplotlibの呼び出しによる簡易グラフィックス
kv/psa-plot.hpp psa型をmatplotlibで描画。
kv/jointrange.hpp affine arithmeticのjoint rangeをmatplotlibで描画。


kv/all.hpp kv以下の全ファイルをまとめてinclude。コンパイル時間がかかるのでお勧めしない。


test/ 以下はテスト用。kv以下の対応するファイルのテスト。呼び出し方のサンプルでもある。

なるべく機能を網羅することを意図しているが、現時点では必ずしも網羅しているわけでは無い。


test/test-interval.cc 区間演算のテスト
test/test-interval-mult.cc 区間演算の乗算のテスト
test/test-rounding.cc 加減乗除と平方根で丸めの向きがちゃんと変わっているかどうかの簡易テスト
test/test-nohwround.cc -DKV_NOHWROUNDで用いられる丸め変更のエミュレートが正しく動くかどうかのテスト
test/test-fma.cc fma命令が正しく動いているかどうかの簡易テスト
test/test-dd.cc ddのテスト
test/test-idd.cc ddを両端に持つ区間演算のテスト
test/test-ifloat64x.cc _Float64xを両端に持つ区間演算のテスト
test/test-ddx.cc _Float64xを2つくっつけたddx型のテスト
test/test-iddx.cc ddxを両端に持つ区間演算のテスト
test/test-mpfr.cc mpfrのテスト
test/test-impfr.cc mpfrを両端に持つ区間演算のテスト


test/test-interval-conv.cc (廃止予定) interval-conv.hppのテスト
test/test-interval-converter.cc interval-converter.hppのテスト


test/test-complex.cc 複素数のテスト


test/test-autodif.cc 自動微分のテスト
test/test-affine.cc affine arithmeticのテスト
test/test-affine-reduce.cc affine arithmeticのダミー変数を減らす関数epsilon_reduceのテスト
test/test-affine-reduce2.cc affine arithmeticのダミー変数を減らす関数epsilon_reduce2のテスト
test/test-affinemult.cc affine arithmeticの乗算のテスト
test/test-psa.cc ベキ級数演算のテスト。
test/test-psa-history.cc ベキ級数演算のhistory機能のテスト。


test/test-kraw-approx.cc 近似解を元にした非線形方程式に対するKrawczyk法のテスト


test/test-allsol.cc 非線形方程式の全解探索のテスト
test/test-allsol-simple.cc 単純化した非線形方程式の全解探索のテスト
test/test-allsol-affine.cc allsol-affine.hppのテスト
test/test-allsol-rest.cc 重解があった場合など存在非存在が言えない区間が残った場合、それを返してもらう例
test/test-allsol-infinity.cc 非線形方程式の無限領域における全解探索のテスト
test/test-complexeq.cc 非線形方程式を複素領域で解く場合のサンプル


test/test-ode.cc ode.hppのテスト
test/test-ode-autodif.cc ode-autodif.hppのテスト
test/test-ode-maffine.cc ode-maffine.hppのテスト
test/test-ode-callback.cc ode-maffineに対してcallback関数を指定し、解きながら何かさせる場合のサンプル
test/test-ode-stop.cc callback関数を利用して常微分方程式の計算を途中で中止するサンプル


test/test-ode-maffine2.cc ode-maffine2.hppのテスト
test/test-ode-affine.cc ode-affine.hpp, ode-affine-wrapper.hppのテスト
test/test-ode-qr.cc ode-qr.hppのテスト
test/test-ode-lohner.cc ode-lohner.hppのテスト
test/test-ode-qr-lohner.cc ode-qr-lohner.hppのテスト
test/test-odescale.cc odescale.hppのテスト
test/test-ode-nv.cc ode-nv.hppのテスト
test/test-ode-autodif-nv.cc ode-autodif-nv.hppのテスト
test/test-rk.cc rk.hppのテスト
test/test-rkf45.cc rkf45.hppのテスト


test/test-strobomap.cc strobomap.hppのテスト
test/test-bvp.cc strobomapを使って2点境界値問題を解かせるサンプル
test/test-poincaremap.cc poincaremap.hppのテスト


test/test-defint.cc defint.hppのテスト
test/test-defint-byode.cc 数値積分をODEの一種と見なし、ODE Solverで数値積分を計算
test/test-doubleintegral.cc doubleintegral.hppのテスト
test/test-defint-singular.cc defint-singular.hppのテスト
test/test-doubleint-singular.cc doubleint-singular.hppのテスト
test/test-lobachevsky.cc lobachevsky.hppのテスト
test/test-gamma.cc gamma.hppのテスト
test/test-beta.cc beta.hppのテスト
test/test-hypergeom.cc hypergeom.hppのテスト
test/test-airy.cc airy.hppのテスト
test/test-bessel.cc bessel.hppのテスト
test/test-geoseries.cc geoseries.hppのテスト


test/test-invert.cc matrix-inversion.hppのテスト
test/test-qr.cc qr.hppのテスト
test/test-vleq.cc vleq.hppのテスト
test/test-eig.cc eig.hppのテスト
test/test-lp.cc lp.hppのテスト
test/test-optimize.cc optimize.hppのテスト
test/test-optimize-nd.cc optimize.hppの微分を使わない最適化関数のテスト
test/test-kkt.cc kkt.hppのテスト
test/test-newton.cc newton.hppのテスト
test/test-dka.cc dka.hppのテスト
test/test-cardano-ferrari.cc cardano-ferrari.hppのテスト
test/highderiv.cc highderiv.hppのテスト


test/test-matplotlib.cc matplotlib.hppのテスト
test/test-psa-plot.cc psa-plot.hppのテスト
test/test-ode-plot.cc psa-plot.hppとodeのcallbackを使ってodeの軌道を計算しながら表示。
test/test-jointrange.cc jointrange.hppのテスト




example/ 以下は過去にいろいろな問題を解かせたときのファイル群。作者もよく覚えていない。



以下は非線形方程式の全解探索のexample
example/allsolexample.hpp 全解探索のテスト問題いろいろ
example/allsolexample.cc allsolexample.hppを実行
example/burkardt-non.hpp http://people.sc.fsu.edu/~jburkardt/f_src/test_nonlin/test_nonlin.htmlにあった例題
example/test-burkardt-non.cc burkardt-non.hppを実行
example/coprin.hpp http://www-sop.inria.fr/coprin/logiciels/ALIAS/Benches/benches.htmlにあった例題
example/test-coprin.cc coprin.hppを実行
example/test-nishi.cc 西先生による、5つの解を持つ2-transistor回路の例
example/test-kanz.cc 神澤他: "有限ステップで停止する非線形方程式のすべての解を精度保証付きで求めるアルゴリズム"の例題を解く
example/zeros-legendre.cc ルジャンドル関数のゼロ点をいくつかの方法で求める



以下はODEのexample
example/ivp-example.hpp
example/ivp-example.cc
example/burkardt-ode.hpp
example/test-burkardt-ode.cc
example/test-kubota.cc
example/test-kepler.cc
example/test-duffing.cc
example/test-3body.cc 三体問題
example/test-oga.cc
example/test-neher.cc
example/test-ueda.cc
example/neumaier-ex2.cc
example/doublependulum.cc 二重振り子
example/test-vdp.cc
example/test-oregonator.cc
example/rober.cc Robertson problem
example/test-parametric.cc パラメータを含むODEをパラメータを未知関数に変換して解く例


example/lorenz-periodic.cc ポアンカレマップを用いてローレンツ方程式の周期解を求める
example/rossler-periodic.cc ポアンカレマップを用いてレスラー方程式の周期解を求める
example/craik-periodic.cc



以下は数値積分のexample
example/burkardt-int.hpp
example/test-burkardt-int.cc
example/defint-example.cc 数値積分の例題集
example/defint-singular-example.cc 端点特異性を持つ数値積分の例題集
example/defint-ooura.cc 大浦先生のDEパッケージFAQにあった数値積分の例題



その他
example/test-evalrange.cc ある5変数関数の像をinterval, affine, mvfで計算
example/hessian.cc autodifを使ってHessianを計算させる例