Mathematica

ffmpeg + Mathematicaで動画ファイルを作成する

ffmpeg + Mathematicaで動画ファイルを作成する

MathematicaのExportでAVIなどの動画ファイルを作成することは簡単に可能だが、 いかんせんすべてのフレームの画像を作成してからファイルに書きだすので、フレーム数に比例してメモリの使用量が多くなってしまう。 そのため長いムービーの作成は困難であった。 そこで、ffmpegと併用することでメモリ使用量を抑えつつ、長編の動画ファイルを制作する。 具体的には、 ffmpegで標準入力から読み込ませる
MathematicaからSQLiteでBLOBとマルチバイト文字列を扱う

MathematicaからSQLiteでBLOBとマルチバイト文字列を扱う

ドキュメントにはないものの、MathematicaではSQLiteを扱うことができる。 しかしながら、BLOB型や文字列で日本語などを扱うには少し工夫が必要なので、メモ。 BLOB型 select 直接BLOB型をselectすると$Failedが返ってくるので、hex関数で16進文字列として返す。 db=Database`OpenDatabase[sqlitefilepath];rs=Database`QueryDatabase[db,"select hex(column_name) from table_name"];これを16進文字列→数値→バイト列→文字列と変換して、最後にImportStr
Mathematica on Ubuntu 12.04 LTSで日本語関連のトラブル

Mathematica on Ubuntu 12.04 LTSで日本語関連のトラブル

Mathematica 8 Home Edition 日本語版をUbuntu 12.04 LTS 64bit版にインストールしたところ、 ディレクトリ、ファイル名に日本語が含まれるノートブックファイル(.nb)を開けない ディレクトリ、ファイル名に日本語が含まれるとImport/Exportできない、FileNamesで列挙できない ノートブック中に日本語を入力できない $SystemCharacterEncoding、$CharacterEncodingが"
Mathematicaにおけるプログラムの高速化手法

Mathematicaにおけるプログラムの高速化手法

Mathematicaにおいてプログラムの実行速度を最適化する際の項目を思いつく限り挙げてみた。 関数型パラダイムで書く 必然的に組み込み関数を多く使い、リストをまとめて操作することになるので手続き型で書くより速くなることが多い。 コード量も少なくなって読みやすくなるので、よほどのことでない限りMathematicaでは関数型で書く。 具体的には、手続き型ループ構文(Do, For, Whileなど)をやめて、Ma
Mathematica 7でImportおよびExportを拡張する

Mathematica 7でImportおよびExportを拡張する

MathematicaではImportやExportを使って様々な形式のファイルを読み書きできるが、 標準で対応していないファイル形式についても自分でローダやライタを作り、 それをImportやExportに対応させる方法がExtending Import & Export (Wolfram Library Archive)において解説されている。 しかしこの文書は2003年のもので以前はExperimental`RegisterConverterという関数で
多角形の内外判定

多角形の内外判定

ある点が多角形の内側にあるのか外側にあるのかを判定するには主に ある点から直線をひいて多角形の辺と何回交差するか判定する(偶数回なら外、奇数回なら中) ある点から多角形の各頂点を順番に見ていったときに何回転するか の2つの方法がある。 しかし辺との交差回数をカウントするのは、直線と辺が平行だったり、頂点で交差したりする場合などに特別な配慮が必要なので、 ここでは2番目の方法で実装する。 点から多角形上の点を順
16ビットアプリケーションの標準入出力をリダイレクト

16ビットアプリケーションの標準入出力をリダイレクト

FORTRANで書かれた古いMS-DOSプログラムを.NET/Linkを使ってMathematicaから操るパッケージを作っていたところ、 Process.StartInfo.RedirectStandardInputやRedirectStandardOutputにTrueを設定してもまったく標準入出力をリダイレクトできなかった。(※OSはVista 32bit) いろいろ試してみたところ、16ビットのプログラム
GPXファイルを読み込む

GPXファイルを読み込む

MathematicaでGPXファイルを読み込んで解釈する方法のメモ。 対象となるGPXファイルを xml=Import[filepath,"XML"];でまずXMLとして読み込んでおいて、 trk=Cases[xml,XMLElement["trk",_,_],Infinity];でtrk要素を抜き出し、 trkpt=(ToExpression[{"lat"
友愛数を列挙する

友愛数を列挙する

Mathematicaで友愛数を列挙するプログラム例として以下のようなものが見受けられる。 yakuwa[n_]:=DivisorSigma[1,n]-n;Do[If[(yakuwa[yakuwa[k]]==k)&&(yakuwa[k]!=k),Print[{k,yakuwa[k]}]],{k,1,1000}];しかし、Doでループを回してPrintで書き出していくのはMathema
折れ線を間引く

折れ線を間引く

読み込んだGPSログのデータを間引きたい、と思って調べたところ、 (Ramer-)Douglas-Peuckerのアルゴリズムというものがあることが分かった。 基本的な考え方は、 折れ線の始点と終点を結ぶ線分と各点の距離を求める。 すべての点との距離が許容誤差ε以内に入っていれば始点と終点だけを返して終了。 そうでなければ距離が最大の点Pを1つ選択。 始点から点Pまでの折れ線と、点Pから終点までの折れ線のそれ