2009年04月14日

MeadowでYaTeXを使うための設定

;;YaTeX
(setq auto-mode-alist (cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist))
(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)
;dvipdfmxをプリントコマンドに
(setq dviprint-command-format "dvipdfmx %s")

Meadowのインストール時にパッケージとしてYaTeXを選択していればこれを.emacsに書き足すだけでいいはず.

もちろん,LaTeX環境は別途準備してある前提で.

拡張子.texのファイルを読み込むとYaTeXが起動し,モードラインに「やてふ」と表示される.

ついでに[C-t l]をdvipdfmxに割り当てた..dvi作成後に実行で.pdf作成.

posted by Rion778 at 17:32 | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2009年04月12日

anthyやindian-1-columnがないってMeadowが怒る

なんか前回の設定で動くっちゃ動くんだけど起動時に

Searching for program:no such file or directory, anthy-agent

とか出てauto-autoloads.elなどの読み込みが止まる.止まってもなんか普通にESSとか動くんだけどIMEのON/OFFを切り替えるたびにミニバッファに上の警告が出てエラー音を発する(IMEのON/OFFはちゃんと切り替わる).

害は今のとこないんだけどなんとかしたかったのでなんとかした.

anthyを切る

IME使うようにしてるのでそもそもいらない.

Meadowのauto-autoloads.elをいくつか止めて快適に - わだいのたけひこのにっき

\Meadow\packages\pkginfo\anthyにあるauto-autoloads.elをリネームして読み込まないようにした.

これでanthy-agantないよ!って怒られなくなった.[-Aあ-\--]とかも出るようになった.起動時に読み込むもの増えた.

でも今度は

error: Invalid value for :char-spec :indian-1-column

とか起動時に言われる.ぐぬぬ…

indian-1-columnをコメントアウト

Meadow起動時のエラー - 教えて!goo

ググってるときに教えて!gooの「一般人」の適当な回答が引っ掛かったときの怒りを表現する言葉が欲しい.

とにかく,indian-1-columnというcharsetがもうないので,読み込まないようにしろと,そういうことらしい.

それでどこに書いてあるんだ,font-setup.elとか検索してもないぞ.と思ったらauto-autload.elの中だった.

Windows Meadow 2.10 多言語環境の設定 - NOX INSOMNIAE

\Meadow\packages\pkginfo\intlfontsの中のauto-autoloads.elを開くと,中に

(indian-1-column ("ind1c16-mule.bdf"));; MuleIndian-1

という記述があるのでコメントアウト.てか消していい気がする.僕はチキンなので消さない.

起動が重くなった

真面目にいろいろ読み込むせいか起動が遅いぞ.いろいろ読み込まないようにしたらいいのだろうか.これから調べる.

*パッケージ減らしたらいくらか早くなった

posted by Rion778 at 15:53 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2009年04月08日

Meadow+ESSでR(Emacsとか分からないWindowsユーザー向け)[導入編]

2010/09/20追記 以下の記事の記述はやや古くややいい加減です。Emacs + ESSでR(for Windows users) - もうカツ丼でいいよなにちょっと内容を見なおしたものを上げてありますので、よろしければそちらを御覧ください。

Emacsのキーバインドを覚える手間を差し引いてもESSを導入する価値はあると思ったのでちょいとメモ.「Rはちょっとくらい使えるけど,Emacsとかよく分からない」というWindowsユーザー向け(というかそもそもMacやLinux使う人はEmacs使えるだろうしESSも自力でインストールできると思うので,RjpwikiのESSの項目なんかを参考にするといいと思います).

ESSとは?

ESS (Emacs Speaks Statistics) は Emacs や XEmacs から R などの統計解析アプリケーションを便利に使ってしまおう,という Lisp プログラムです.

ESSがどれだけれ能率向上をもたらしてくれるものか,などは「The R Book」p.55--56に叙述されています.(Rjpwiki ESS)

要はEmacsという非常に高機能なテキストエディタがあって,その上でRを使うとき便利なようにいろいろカスタムするプログラムがESSということ.

何を覚える必要があるのか?

  1. R
  2. Emacs
  3. ESS

3つだけ.簡単です.まずは準備を.(ただ最初に書きましたがRの使い方だけはどこかよそで予習しておきましょう.R自体はESSなくてもRguiで動くので.僕に聞くのはいろいろ間違いです><)

R,Meadow,ESSのインストールと設定

.exeクリックで一発!とはいかないのでちょっとがんばる.

Rのインストール

最新版はここにあるはずなので,「Download R 2.8.1 for Windows」などというリンクから.exeを落としてきて実行すればインストールが開始される.

途中の選択肢はESSを使う上ではどう選んでも関係ないはずだけれど,インストールしたフォルダは忘れないように.

Meadowのインストール

Windows用のEmacs実装としてMeadowというものがある.今回はこれにESSを入れて使う.Meadowのページから「ダウンロード」というリンクを辿ると「Netinstall packages」というものが見つかるので,「setup-ja.exe」を落とす.

実行する前に,Cドライブ直下に「Meadow」などの名前でフォルダを作っておき,そこへsetup-ja.exeを移動.

setup-ja.exeを実行してインストール.

  • ローカルパッケージディレクトリはC:\Meadow(作成したフォルダ.実行したフォルダへのパスが自動で入るはず)
  • インストール先ディレクトリもC:\Meadow(同じく変更の必要はない)
  • パッケージはデフォルトでいい気がする

最後にsetup.exeを実行する必要がある.実行すると「どこにある「.emacs」を読むようにする?」などと聞いてくる.画面には[C:\Meadow]などと出ているはず.何も入力せずにEnterを叩けばそこにある.emacsを読むようになる.書き換えてもいい.ただし場所は覚えておく

これでインストールは終了.デスクトップにショートカットが出現し,それをダブルクリックでMeadowが起動するようになっているはず.

.emacsの作成

Meadowは起動時に.emacsというファイルに書き込まれた設定を読み込む.なのでこれを作らないといけないのだが,「新規作成→テキスト→名前を.emacsに」しても「ファイル名を入力して下さい!」と怒られる.

なのでMeadowから作成する.Emacsの操作が分からない人はまじないの如く以下の作業を行う.

  1. Meadowを起動
  2. Ctlr+X,Ctlr+Fと連続してタイプ
  3. 一番下に「Find file: ~/bin/」と出る
  4. 続けて,「Find file: ~/bin/.emacs」と入力してEnter
  5. 次に,Ctlr+X,Ctlr+Wと連続してタイプ
  6. C:\Meadow\binの中に.emacsというファイルができているはず

完成した.emacsをインストール時に設定した「.emacsを読む場所」に合わせて移動すれば終わり.もちろんわかる人は最初からそこへ作成すればいい.

作ってしまえばこっちのもので,あとはメモ帳で開けば編集できるし,保存もできる.Windowsは難しい.ともかく,Meadowの扱いがわからないうちはメモ帳で編集できるので安心.

ESSのインストール

ESSはたぶんここに最新版があると思う.DownloadからLatest Released Versionって所のzipを落としてきて解凍する.

解凍してできたフォルダをフォルダごと\Meadow\site-lispの中へ放り込む.

.emacsの編集

ESSを使えるようにするため,早速.emacsを編集する必要がある.なんかよくわからなかったらとりあえず次のように書いて保存.

(require 'ess-site)
(setq ess-ask-for-ess-directory nil)
(setq ess-pre-run-hook
	'((lambda ()
	(setq default-process-coding-system '(sjis . sjis))
	)))

(set-language-environment "Japanese")
(setq default-input-method "MW32-IME")
(mw32-ime-initialize)

(defun ess:format-window-1 ()
	(split-window-horizontally)
	(other-window 1)
	(split-window)
	(other-window 1))
(add-hook 'ess-pre-run-hook 'ess:format-window-1)

