2008-01-01から1年間の記事一覧
C++では, #define で定数を定義するな, const TYPE によるグローバル変数(もしくは適当な名前空間に内包されたグローバル変数)を使え, #define でマクロ関数を定義するな,代わりに inline 関数を使え,みたいなことが言われる.これは確かにその通りだ…
適当な構造体 TTest のインスタンスが const で修飾されているとき(const TTest x),そのメンバに値を代入したい,でもそのためだけにそのインスタンス(x)から const を外すのは嫌,という場合を考えよう.あるいは const メンバ関数(メンバ変数を変更し…
メモリの二重解放とは, new などで確保したメモリ領域(ヒープ領域)を2回 delete などで解放することを言う. new と delete をきちんと対応させて書いていないときに起こる問題だ.特にクラスのメンバに動的確保したメモリへのポインタを含む場合にやって…
通常,C++のテンプレート関数(orクラス)をライブラリ化するとき,それを利用するソースから,そのテンプレート関数の実装(定義)も含めてインクルードしなければならない.そうしないと,特定の型に対してテンプレート関数のインスタンスを生成できないから…
戻り値が void 型である関数 func1 を,戻り値が void 型であるほかの関数 func2 において, return func1(..); のように返せるか実験してみた.
先日,LaTeX の数式を PNG と SVG に変換する方法についての記事を載せた.この方法を使いやすくスクリプト化してみた.
liboctave 利用時のコンパイルを「遅い」と感じたことはないだろうか.ここでは liboctave におけるヘッダファイルの依存関係を把握することにより,コンパイルを高速化する方法を検討する.
C++の機能,テンプレートの部分特殊化 (Wikipedia)を使って,あるポインタ型orイテレータ型から,それを間接参照した(or逆参照した,orポインタをとっぱらった)型を推定する方法を紹介する.
bash で2次元配列を扱いたいときがまれにある.が, bash には1次元配列しか無いし,配列の要素に配列を代入することもできない.そこで疑似的に2次元配列を使う方法を考えてみた.
デフォルトパラメータを持つ仮想関数を継承する場合の振る舞いを調べてみた.仮想関数は「動的に結合」される一方,デフォルトパラメータは「静的に結合」される.
C/C++ で配列の各要素に名前をつける方法について.例えば, unsigned char col[4]; として宣言された col の各要素を red, green, blue, alpha のような識別子でも参照できるようにする.
STL (標準テンプレートライブラリ) の std::vector とか liboctave の ColumnVector,あるいは普通の配列に対して共通に使えるテンプレート関数の作り方を説明する.
C++ で実装した関数を C から利用したい場合,あるいはその逆の場合がある.同じソースの中に両方のプログラムコードを書くことはできないが,それぞれのソースをコンパイルしてオブジェクトファイルを生成し,それらをリンクすることは可能だ.ただし C++ …
nVIDIA の GeForce 8800 GT を搭載しているマシンに, Debian-lenny をインストールし, KDE 3.5.9 で作業している.夜パソコンを起動したまま帰宅し朝見てみると, X.Org が固まっている.この問題を解決できたようなので,レポートする.
linux で,リンク先のファイルが存在しないシンボリックリンクを一覧するスクリプト.
ふと気になって,C++のプリプロセッサ・ディレクティブ (Preprocessing directives) を調べてみた.ソースは ISO/IEC 14882:1998 (E).gcc/g++ で何気なく使っていた #warning は標準じゃないことを知った.
Gnuplot (4.2.4) は,ライセンスの関係がどうとかで readline がデフォルトでは使えない.このためコマンドプロンプト上でファイルを Tab キーとかで補完できないので不便だ.そこで自分でコンパイルする.
iomanip の setw(5) みたいなノリで,出力する文字に色をつける方法を考える. cout<
似たような話題は検索すればいくらでも見つかる.が,イマイチなのが多い(ような気がする).ここでは日本語とかも出力できる方法を解説する.かなり力技なので環境依存性が強いかも.
Adobe Flash Player 9 の Firefox 用を adobe のサイトから取って来てインストールしたのに, firefox/iceweasel で Flash Player のバージョンが古いままな現象の解決方法について (環境: debian/linux).
C++ と liboctave でPCAをするプログラム.データの共分散行列を求めて,これを特異値分解するというやりかた.一般的に,固有値分解のよりも精度がいいらしい (Principal components analysis, Wikipedia, The Free Encyclopedia).
C++ と liboctave でPCAをするプログラム.データの共分散行列を求めて,その行列を固有値分解するという,テキストに載っているやりかた.
PCA (主成分分析) にかけるデータの生成プログラム. sample.dat に出力データを保存してあるので,これを使えばPCAのプログラムが実行できます(よって以下は興味がある人だけ).
C++には関数のオーバーロードがあるから,Cの cosf みたいに型ごとに関数を区別して書く必要が無い. cos(x) と書けば, x の型を自動で判別してくれるということだ.が,落し穴が.
octave は Matlab には劣るかもしれないが,かなり多くのことができる.それらのうち, liboctave で実装されているものはもちろん C++ から利用できるのだが,そうでないもの,例えばスクリプトやDLDなどによって提供されているものについても, C++ から利…
LU分解 (LU decomposition) の用途: 連立方程式を解くなど.正方行列でなくともよい.
コレスキー分解 (Cholesky decomposition) の用途: サンプルデータの前処理, Ax = b の数値解,モンテカルロ法,カルマンフィルタなど(一部 Cholesky decomposition - Wikipedia, the free encyclopedia より). 正定値エルミート行列 (実数値行列なら…
特異値分解 (Singular value decomposition, SVD) の用途: 主成分分析,疑似逆行列の計算,機械学習,パタン認識,数値解析など.任意の形の行列を分解できる.
固有値分解 (Eigendecomposition) の用途: 主成分分析など多数. 正方行列 に対してのみ適用可能(非正方の場合は特異値分解).
行列式 (determinant) の計算は,例えば多次元のガウス関数を扱うときなどに必要だ.