Numerical Calculation

しかしこの「なかなか脱出できない」という事実こそがむしろ最重要ポイント.なんじゃそりゃ.

う〜ん.数値的に非常に性質の悪い最適化問題を扱わないといけなくなった. ある点の近傍において,目標関数(最小化の対象の関数)の値が 10^5 程度でその微分係数ベクトルの norm が 1.0e-8 程度という最適化問題.仮にこれが極値付近の領域の話ならばどう…

あぁ!? これ objective が convex じゃねーじゃんかーっ!!!あぁ,もう,氏ね死ね市ね.>俺

line search (step length selection) 重要

最急降下法だろうが共役勾配法だろうが,勾配法の心臓部は結局 line search (step length selection) ,特に初期の step length の設定だよにぇ,ってゆ〜.ニュートン法 (準ニュートン法) なら step length の初期値をちょーてきとーに決めても最適化のシス…

(Non-linear) Conjugation Gradient

http://www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf すげぇwww. CG について説明しているのに CG のアルゴリズムの表式がちゃんと出てくるのが30ページ目www.自分が知りたい non-linear な場合にいたっては42ページ目.つか, CG…

Lanczos approximation - ガンマ関数の数値計算

忘れないうちに書いておこう. http://d.hatena.ne.jp/Cryolite/20061121#p1 どうもガンマ関数の数値計算には Lanczos 近似というものを使うみたいだにゃ.希望する多倍長精度への拡張も (誤差評価含めて) 簡単そうでい〜感じ.

log1pとかexpm1がなければ自分で作れば良いじゃない

マリー=アントワネット様の素晴らしいお言葉に勇気付けられながら,IA-32 + MSVC++でのlog1pの1実装. 以下の実装はIA-32 + MSVC++な環境でのみ有効なコードです. // log(1.0 + x)を計算する.特に|x| << 1.0で高精度であることが期待できる. double log1p…

exp(-∞) @リリースビルド @VC7.1

VC7.1のリリースビルドだとexp(-∞)が無効な値になるようなアセンブリ吐くじゃんか,ぶ〜ぶ〜ぶ〜. // exp(x)のリリースビルドが吐くコード // st(0) <- x fldl2e; fmulp st(1), st; fld st(0); frndint; fxch st(1); fsub st, st(1); // x = -∞だとここが(-…

IEC 60559 -> CHF

IEC 60559はっけーん.98スイスフランっていくらだ?8000円台?やっぱお高いものだよなー. ちなみに"CHF"というのがスイスフランの略号だと気が付くまでのいきさつ. ぐぐる先生にIECのページをお尋ねする IECのページに飛ぶ IECのページのドメイン"ch"がど…

C++にはlog1pありませんから

あー,しまった.ISO/IEC 14882-2003 がCの規格として指しているのは ISO/IEC 9899-1990 (C90)だからlog1pないじゃん.その上VC7.1のCRTはC99準拠じゃないからCのをC++で使うのもできにゃい…. ちょっとしょぼぼぼぼーん.

C++における浮動少数や数学関数の規格

C++における浮動少数演算や数学関数の仕様はすべてC由来で,従ってISO/IEC 14882-2003には書いてなくCの規格読めで一蹴されてしまっている.だから,例えば 「std::expに-std::numeric_limits::infinity()を食わせたら0が返ってくることは仕様として期待でき…

Compile-time Transcendental

む〜. #include <iostream> #include <boost/preprocessor.hpp> inline double sin(double x) // x must be in [-pi/2, pi/2) { #define INIT_N 1 #define TERMINATING_N 12 #define SIN_TAYLOR_TERM(N, K, DUMMY) \ * (1.0 - x * x / (K * (4 * K + 2)) #define CLOSING_PARENTHESIS(N, K, DU</boost/preprocessor.hpp></iostream>…

unroll+ETなC++数値計算ライブラリ

id:Cryolite:20040510#p3書いてて(というかずっと前から)思ったのですが,unroll+ET+ブロック化なC++線型代数ライブラリって無いんでしょうかねぇ.線型代数ライブラリってやっぱりATLAS最適化BLASあたりが一つの目標になると思うのですが,あれと同じよう…

おまけ

以下は上の欺瞞に満ちた実験に対する言い訳ですw.数値計算の泥臭い話で,ETの本筋の話から外れるのであんまし読まないでくださいw. まず最初に,Explicitの書き方は毎回の演算ごとにindexingするあんまりよろしくない書き方で本来は以下の書き方が適切と…