(setq default-frame-alist
      (append (list '(foreground-color . "azure3")
	'(background-color . "black")
	'(border-color . "black")
	'(mouse-color . "white")
	'(cursor-color . "white")
	)
	default-frame-alist))

ここのをベースにちょこちょこいじってついでにIMEが動くようにしてあります.)

環境変数の設定

ここまで終わってもまだ動かない.環境変数というものを設定する必要がある.わかっている人はPathへRとMeadowの実行ファイルがあるフォルダ(bin)を,HomeへMeadow\binを追加.以下分からない人へ.

環境変数の設定は,

  • XPの場合:コントロールパネル(クラシック表示)→システム→詳細設定タブ など
  • Vistaの場合:コントロールパネル(クラシック表示)→システム→左側にある「システムの詳細設定」 など

で見つけられるはず.「ユーザー環境変数」と「システム環境変数」があるけど,ユーザー個人に設定を適用するか,コンピュータ全体に適用するか程度の違いなので以下好きな方へ設定.

  1. 変数からPATH(or Path)を選択.なければ「新規」で変数名にPATHと入れる.
  2. 変数値にC:\Meadow\bin (RunMW32.exeのあるフォルダ)を追加.新規に作成した場合はそのまま記入.すでに何か書いてある場合,末尾に「;」を記入したのちに続けて記入する.

同様にしてPATHへRの実行ファイルがあるディレクトリ(C:\Program Files\R\R-2.8.1\bin など)を追加し,HOMEへC:\Meadow\bin(.emacsのあるフォルダ)を追加.

確認

拡張子が.RなファイルをMeadowで開くとESSモードで起動.ツールバーに「R」とかのボタンが見えるはず.

M-x R (Alt+x rもしくはEsc x rと順番にキーを叩く)すると,画面が分割されて右下でRが起動.

.Rなファイルが表示されている場所(バッファ)にカーソルがある状態でC-c C-b (Ctrl+c Ctrl+bの順に叩く)すると中身がすべて実行される.結果はRのバッファなどに.

うまくいかなかったら…

どうしよう?よくわかりません><

手順確認→Google先生に聞く しても分からなかったら聞いてください.でもきっとわかりません.

使い方を覚える

RjpwikiにESSを取り扱ったページがあって, ショートカットなんかは一覧がある(ESSモード)ので参考に練習しましょう.

で終わらせたいところだけど,Windowsユーザーにとっての鬼門はMeadow(Emacs)の独特の操作や単語, ショートカットの表記法を覚えるところだと思う.一覧表とか見せられても量がすごいので「覚えられない!無理!」ということになる.

Emacsの操作方法を覚える

Meadow(Emacs)にはチュートリアルが入っている。

ツールバーの[Help]から[Emacs Tutorial]を選ぶとチュートリアルが始まる(ただのテキストだけど)ので, これをやる.

案外長くて丁寧にやると30分くらいかかるけど,覚えるべきことはカーソル操作,消去と挿入,ファイル操作程度なので, 実際それほど大変じゃない.

1回だけじゃ忘れるかもしれないけど,3回もやったら基本的な操作はほとんど覚えられるはず.

「こんな変な操作覚えて大丈夫か?」などという心配があるかもしれないが,大抵のものはMeadowで事足りる, というかMeadowの方が便利なことが多いし,他のエディタがEmacsのキーバインドをサポートしていることも多い(Visual C++とか).なので心配せず慣れてしまっていいと思う.

ESSの扱いを覚える

操作自体はさっきも書いたRjpwikiのESSのページを参考に覚えたらいい. ショートカットの部分を拡大印刷して手元において置くとかして.

それよりも操作に慣れることが重要.ちょっと慣れると急激にありがたさが分かってくる.

これは実際にいくつかプログラムを書いてみるのが一番いい.

RでProject Eulerなんかいかがですか?

posted by Rion778 at 16:46 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2009年03月23日

Rで描いたグラフ中の数式をLaTeXで書き換える[R]

Rで図中に数式を書きたい場合はexpression()やpaste()なんかを使って頑張るんだけど、 これが結構複雑で面倒な上に出力が汚い。そこで、Rで数式を書くのはあきらめて、数式の部分だけ後でLaTeXの力を借りて書き直す、 という方法を採るときれいなグラフが得られる。

今回、手順としては「PS形式でグラフを作る」→「PSfragでテキストを数式に置換」→「LaTeXで処理」という形をとる。

まー結局はPSfragの使い方なのでRに限った話じゃなくてps/epsファイル全般の話になりますが。

それではお手元にRとLaTeXの環境を用意してご覧下さい。

1.PSfragを準備

まず、PSfragを入手しないといけないのだけど、何か僕の環境にはすでに入っていたのでTeXインストーラーなどを使ってLaTeX一式をまとめてインストールした場合に一緒にインストールされるものに含まれているのだと思う (便利ですねインストーラー!)。もしなかったらCTANなどを探して拾ってきてパスの通った場所に置く。 (この辺正直詳しいことがわからないので聞かないで下さい><)

2.グラフの準備

グラフを準備する。先月作ったデルタ関数のグラフを使いまわそう。

アレは次のようにして描いた。

#余白設定
par(mar=c(3,3,3,1), mgp=c(2,1,0))
#関数定義
Delta <- function(a, x){
 a <- complex(imaginary=1/a)
 Im((pi*(x-a))^-1)
 }
#プロット
curve(Delta(7.5,x), -2, 2, ylim=c(0,10),
main=expression(lim(paste(Im, over(1, pi(x-ia))), a %->% 0)),
xlab="x",
ylab=expression(paste(delta, (x))),
col=1)
par(new=T)
curve(Delta(15,x),  -2, 2, ylim=c(0,10),main="",xlab="",ylab="",col=2)
par(new=T)
curve(Delta(30,x),  -2, 2, ylim=c(0,10),main="",xlab="",ylab="",col=3)
#凡例
legend(
0.5, 10,
box.lty=0,
legend=c(
expression(paste(a=7.5^-1)),
expression(paste(a=15^-1)),
expression(paste(a=30^-1))
),
col=1:3,
lty=c(1,1,1)
)

こんなのが描ける。

delta1

…やっぱ数式が汚い。

で、せっかく頑張って作ったこのグラフは使えない。PSfragはPSファイル中のテキストを認識して置換するので、 次のようにしてタイトルや軸ラベルをテキストにしたグラフを作らないといけない。

#プロット
curve(Delta(7.5,x), -2, 2, ylim=c(0,10),
main="main.title",
xlab="xlab",
ylab="ylab",
col=1)
par(new=T)
curve(Delta(15,x),  -2, 2, ylim=c(0,10),main="",xlab="",ylab="",col=2)
par(new=T)
curve(Delta(30,x),  -2, 2, ylim=c(0,10),main="",xlab="",ylab="",col=3)
#凡例
legend(
0.5, 10,
box.lty=0,
legend=c(
"l1",
"l2",
"l3"
),
col=1:3,
lty=c(1,1,1)
)

次のようなグラフが得られる。

delta2

ただこれはpng。PSfragが処理できるのはps/epsファイル。 なのでたとえばデバイスをpostscriptにするとか、Windowsのデフォルトのグラフィックデバイスから 「ファイル」→ 「別名で保存」→「postscript」するなどしてepsとして保存しておく。

他に注意として、置換は文字の先頭位置を基準に行われる。なのでたとえばタイトル部分を省略して「t」一文字などにしておくと、 そこを基点に数式が挿入されるのでちょっと右よりになってしまう。

3.LaTeXで処理

パッケージとして呼び出すのはpsfragのほかにgraphicxも必要。psファイルを描く必要があるので。

psfragの使い方は

\psfrag{置換前テキスト}{置換後テキスト}

