コンピューター

octaveのquadの評価関数に、パラメタ変数入りの関数を使って、パラメタを外から与える。

[2011-02-24追記:
octave 3にて無名関数が追加され

ret = @(c) quad(@(c,x) c * x^2, a, b)

などと簡潔に書けるようになりました.このretをさらにquadに渡して使うなどの多段呼び出しはやはりうまくいかないみたいですが.]

octaveの積分用関数quadは、

quad("f", a, b);

や、

quad("f(x)", a, b);

などとして呼び出すことができます。

 

しかし、この関数が

function y=f(c,x)
  f(c,x) = c * x**2;
endfunction

のようにパラメータを含む場合は、

a=1;b=2;
quad("f(2,x)", a, b);

ということはできても、

a=1;b=2;c=2;
quad("f(c, x)", a, b);

などという呼び出しはできません。
次のように、「cが定義されていません。」とエラーがでます。

error: `c' undefined near line 1 column 38
error: evaluating argument list element number 1
error: evaluating assignment expression near line 1, column 34
error: called from `quad_fcn_N'
error: quad: evaluation of user-supplied function failed

これを回避する方法の一つとして、sprintfでcを評価後の文字列を与えるという手があります。

quad(sprintf("f(%f, x)",c), a, b);

しかし、これの問題はcがベクトルのときに働かないということです。
cがベクトルの時には、自分で要素抽出してやって、関数に与え、返り値をひとつひとつベクトルに納め直すという方法が考えられますが、めんどくさいです。

c = 1:10;
function y = f(c)
  for i=1:length(c)
    y(i) = quad(sprintf("f(%f, x)", c(i)), a, b);
  end
endfunction

めんどくさい上、演算に時間がかかるので、これでフィットなどしようものならどんだけーです。

quadの第一引数は、ヘッダを見ればどうなっているかわかるわけですが、見ずに推測するならば、feval的なことをしていると思われます。なので、fevalにうまくベクトルを渡すことを考えればいいと思うのですが・・。
現段階で、他の方法は思いつきません。

emacsの設定いろいろ

emacsの設定が使いにくい・・。と突然思い立って、セッティング厨房化。

時間表示

(display-time)

起動時メッセージ非表示

(setq inhibit-startup-message t)

バッファ一覧がタブとなって見えるよう。

tabber.el導入。
Elisp/タブでバッファを切り替える – Meadow memo

 

バッファ切り替えを楽にする方法は他にもいろいろ。
Meadow/Emacs memo: バッファリストとバッファの切り替え

 

ここ(EmacsWiki: Tab Bar Mode)を参考に、こんなコードに落ち着いた。

;tabbar
(require 'tabbar)
(setq tabbar-buffer-groups-function
(lambda (b) (list "All Buffers")))
(global-set-key [?\C-,] 'tabbar-backward)
(global-set-key [?\C-.] 'tabbar-forward)
(tabbar-mode)

twitterしたい。

twittering-mode.el
HugeDomains.com – HayaMin.com is for sale (Haya Min)

(twittering-icon-mode t)
とxemacsで、さらに快適でした。

複数行のコメントアウト

if nil (
CODE...
)

とりあえず、こんなふうにしてますが、もっと良い方法はないんだろうか。

メモとりたい。

howmを入れる。
howm: Hitori Otegaru Wiki Modoki

形式を気にせず書き散らせるのが意外にいい。
メモ間のリンクの張り張られも、キーワードに>>>や<<<をつけるだけでいい。
>>>はメモにタグをつける機能に相当。これは他のメモソフトにもある。<<<は、はてなキーワードみたいなもの。後から他のメモ中のキーワードにリンクが貼れる。これが便利。

1メモ1ファイルなので、すべてを1ファイルに書くというChangeLog Memo形式の方針には沿わないけど、1ファイルにしたくなったらcatすれば良いかとも思う。

gnuplotにfor文

gnuplotにfor文があったらどんなに楽か。
と思っていたら、CVS版にはもう実装されていたようです・・。

info and memo for gnuplot (2006)
(“for 文”で検索すると早く到達できます。

debian lennyの現gnuplotバージョンは、4.2-2らしいので、あとちょいで使えるようになるのでしょうか。

例文、引用。

<blockquote>
        file(n) = sprintf("dataset_%d.dat",n)<br />
plot for [i=1:10] file(i) title sprintf("dataset %d",i)

</blockquote>

if文もあります。それは以前見つけたので、次のように使っています。

<blockquote>
    if (flag==1) p sin(x);\<br />

print a;\
print b;

</blockquote>

便利ですねえ。

windows上でのlinux環境整備

vmware, cygwin, colinuxと、いろいろ試してきましたが、
外部PCのlinuxに、ssh接続してxserverとなりたいとか、
gnuplot, emacsとか使い慣れている環境をいっぺんに入れたい。(それぞれのソフトのwindows版を入れれば似た環境ができるのだけど、aptitudeできなくて、めんどくさい・・。)

という要求であれば、colinux(パーティションインストール)+xmingが一番よかったなーと思った。
(一個目の要求だけであれば、xmingのみでよくて、インストールがとても簡単です。

vmwareは非力なパソコンでは起動が遅くて使いづらい。し、ディスクイメージファイルが損傷して起動しなくなったときにデータが救出できなくなった経験がある。
cygwinは不安定。windowsの起動が遅くなったりもする。(私の能力では使いこなせなかったという意味。)
でしたが、
colinuxは起動が早いし、HDDに新しくパーティションを切ってインストールすれば好きなディストリビューションを入れられ(debian lenny入れてます)、colinuxがなんらかの事情で起動できなくなっても、データはext3なので、そのまま使える。

colinux+xmingおすすめ、おすすめ。