とこれだけ(オプションも指定できるけど省略)。このコマンドでテキストを置換した後、 psファイルを呼び出してやると置換後の状態で描画される。 置換後のテキスト部分には$$などを用いてLaTeXでいつもやるように数式が書ける。

なので、今の例で行くと次のようなファイルを作る。ここではtexファイルと同じディレクトリに「delta.eps」 という名前で先ほどのpsファイルが保存してある。

\documentclass{jsarticle}
\usepackage[dvips]{graphicx,psfrag}  %パッケージ:graphicx,psfrag
\begin{document}
 \psfrag{main.title}{
$\displaystyle \lim_{a\rightarrow0} \Im \frac{1}{\pi(x-ia)}$
}                                  %テキストの置換
 \psfrag{xlab}{$x$軸}
 \psfrag{ylab}{$\delta (x)$}
 \psfrag{l1}{$7.5^{-1}$}
 \psfrag{l2}{$15^{-1}$}
 \psfrag{l3}{$30^{-1}$}
 \includegraphics[scale=1]{delta}    %epsファイルの呼び出し
\end{document}

で、これをTeXで処理する。dviファイルの段階ではまだ置換は行われず、psファイルまで変換して初めて置換が行われるのに注意。

で、psファイルまで変換が終わると次の出力が得られるはず。

delta

今15分くらいでパパっと作ったので若干フォントのサイズや種類のバランスが悪いけど、とりあえず置換はできた。簡単!

Rの出力に比べてずいぶんきれいだし、あと数式部分のソースも読みやすく書きやすいと思う。 LaTeXだとドイツ文字のIとか使えていかにもそれっぽいね!

posted by Rion778 at 01:35 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2009年01月22日

数式画像の作り方[LaTeX]

Windowsさんむけ。pngとemf。

LaTeXの環境は一通りそろってて、dviが作れて、dvipngが入ってて、dvioutも入ってるとする。

・準備

雛形として、次のような.texファイルを作っておく。

\documentclass[12pt]{jarticle}
\usepackage{amsmath,amssymb,bm}
\begin{document}
\setcounter{equation}{3}
\thispagestyle{empty}
\Large{
\begin{align}
 x = y \notag
\end{align}
}
\end{document}

数式はalignの中に書く。もちろん、equation環境でもおk。利点はないと思うけど。

数式番号がほしければnotagをはずし、setcounterを目的の数式番号のひとつ前にセット。

そうしてdviファイルを作っておく。以下、math.dviというファイルが完成したとして解説。

1. png形式

ブログとかに貼り付けたいとき。

ここ (物理のかぎしっぽ)を参考にコマンドプロンプトで次のように入力

dvipng math.dvi -T tight --freetype0 -Q 5 --gamma 1.1

これでmath.pngが完成。

もしも背景色、文字色などのオプションをつけたいとき、くくるのがシングルクオーテーション「’」ではなくダブルクオーテーション 「"」でなければならないということに注意。

楽にやりたい場合、テキストファイルに上記コマンドを記述しておき、「hoge.bat」 などとしてmath.dviと同じフォルダに保存しておく。hoge.batをダブルクリックするだけで画像が吐き出される。

2. emf形式

こちらが詳しいです。 以下は私の確認用ですので、いろいろ知りたい人は向こうを参照するといいと思います。)

PowerpointとかWordとか、Office周りのモノに使いたいとき。論文に数式使いたいのに学会の指定がWord……! なんてことありますねたまに。そんなときに。

dvioutでmath.dviを開く。

Option → Setup parameters → Resolution

resolution dpi: を600とかその辺まで上げる。

Save(いらない?) → OK

Display → Region → ON

Shift+左クリックで左上頂点決定、Shift+右クリックで右下頂点決定

File → Save as Image → EMF in clipboard

WordとかPowerpointの貼り付けたい場所で「貼り付け」。

----

論文ならまだいいのかもしれないけど、 学会の要旨なんかは1枚に指定の体裁でおさめる必要があるからLaTeXだとちょっと難しいなぁ。

posted by Rion778 at 23:50 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2009年01月18日

Resucue and Recoveryのバックアップコピーと削除

ようやくバックアップのコピーが終わった。

なんかソフトのエラーというより熱暴走で止まってただけのような気がする。昨日はもう終わりそうになかったので、 ワインのコルクを縦半分に切ったものを下に置いて廃熱を良くして寝たんだけど朝には無事コピー終了してた。

ただ、コピーしても自動で削除してくれるわけではないので手動でローカルのバックアップを削除しないといけない。

削除のコマンドはResucue and Recoveryのメニューから探せばすぐ見つかるけど、日付しか選択できない。 どうもローカルとネットワークと双方のバックアップが同時に削除されるっぽい感じがする。それでは困るので手順を踏んだ。

  1. 保存先を一旦ローカルに変更
    • 変更時に「他のコピー消す?」って聞かれるけどもちろん断る。
  2. バックアップを削除する
    • 部分的に削除するとやたら時間かかる上、どうも一部が別の日付のバックアップに移行されるらしくあまり容量が空かない。 なんか複雑なバックアップしてるんだろうか。
    • なのでローカルのバックアップは一度に全部消した。
  3. 保存先をネットワークに戻す

これでようやくバックアップが外部媒体へ完全に移った。Cドライブの空き容量は40GBくらい増加。

あとはNASのバックアップを取れば完璧だろうと思う。バックアップのバックアップが必要かどうかはともかくとして、 普通にストレージとしても使いたいのでHDのバックアップはしたい。LS-C500LにはUSBポートが付いていて、 そこにUSB接続のHDDをつないでおけば中身をバックアップしてくれるらしいのでまた金銭的に余裕があるときにやる。

posted by Rion778 at 14:00 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2009年01月17日

PCのバックアップ×2

昨年家のPCのHDがお亡くなりになられて、そのうえバックアップをろくに取ってなかったものだから大変苦労をした。 それでいいかげんにバックアップ用の記憶媒体を買わないといけないとずっと思ってて、先週くらいに BUFFALOのLS-C500L というやつを買った。

LAN接続の外付けHDD。いわゆるNAS(Network attached storage)というモノ。

家用とモバイル機と2台のバックアップを一台で簡単に済ませたかったので、NASは初めてだけど手をだしてみた。

設置&一台目の接続は特に問題なし。CD入れて2〜3回クリックしただけ。問題なさすぎて逆に不安になる。 セキュリティとかどうなってんのかよく分からない。

セットアップ終了後、付属のバックアップソフトで自宅機のバックアップをやってみることにした。

これは別にHDのイメージを丸ごとバックアップするとかそういうのではないらしい。フォルダを選択してバックアップの周期を決める。 完全バックアップか増分バックアップか選べるけど、家のPCには特に重要なデータもないので増分にした。要するに同期とってるだけ? ルーター介しているからなんだろうけどボチボチな時間がかかった。

それで次にモバイル機のThinkPad X61のバックアップ。

まずはNASの認識から。WebからBULLALOのNAS Navigatorをダウンロードしてきてネットワークドライブに割り当てるだけだった。ただファイヤーウォール切らないと認識しないし、 認識後にONにするとしばらくして認識しなくなる。特にウイルスバスターのファイヤーウォールと相性悪いみたい。 Windowsのファイヤーウォールならなんとかいけそうに見える。何が原因なんだろう。バスターだから?2台目だから?Vistaだから? (2009/01/18 19:32 ウイルスバスターのメイン画面からパーソナルファイヤーウォールを選択、プロファイルを 「家庭内ネットワーク」などに変更することで解決)

ThinkPadにはRescue and Recoveryっていうバックアップソフトが入っていて、 これは多分HDのイメージを圧縮とかした上でバックアップしてくれる。いざって時には便利だろう。 ただバックアップ先はデフォルトだとローカルなので、物理的に壊れたらおしまいな上に結構な容量を圧迫する。

でも保存先にはちゃんとネットワークも選択できて、多少手間取ったけどちゃんと認識してくれた。

それでバックアップ開始。

残り時間 … 3012分

んな

いや、こういうのは最初にすごく長い時間が出るけど実際は短い時間で終わるはずだ。

と思ったのが昨日の夕方。

終わったのは今日の昼過ぎ。

まあ3000分(≒2日)よりは大分短かったけど。

なんか上にも書いたとおり圧縮みたいな作業をするのでそれにずいぶん時間がかかっていたらしい。 あと無線LANで飛ばしてるので転送にもそれなりに時間がかかる。

それで、ローカルに溜まっているバックアップも移動させてしまいたいので、バックアップのコピーとやらを実行。

残り時間 … 1056分

えー

いや、こういう(ry

それで昼から開始して現在に至ると。

なぜかは分からないけど作業の途中で停止してコピー不能になる。それで完全にダメだというのならあきらめも付くけど、 再起動して再度コピーを試みるとどうも途中からコピーが再開されるらしい。残り時間が前回より少ないところからカウントされる。

残り時間 … 374分

posted by Rion778 at 23:11 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年12月31日

GW-US54GXSをアクセスポイントとして使うための設定

5月くらいに買って徹夜で設定を頑張った挙句使えなかった無線LANアダプタのGW-US54GXS が今更になって使えるようになった.アクセスポイントとして.もうなんかイロイロやったので何をどうやったかあまり覚えてないけど一応メモ.

環境

  • ホスト側PC:Windows XP(SP3)
  • クライアント側PC:Windows Vista
  • プロバイダ:Sannet(PPPOE接続)

手順

  1. ユーティリティ・ドライバを公式サイトからダウンロードしてきてインストール
  2. セキュリティなどの設定はマニュアルどおりに済ませておく
  3. XP側(ホスト)の設定.
    • ネットワーク接続→広域帯→「使ってる接続」→プロパティ→詳細設定→インターネット接続の共有→「ネットワークのほかの〜」をチェック→OK
  4. Vista側(クライアント)の設定.
    1. アクセスポイントの検索→2.で設定したネットワークへ接続
    2. コントロールパネル→ネットワークと共有センター→接続の表示
    3. ワイヤレスネットワーク接続のプロパティ→インターネットプロトコルバージョン4(TCP/IPv4)のプロパティ
      • IP: 192.168.0.10
      • サブネットマスク: 255.255.255.0
      • デフォルトゲートウェイ: 192.168.0.1
      • 優先DNSサーバー:  192.168.0.1

…しかし何で動いてんだ?セキュリティとか問題ないのか?

ともかくこれでようやくiPod touchを買う準備が整った!PSPでもDSでもないぞ.iPod touchのために買ったんだから.7ヶ月も放置してたけど.

問題は金が無いってことね.

posted by Rion778 at 16:07 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年12月09日

定数変化法による微分方程式の解き方

今から思うとバカみたいなところでつまづいて2日ほど無駄にした。ていうかバカ。きっと独学なのがいけない。数学を独学とか無理なレベルの頭なのではないか。誰か一緒に勉強して欲しい。

とりあえず戒めのためにバカ丁寧に定数変化法をメモる。

まず、定数変化法というのは何かと言うと、次のような形の微分方程式を解く(つまりx=...の形に変形する)ための方法だ。

もちろん左辺の微分されているxも取り出す必要があるので、積分やら何やら面倒な操作が必要になる。

まず何をするか。

g(t)=0と置いて解いてしまうという暴挙に出る。

ちょっと順番に説明を。

  • (1) g(t)=0とおいた
  • (2) xに関する項を左辺に、tに関する項を右辺に集めた(変数分離という)
  • (3) 両辺を積分
  • (4) 左辺: 普通に。 右辺: f(t)は不明なのでそのまま&積分定数(左辺のもまとめてある)
  • (5) 対数をとっぱらう(両辺をeの指数部にすることでlnが取れる)
  • (6) 指数部の和は積の形に書きなおせる
  • (7) e^cというのは定数^定数なのでやっぱり定数。改めてこれをCと書く。

ここで式(2)のときに変数分離という作業を行った。ゆえにこの微分方程式の解法は変数分離法と呼ばれる。要するに(1)の形の式ならこう解けばよいのです。が、今解きたいのはこれではない。

次に何をするか。式(7)の積分定数Cが、実は定数ではなくtの関数だったとみなすという暴挙にでる。そしてその仮定の下に式(7)を最初のコレ

に代入する。ここで左辺第二項のxへはそのまま代入できる。しかし、第一項はtによって微分されているため、まずdx/dtを計算する。

  • (8) xをちゃんと書いた
  • (9) 積の微分法( (fg)' = f'g + fg' )を適用

(9)の右辺が面倒。ここで微分されているのは合成関数で、例えばzという変数を導入して説明すると、e^zという関数とz=-∫f(t)dtという関数がくっついているということになる。とりあえずここだけ計算する。

合成関数の微分は「[全体の微分]=[外側の微分]×[内側の微分]」という形で実行できる。ここで「外側」は指数関数e^zなので微分してもそのまま。「内側」は積分された形なので積分記号を外すだけでいい。つまり、e^z×-f(t)。そして先ほどの式に戻れば、

そしてこの式(11)(=dx/dt)と先ほど得られた式(7)(=x)をコレ

に代入し、Cについて解く。

  • (12) 代入した(一部相殺される)。
  • (13)(14) 変数分離
  • (15) 積分。ここで左辺のCは途中で仮定したとおりtの関数だが、右辺に追加したC’は今の積分実行で生じた定数であることに注意。

そして得られた式(15)を式(7)に代入すれば完成。

しかしこの完成した複雑な「公式」を使って計算するのは見るからに大変っぽい。重要なのは結果よりも手順だ。

  1. 右辺を0として解を求める(つまり特殊解を決定する)
  2. 解に含まれる積分定数Cを「関数」とみなす
  3. 求められた解を元の式に代入してCについて解く
  4. これを利用し、一般解を決定する

覚えるのはこっち。

ただ微積分の基礎に馴染んで無いとつまづいてしまうのかも知れない。

ちなみにつまづいてたのは式(7)を代入するあたり。積の微分やら合成関数の微分やらを思い出したり気づいたりするのに大変時間がかかった。応用力と記憶力に難が…

ところで「特殊解の積分定数を関数とみなして一般解を求める」なんて無茶をしているようにしか見えないんだけど、どうしてちゃんと答えが出せると言えるんだろう。

posted by Rion778 at 19:56 | Comment(1) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年11月21日

時系列データのプロット[R] (「おんどとり」を例にした解説)

Rには日付・時間データをオブジェクトとして扱うための"POSIXlt"、"POSIXct"というクラスがある。例えば、Sys.time()関数を使うと現在の時間が"POSIXct"オブジェクトとして返ってくる。

> Sys.time()
[1] "2008-11-21 18:39:48 JST"

日時の情報は例えばデータロガーによって温度、湿度、二酸化炭素濃度などの環境要素の経時変化を観察するような場合に重要である。そこで、データロガーの出力する日時の情報をPOSIXctオブジェクトにでも変換して扱えればいいのだが、そのためには多少の作業が必要となる。

「おんどとり」というデータロガーがある。比較的安価で(といっても1台3万程度だが)温度・湿度情報を採取できるために研究・一般を問わず広く使われているデータロガーだ。「おんどとり」にはいくつか種類があるが、その中のある機種が吐き出すデータ(を付属ソフトで「カンマ区切りテキスト」に変換したもの)は次のような形式になっている。

"< Measurement Data Text Output >"
""
"Date/Time","@date()","ch.1","ch.2","ch.3","ch.4","ch.5","ch.6","ch.7","ch.8"
"","","゚C","゚C","","","","","",""
"2008/10/30 16:00'00","39751.6666666667","  20.8000","  20.4000","","","","","","",
"2008/10/30 16:20'00","39751.6805555556","  20.7000","  20.0000","","","","","","",
"2008/10/30 16:40'00","39751.6944444444","  20.4000","  19.4000","","","","","","",
"2008/10/30 17:00'00","39751.7083333333","  20.2000","  19.0000","","","","","","",
"2008/10/30 17:20'00","39751.7222222222","  19.9000","  18.6000","","","","","","",
"2008/10/30 17:40'00","39751.7361111111","  19.6000","  18.3000","","","","","","",
.
.
.

見づらいが、Excelで開くと見やすくなる。つまりExcel用である。

Rには直接関係無いが説明のためにちょっと詳しく見よう。

まず行を見ると、最初に余分な2行がついていて、3行目にデータのラベルが記述されている。そして4行目に採取したデータの単位が記述されており、その後に続くのがデータだ。

次に列を見る。左端の1列目は日時情報を可読性重視で出力している。そして2列目にある大きな数字だが、これはシリアル値と呼ばれるWindows特有の日時表現形式で、1900年1月1日0時を1としたときの経過日数となっている。ここで面倒なのがUNIX界(POSIX規約も同様)では同様に1970年1月1日を0とし、統計ソフトSASでは1960年1月1日を0とするような値によって日時を表現するということだ。要するにこのシリアル値というのはWindows専用、もっといえばExcel専用というわけ。実際、Excelで表示したときに書式を適当なものへ変更してやればこの値が正確に記録時刻を表す。が、とりあえずRでは使えない。使えないことも無いが、面倒なので使わない。で、3列目移行がデータとなっている。

さて、まずはデータを読み取ろう。データはRの作業ディレクトリに「data.csv」という名前で保存されているものとする。

mydata <- read.table("data.csv", skip=4, sep=",", header=F)
names(mydata) <- c("Date.Time", "d", "ch.1", "ch.2", "ch.3", "ch.4", "ch.5", "ch.6", "ch.7", "ch.8")

ここでは頭4行を飛ばして読んだあとに改めてラベルをつけなおしていることに注意。特に頭2行を読み込むと列数が合わなくてややこしいことになるので必ず飛ばさないといけない。

次に1列目のデータを利用してPOSIXltオブジェクトを作成する(読み込んだ時点では文字データになっている)。

attach(mydata)
x <- strptime(Date.Time, "%Y/%m/%d %H:%M'%S", tz="")

とりあえずattach()してデータを扱いやすく。

次にstrptime()関数が文字列をPOSIXltオブジェクトへ変換してくれる。一つ目の引数に文字列ベクトルを、2つ目の引数に文字列の書式を、3つ目にはタイムゾーン(普通は空で問題ない)を入れている。2つ目の書式設定が重要。「おんどとり」では"2008/10/30 17:40'00"といった具合なのでそれにあわせて"%Y/%m/%d %H:%M'%S"となる。もしこれが"2008年10月30日17時40分00秒"だったら、"%Y年%m月%d日%H時%M分%S秒"とやるわけだ。ちなみに、もし年の表記が2桁なら%yと小文字にする。

そうしたらこれを使ってプロットをしてみよう。今日の目標は時系列データをプロットすることだ。

普通にplot(x, ch.1)とかやってもいいけど、きっとx軸のラベルが気に入らないと思うので、最初プロットするときは空にしておいて後でPOSIXオブジェクト専用の軸を描く関数、axis.POSIXct()関数で追加するのがオススメ。とりあえず軸なしでグラフを書き上げる。

plot(x, ch.1, type="l", ylim=c(5,25),
	 xlab="Date", ylab="Air Temperature (℃)", xaxt="n")
lines(x, ch.2, col=2)
legend(locator(1), c("ch.1", "ch.2"), col=1:2, lty=c(1,1), box.lty=0)

X座標の値と位置の関係が分かりにくいので凡例の位置は上のようにlocator()で対話的に決めたほうが良いような気がする。他のデバイスへ出力したいときはあらかじめlocator()で調べておくしかない?一応今回使ったデータで適当にlocator()を実行した結果はこんな感じ。

> a <- locator()
> a
$x
[1] 1225740207 1226309024 1226763384

$y
[1]  9.146104  8.647322 24.699051

x軸のこの大きな値は何だろう?秒数?

で、次に軸を描く。ここが重要。といってもまあaxis.POSIXct()関数のヘルプをそのまんま和訳したようなもんですが。

r <- as.POSIXct(round(range(x), "days"))
axis.POSIXct(1, at=seq(r[1],r[2], by="1 week"), format="%d日 0時")

最初にrというオブジェクトに入れているのはデータの「端」を丸めたもの。ここで"days"に丸めるとちょうど0時になる。"hours"なら0分、"secs"なら0秒といった具合になる。これはプロットするときに最初の目盛りが入る位置になるので、データの長さや目的に応じて換えるといい。

そしてaxis.POSIXct()だ。状況に応じて変更すべきは真ん中のby="1 week"とformat="%d日 0時"の部分。by=""には目盛りを刻む間隔を入れる。sec, min, day, weekなどの単位をつけて時間の長さで指定する。先に"days"で丸めたからといって"1 day"より長くする必要は無い。format=""には目盛りのラベルをどのような書式で書くかを指定する。strptime()のときに使った%Y, %m, %dなどが使える。ここでは0時と直接書いたが、%Hでもいい。ただし「00時」という表記になる。

では完成品を。

datetimeplot.jpg

なんだかずいぶん長くなってしまったけれど作業量自体はたいしたことが無いので、あるいはExcelより楽かもしれない。それにExcelでは扱えないような量のデータも扱えるはず。それに各種の時系列解析も使えるハズ(やったことないけど)。

まあ見た目の問題はあるっちゃあるけど。プレゼンには向かない?

posted by Rion778 at 18:35 | Comment(1) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年11月07日

imagematrixオブジェクトのHSV変換[R]

Rに元から用意されている関数をよく調べたらRGB→HSV変換用の関数(しかも名前がrgb2hsv。万が一昨日のオブジェクトを保存してしまった人は消去してください。)があったので昨日の関数のうちRGB→HSV変換関数を書き直し。

my2.rgb2hsv <- function(x){
	HSV <- rgb2hsv(as.vector(x[,,1]), as.vector(x[,,2]), as.vector(x[,,3]),maxColorValue = 1)
	array(c(HSV[1,]*360,HSV[2,],HSV[3,]),dim=c(dim(x[,,1]),3))
	}

使い方は昨日定義した関数と同様。imagematrixオブジェクト(rgb)を引数に与えればhue, saturation, valueの3成分をそれぞれ行列として持つ3次元配列が帰ってくる。やっぱこっちの方が圧倒的に早い。

HSV→RGB変換を行う関数は今のところ見つけてないのでとりあえずそのまま。なんか見つけてしまいそうで恐ろしい。

posted by Rion778 at 13:52 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年11月06日

RGBとHSVの相互変換[R]

Rのrimageパッケージはjpeg形式の画像をRに読み込ませて取り扱うのに便利なパッケージだが、色の表現形式としてはRGBのみの対応になっている。

RGB形式は確かに便利でわかりやすいが、用途によっては色相(Hue)、彩度(Saturation・Chroma)、明度(Brightness・Lightness・Value)の3つの成分を用いて色を指定するHSVという形式が便利なことがある。

便利なことがあるゆえに、様々な言語においてRGB⇔HSV相互変換のためのプログラム、アルゴリズムが書かれ、公開されているのだが、ちょっと探した感じではR用のものは見つけられなかった。(2008/11/7追記:はてブのコメント見ててもしやと思ったら変換用の関数があった。しかも名前がrgb2hsv。ちょっと打ち込んでみてたら分かったのに恥ずかしい…。ただそのままでは使えそうにないのでもうちょっと調べてまた書く予定。hsvをrgbにする関数は本当に無いかも?とりあえず以下のスクリプトのオブジェクト名は変更。)

ので作ってみた。

まずはRGB→HSV

#3次元配列から第3次元各要素の最大値を要素とする2次元行列を生成する
max.rgb <- function(z){
	y <- z[,,1]
	y[z[,,1]<=z[,,2] & z[,,3]<=z[,,2]] <- z[,,2][z[,,1]<=z[,,2] & z[,,3]<=z[,,2]]
	y[z[,,1]<=z[,,3] & z[,,2]<=z[,,3]] <- z[,,3][z[,,1]<=z[,,3] & z[,,2]<=z[,,3]]
	y
	}

#3次元(略)最小値を要素とする(略)
min.rgb <- function(z){
	y <- z[,,1]
	y[z[,,1]>=z[,,2] & z[,,3]>=z[,,2]] <- z[,,2][z[,,1]>=z[,,2] & z[,,3]>=z[,,2]]
	y[z[,,1]>=z[,,3] & z[,,2]>=z[,,3]] <- z[,,3][z[,,1]>=z[,,3] & z[,,2]>=z[,,3]]
	y
	}

#RGB→HSV変換
my.rgb2hsv <- function(x){
	#Vの計算
	hsV <- max.rgb(x)
	#Sの計算
	hSv <- (max.rgb(x)-min.rgb(x))/max.rgb(x)
	hSv[max.rgb(x)==0] <- 0
	#Hの計算
		#入れ物の用意
			Hsv <- x[,,1]
		#Rがmaxの部分のH
			Rmax <- 60*(x[,,2]-x[,,3])/(max.rgb(x)-min.rgb(x))
			Hsv[x[,,1]==max.rgb(x)] <- Rmax[x[,,1]==max.rgb(x)]
		#Gがmaxの部分のH
			Gmax <- 60*(x[,,3]-x[,,1])/(max.rgb(x)-min.rgb(x)) +120
			Hsv[x[,,2]==max.rgb(x)] <- Gmax[x[,,2]==max.rgb(x)]
		#Bがmaxの部分のH
			Bmax <- 60*(x[,,1]-x[,,2])/(max.rgb(x)-min.rgb(x)) +240
			Hsv[x[,,3]==max.rgb(x)] <- Bmax[x[,,3]==max.rgb(x)]
		#Hが定義されない部分
			Hsv[max.rgb(x)==min.rgb(x)] <- 0
		#値がマイナスの部分
			Hsv[Hsv<0] <- Hsv[Hsv<0]+360
	array(c(Hsv, hSv, hsV),dim=c(dim(Hsv),3))  #imagematrixオブジェクトと同様にH,S,Vの配列を出力
	}

最初にRGB成分の最大値・最小値のみを要素とする行列を作成する関数を定義し、これを変換用の関数中で用いている。なんかもうちょっと綺麗な書き方をしたい・できそうな気がしたけど思いつかない。

RGB→HSV変換関数の出力はimagematrixオブジェクトと呼ばれる配列と同様のものにした。H成分、S成分、V成分がそれぞれ一枚ずつ行列に格納される。

使うにはrimageパッケージのread.jpeg関数などで作成したimagematrixオブジェクトを突っ込むだけ。

photo <- read.jpeg("写真.jpeg")
photo.hsv <- rgb2hsv(photo)

ちょっと重いのが気になる。どこが原因なんだろ。

次にHSV→RGB変換。場合分けが多いのでちょっと大変。

#HSV→RGB変換
my.hsv2rgb <- function(x){
	H <- x[,,1]
	S <- x[,,2]
	V <- x[,,3]
	R <- array(rep(0,length(H)), dim=dim(H))
	G <- array(rep(0,length(H)), dim=dim(H))
	B <- array(rep(0,length(H)), dim=dim(H))
	#Hiという数値の計算
		Hi <- floor(H/60)
	#Fの計算
		rgbF <- H/60 - Hi
	#Mの計算
		M <- V*(1-S)
	#Nの計算
		N <- V*(1-S*rgbF)
	#Kの計算
		K <- V*(1-S*(1-rgbF))
	#Hiが0のとき
		R[Hi==0] <- V[Hi==0]
		G[Hi==0] <- K[Hi==0]
		B[Hi==0] <- M[Hi==0]
	#1のとき
		R[Hi==1] <- N[Hi==1]
		G[Hi==1] <- V[Hi==1]
		B[Hi==1] <- M[Hi==1]
	#2のとき
		R[Hi==2] <- M[Hi==2]
		G[Hi==2] <- V[Hi==2]
		B[Hi==2] <- K[Hi==2]
	#3のとき
		R[Hi==3] <- M[Hi==3]
		G[Hi==3] <- N[Hi==3]
		B[Hi==3] <- V[Hi==3]
	#4のとき
		R[Hi==4] <- K[Hi==4]
		G[Hi==4] <- M[Hi==4]
		B[Hi==4] <- V[Hi==4]
	#5のとき
		R[Hi==5] <- V[Hi==5]
		G[Hi==5] <- M[Hi==5]
		B[Hi==5] <- N[Hi==5]
	#S=0のとき
		R[S=0] <- V[S=0]
		G[S=0] <- V[S=0]
		B[S=0] <- V[S=0]
	imagematrix(array(c(R, G, B),dim=c(dim(R),3)))  #imagematrixオブジェクトとして出力
	}

出力はimagematrixオブジェクトなのでそのままプロットしておk。

plot(my.hsv2rgb(photo.hsv))

ついでにhsv形式の画像をプロットする関数なども作っておくと便利かもしれない。

#HSV形式のデータをプロットする関数
hsv.plot <- function(x){
	plot(my.hsv2rgb(x))
	}

まあちょっとだけ打ち込む文字数が減るだけなんですけど。

これだけなんだけど、肝心のhsvへ変換する関数が重いのがやっぱ気になる。使えないほどじゃないんだけど、rgbへの変換より明らかに重い。もうちょっと調べて改良しないとだめか。

posted by Rion778 at 20:09 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年09月07日

ふりっかー

存在を知ってからも、アカウントを取ってからも相当に放置していたFlickrに写真をアップロードなどしてみる。案の定面白いのでもっと写真撮ろう。もうちっと良いデジカメが欲しいなー。

オニヤンマ

こいつは実家の玄関の前にとまっていたオニヤンマ。Flickrにアップしてから貼り付けた。便利です。僕の携帯(SO905iCS)で適当に撮影したんですが、このオニヤンマをめぐってばーちゃんと母上がこんなやりとりを。

ばば「うーん。こう、後ろから撮らないと…」

はは「欲しいの?トンボの写真欲しいの?撮ってあげようか?」

ばば「別に欲しいわけじゃ…」

はは「欲しいんでしょ?デジカメとってくるから」

ばば「べ、べつにいらないったら!でもどうしても撮りたいっていうんならもらってあげなくもないんだからね!」(一部補正)

デジカメを持ってくる母親。そして飛び立つオニヤンマ。

実家はいたるところに虫が落ちている(例えば廊下にカブトムシが落ちてたり)ようなところ。どうやらでかいハチの巣が家のどこかにあるそうで、「ハチが大量に出入りしてるよ!」って隣の家に言われたらしい。それに関してははとばばがこんなやりとりを。

ばば「お金もないし別に危なくないだろうから『もしどうしても嫌だったら言ってね』って言っておいた。」

はは「まあスズメバチじゃなければ大丈夫じゃない」

ばば「ハチの巣といえばこの前裏庭にすごく大きなハチの巣があって、おじいさんが生きていたころだけど」

はは「…それって『この前』じゃないよね」

ばば「…20年くらい前?」

冗談なのか本気なのか分からないのがポイント!

本当は朝ご飯だけ食べたら帰ろうかと思ったけど、居心地がいいので晩ご飯まで食べたら帰ろうかと考え中。

posted by Rion778 at 13:50 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年07月16日

三角関数などの根を小さい方から順に求める[R]

当たり前の話だけど,三角関数なんかは何度も何度もy=0を通る.つまり,y=0に対応するxの値というのは無限に存在する.これを小さいほうから順に求めていく方法がほしかった.

が,結局良く分からなかったのでかなーり無理やりなやり方でどうにかすることとした.

f <- function(x) sin(x)
f_root <- numeric(10)
j <- 0
for(i in 1:10){
	while(F==is.vector(try(uniroot(f, c(j,j+1))$root,T))){
		j <- j+0.1
		if(is.vector(try(uniroot(f, c(j,j+1))$root,T))){
			f_root[i] <- try(uniroot(f, c(j,j+1))$root,T)
			}
		}
	j <- f_root[i]+0.1
	}
f_root
f <- function(x) sin(x)
f_root <- numeric(10)
j <- 0
for(i in 1:10){
	a <- 0.1
	while(F==is.vector(try(uniroot(f, c(j,j+a),tol=1e-10)$root,T))){
		a <- a+0.1
		}
	f_root[i] <- uniroot(f, c(j,j+a),tol=1e-10)$root
	j <- f_root[i]+0.001
	}
f_root

(2008/7/17 修正,前回のは全然正しくなかった.if文をwhile文の中に入れる必要性がさっぱりわからない.寝ぼけてたとしか.)

最初に目的の関数をfとして作成する(この場合sin).

次に求めたい根の個数だけの長さの入れ物を作る(続くfor文での繰り返し回数とそろえる).

そして関数の最初の点を決定する.

実行.f_rootの中に根が収納される.

いいのかこんなんで?

エラーを無視させて無理やり処理を継続させたり,繰り返しの中で繰り返しを使ったりとかなり汚い感じ.きっと変な関数入れたら止まらなくなるんじゃないだろうか.正の方向へ十分な個数の根を持たない関数入れたら止まらないのは明らかだしなー.

まあ自分が使う範囲なら問題なく動くのでいいか.使用注意.

posted by Rion778 at 21:06 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年05月08日

格子法による根長の算出

格子法でググっても流体力学の手法ばかりでてくるが,ここで紹介するのは植物の根の長さを計算するための手法.

間隔がわかっている方眼紙の上に植物の根を置いて,方眼の線と植物の根の「交点」をカウントすることで根の長さが推定できるという方法.

方眼の間隔がxとしよう.方眼の格子と根の交点がN個ならば総根長Rは次式で推算可能である.

導出に興味がなければおとなしくこの式を受け入れてもらえばいい.おとなしく受け入れる気がないという方は以下へどうぞ.

この方法は当初は線交差法という格子を用いない方法として考案された(Newman, 1966).線交差法においては,ランダムに配置した直線と根が交差する確率より根長を推定する.

上の図において,直線PQが根(ただし長さΔRは直線とみなせる程度に短い)であり,それに直線MNが交差している.このとき,PQとMNが交わるためには,少なくともPQの中心Dが直線MNから距離ΔR/2の範囲(点線で示した)のうちに存在している必要がある.ここで,PQ<<MNだとすれば,「直線MNから距離ΔR/2の範囲」というのは

である.

直線PQと直線MNが面積Aのうちに存在しているとしよう.このとき,(ΔR)hの範囲内にDが含まれる確率は

である.

次に,Dが(ΔR)hの範囲内にあるとき,直線PQと直線MNが交差する確率を求めよう.

直線PQと直線MNが交差するためには,Dから直線MNまでの最短距離が1/2ΔR|sinθ|よりも小さい必要がある.θは直線PQと直線MNのなす角である.

Dは直線MNから1/2ΔRの範囲を動くので,いま求めたい確率は,

で与えられる.

よって,「(ΔR)hの範囲内にDが含まれ」かつ「直線PQと直線MNが交差する」確率pは

である.交点の個数はすなわちこの確率の与える期待値であるので,θの1回転分,つまり0〜2πまでこの確率を積分し,2πで割る.

ところで,全根長Rは直線とみなせるようなΔRのつながったものとみなせる.よって

以上より,全根長Rは

により与えられる.なお,Hはすべての直線の合計長さである.

ところで,別に直線の方はランダムに置かないでも格子状に置けばいいんじゃね?精度も上がるよ,と提案した人がいた(Marsh, 1971).

そこで,たとえば間隔がxの格子を考えてみると,面積とそれに含まれる直線の長さの関係はx^2:2xとなる(実際に方眼紙を使って確認を!).そこで,これを先の式に代入すると,

である.で,ここでπ/4を計算してしまうと,

が得られるわけである.

ちなみにこの方法はNewmanと言う人が考案し,Marshと言う人が格子を使うことを提案し,Tennant(1975)という人によって有効だということが確認されたそうだ.

参考文献

  • 安部 淳,森田茂紀. 2004. 根の形態と機能に関する学生実験プログラム. 根の研究 13(2): 61-65
  • Marsh B. a'B. 1971. Measurement of length in random arrangements of lines. Journal of Applied Ecology 8:265-267.
  • Newman E.I. 1966. A method of estimating the total length of root in a sample. Journal of Applied Ecology 3:139-145.
  • Tennant D. 1975. A test of a modified line intersect method of estimating root length. Journal of Ecology 63: 995-1001.
posted by Rion778 at 22:35 | Comment(1) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年05月04日

ScilabとRの処理速度

やることは山積みだがヒマ感がすごいのでRとScilabで処理速度を比較してみた。

RもScilabも繰り返しは苦手っぽいけど繰り返しの処理速度は気になるし、 分かりやすいのでEular法で微分方程式を解かせてみた。

問題は 「ゼロから学ぶ物理数学 (ゼロから学ぶシリーズ)」 より拝借。食べると1秒あたり4パーセント身長が縮むキノコをアリス(身長125cm)が食べたとき、 身長の変化はどうなるのか?という問題。

0.005秒ごとに値を計算させ、ベクトルとして記録、プロットまで終わらせた時点の時間を計測。用いたマシンはOS: Windows Vista、CPU:Core 2 Duo 2.20 GHz、RAM:2GByte。

まずはScilabから。

timer()
x = 0;
y = 125;
i = 1;
dX = 0.005;
X = 0;
Y = 0;
while x < 100
X(i) = x;
Y(i) = y;
y = y-y*0.04*dX;
x = x+dX;
i = i+1;
end
plot(X,Y)
timer()

入れたばかりで使い方が怪しいけど、これで実行時間が分かるはず。

つぎにR。

f <- function(){
 x <- 0
 y <- 125
 i <- 1
 dX <- 0.005
 X <- numeric(0)
 Y <- numeric(0)
 while(x < 100){
X[i] <- x
Y[i] <- y
y <- y-y*0.04*dX
x <- x+dX
i <- i+1
}
 plot(X,Y)
 }
system.time(f())

system.time関数の使い方がよく分からないので一連の処理を関数にまとめてから実行時間を計った。

結果。

  • Scilab: 7.46
  • R:       2.81

もうちょっとくらい調べてからやればよかったけど、MATLAB系の言語ってのはもともとそんなに早くなくて、 特に繰り返し文を多用すると遅さが顕著になるらしい。ちなみに、Rでは

X <- numeric(0)
Y <- numeric(0)

この部分を

X <- numeric(20000)
Y <- numeric(20000)

といった具合に必要なベクトルの長さをちゃんと指定する形に直してやると、実行速度は1.15秒まで縮まる。

何にも指定していない状態だとグラフはScilabの方が綺麗かな。gnuplotぽい。

RにしろScilabにしろ演算をベクトル同士に帰着できればもっと早くできるはず。画像処理なんかはどうなんだろう。 Rでやったときはプロットがやたら重くなったけど。またヒマなときにやろう。

posted by Rion778 at 14:34 | Comment(6) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年04月27日

PC買ったんだ

大学で使ってたVAIOに限界を感じていたのでとうとうパソコンを一台買った。ThinkPadのX61。多少安く手に入ったけどこれでいよいよ本格的に金がない。

LaTeXの処理速度とかRでの計算速度、量の向上が目的だったのでソフトウェア的なものは大分ケチった。OSはVistaのHome BasicでOfficeも入れていない。まあ3Dエフェクトを見てみたくなったらLinuxでも入れればいいかなとか思ってたんだ。

でもCDドライブがついてなかった(付けなかったんだけど)。

しかし最新のUbuntuはWindows上からソフトをインストールするノリでインストールできるそうじゃないか。パーティションも切らずに。っつーことで早速CDイメージを落としてDaemon Toolsでマウントしてみたけどなんか上手くいかない。「Windows based UBuntu Installer は動作を停止しました」とか言われる。なんでかなー。誰か助けてー。

まあとりあえずLinuxは後回しにして一通りフリーソフトをインストール。入れたのはLaTeX、xyzzy、R、Maxima、それと使うかわからんけどscilab。教官がxls形式でファイル配布なんて素敵なことをやってくれたのでOOoも入れた。仕方なく入れたんだけど思ったより大分サクサクだから普通にこれからOOo使うかも。しかしHDDに余裕があるってのは素晴らしい。これだけ入れてもまだ前のVAIOの50倍は余裕がある。後で画像周りのモノも入れよう。

有償のものだとPowerPoint2007を入れた。もちろん試用版だけど。しかしスゲー使いやすいしセンスのない僕でもそれなりに見れるプレゼンが簡単に作れるので買ってしまいそうだ。試用期間2か月らしいのでその間にどうにか資金を稼いで買おう。

WordとExcelはOOoでいいや。どうせ普段はLaTeXとRだもの。

Vistaになったおかげで使えなくなったソフトがいくつか出てきたのは残念。普段ブログ書くのに使ってたubicast Bloggerは完全に使えないし、使えるようになりそうもない。ただ、前のPCではスペック不足でまともに使えなかったxfy Blog Editorってのがサクサク動くのでそれほど困ったことにはなっていない。というか投稿時に変なエラー吐かないしこっちのがいいかもしれない。

posted by Rion778 at 23:17 | Comment(0) | TrackBack(1) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年04月17日

画像から距離を算出する[R]

画像から座標情報をクリックによって取得し,対象物の長さを算出する.

必要なもの

  1. rimageパッケージ
  2. 長さを知りたい対象物と,既知の長さのスケールが写っている画像

方法

まず,rimageパッケージをインストールしておく.インストールしたら読み込んでおく.

library(rimage)

これでjpeg画像などが読めるようになる.ここでは以下の画像を読み込む.

 happa3

赤の色紙がスケール.5mm四方のサイズにカットしてある.知りたいのは左に写っている葉のサイズに関する情報だとする.

まずはこれをRに読み込ませる.

leaf <- read.jpeg("leaf.jpg")

ここでは,leaf.jpgという名前で作業ディレクトリに保存してあったこの画像を,leafという変数へ代入した. read.jpeg関数ではR,G,Bの成分については0〜FF(16進)で表現されていた情報が0〜1の数値へ変換され, 座標情報については行列という形へ変換される.行列に演算をほどこすによってガンマ補正や回転が可能であるが,ここでは扱わない. 今知りたいのは距離の情報だ.

次に,これをグラフィックデバイスに表示する.

plot(leaf)

あまり大きな画像はここで時間がかかる.場合によっては落ちるので,画像はできるだけ小さくした方が効率がいい.

次に,座標情報を取得する.座標情報は,locator関数により対話的に取得する. locator関数は実行されると待機状態となり,その間にクリックされたグラフィックデバイス内の座標情報をx,y成分に分けて返す.

locator(2)

とするならばクリックが2回行われるまで待機状態となり,2回のクリックが終わった時点で,

$x
[1] 1.553408 4.102340
$y
[1] 3.378737 1.999335

といった具合に値を返す.

2点間の距離は,2点の座標をそれぞれ(x1, y1), (x2, y2)とするなら,3平方の定理により,

20080417eq1

で与えられる.すなわち,座標情報を

p1 <- locator(2)

で変数へ代入していた場合,その算出は

sqrt((p1$x[1] - p1$x[2])^2 + (p1$y[1] - p1$y[2])^2)

である.

この手順を繰り返し,スケール間の長さ,対象物の長さを算出後,スケールに対する対象物の長さを算出, スケールの実寸を乗ずることで対象物の実際の長さが分かる.関数にまとめれば,

measure <- function()
 {
cat("スケールサイズを入力(単位:mm) : ")
scale.size <- as.numeric(readline())
p1 <- locator(2)
scale <- sqrt((p1$x[1] - p1$x[2])^2 + (p1$y[1] - p1$y[2])^2)
p2 <- locator(2)
size <- sqrt((p2$x[1] - p2$x[2])^2 + (p2$y[1] - p2$y[2])^2)
return((size/scale)*scale.size)
 }

引数なしで

measure()

と実行するとスケールのサイズ入力を求めるので,半角数字で入力する.エンターを押すと待機状態となるので,「スケールの両端」→ 「測定したい距離の両端」の順に4箇所をクリックすると,算出された距離が返ってくる.

ちなみに,最初の画像に示された葉の葉幅は16.7mmだった.

…実用性は…ない!

だって面倒だもの.わざわざRでやる利点はなにも無いのですよ.

画像から距離だとか面積だとかを知りたい場合はLIA32という優れたフリーソフトがあるのでそれを使うのが賢明です.

posted by Rion778 at 18:49 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年03月14日

PCで文献管理

ボチボチ真面目に文献の管理をしないといけないなと思う今日この頃.ファイルに片っ端から綴じて目次を作ってみたけど, すでに破綻の様相を呈している.そこで,文献管理ソフトを使ってみようと思いついた次第.

一応今までもエディタとBibTexファイルを作って簡単な管理はしていたけど, 所詮はテキストなのでさっぱりデータベースとして機能していなかった.

それで,BibTexファイルを使ったデータベースみたいなものがないかと検索してみたら,JabRefというものが見つかった.

英語だが,今までのエディタに比べたらはるかに分かりやすいし入力も楽だ.ソートや検索といった機能があるだけでやっぱり全然違う.

なによりJab2HTMLと組み合わせたときのHTMLへの出力がかなり良い. サンプルを見るとよくわかるのだけれど, タイトルやアブストラクトの表示はもちろん,PDFやサイトURLへのリンク,GoogleやGoogle Scholarで検索するリンク,リスト中の他の文献へのリンク,コメントなどを表示させられる.

BibTexを使わない人が普通に文献管理をするのにも便利だろう.本の管理なんかにも使えるかもしれない.

 

posted by Rion778 at 19:12 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年02月05日

jsbookで章番号のあとに改行を入れない[LaTeX]

こーゆー細かい注文が一番困るんだ!

でもとりあえず出来たのでメモ.プリアンブルに,

\makeatletter
\def\@makechapterhead#1{
\vspace*{2\Cvs}
{\parindent \z@ \raggedright \normalfont
\Huge\headfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\@chapapp\thechapter\@chappos
\hskip1zw
\fi
\fi
#1\par\nobreak
\vskip 3\Cvs}}
\makeatother

(参考:TeXでレポート作成[jsbookからjsreportへ]

\makeatletter〜\makeatother間に書いてあれば良いので,さっきメモった「文献の参照番号を上付きに[LaTeX]」 とまとめて書いてもおk.

もっとスマートにやりたい人は上で参考にさせてもらったWebページを見てjsreport.styを作ってしまうといいでしょー.

posted by Rion778 at 00:04 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。