ページ

2015年3月5日木曜日

ちょっとイザヤ書の勉強をしよう

今日の聖書の箇所がイザヤ書の6章とあるのでイザヤ書を少しばかり勉強してみようと思った。
最近 kindle を頂いたので早速 Orthodox study bible をポチして少しずつ読んでいる。英語は苦手だからいっぺんには読めないので、、、。

イザヤ書 
6:1 ウジヤ王の死んだ年
ウジヤ王が死んだ年について:
聖書学者はこの出来事はBC734と考えている。
師父たちは王の罪が元でこの時に預言が成就したと教えている。(歴代誌第二26:18を見よ)
/* The Fathers teach that the sins of the king caused prophecy to cease for a time
の訳はこれでいいの? prophecy to cease は預言の成就という意味であってる? */
(歴代誌下26:18以下では、ウジヤは祭司でないのに祭壇の上に香を焚こうとしたことで祭司アザリヤに咎められる様子が書かれている)
6:1-12 この個所は、大齋第二週の木曜日と2月2日(グレゴリオ暦2月15日)の主の迎接祭で読まれる。
6:6-7 この時セラピムのひとりが火ばしをもって、祭壇の上から取った燃えている炭を手に携え、わたしのところに飛んできて、わたしの口に触れて言った、「見よ、これがあなたのくちびるに触れたので、あなたの悪は除かれ、あなたの罪はゆるされた」。
燃える炭を口に触れる:
イザヤのこの体験はユーカリストの象徴であり、信仰による働きによって祭壇から取られたものである。実際、正教の司祭は領聖後にセラフィムの宣告を静かに引用する。(7節)
/* In fact, after an Orthodox priest receives communion, he quietly quotes the seraphim's proclamation(v7).
の訳はこれで正しいのだろうか? */
司祭は領聖後にこの祝文を唱えるのかな?と疑問に思ったので奉事経を確認。
http://kindai.ndl.go.jp/info:ndljp/pid/988164
スライドの95コマ目
本当だ
「視よ、此れ我の口に触れたり、乃我が不法を除き、我が罪を浄めんとす、」
と書いてある。
6:1-6のイザヤの視点は正教のハリスティアニン等の礼拝に強い影響と発展をもたらす。
教会では、天国のように、宝座(祭壇)を持ち、香の煙が焚かれ、信者たちは「聖なるかな聖なるかな聖なるかな」の聖三祝文を歌う。
/* これは、どうやって訳せばいいのだろうかと悩んだ。単に単語を並べただけみたいになってしまっている。
Isaiah's vision has strongly influenced the development of Orthodox Christian worship. For the Church, like heaven, has an altar, a throne, smoke from the incense, and believers singing "Holy, holy, holy," the Thrice-Holy Hymn. */
次、
 主は言われた、「あなたは行って、この民にこう言いなさい、『あなたがたはくりかえし聞くがよい、しかし悟ってはならない。あなたがたはくりかえし見るがよい、しかしわかってはならない』と。
あなたはこの民の心を鈍くし、その耳を聞えにくくし、その目を閉ざしなさい。これは彼らがその目で見、その耳で聞き、その心で悟り、悔い改めていやされることのないためである」。
そこで、わたしは言った、「主よ、いつまでですか」。主は言われた、「町々は荒れすたれて、住む者もなく、家には人かげもなく、国は全く荒れ地となり、
人々は主によって遠くへ移され、荒れはてた所が国の中に多くなる時まで、こうなっている。
その中に十分の一の残る者があっても、これもまた焼き滅ぼされる。テレビンの木またはかしの木が切り倒されるとき、その切り株が残るように」。聖なる種族はその切り株である。(6:9-13)
人々は罪を選ぶのであって自然に犯すのではない、意志によって彼らは聞くのを止めそして目を閉じる。
/* ここも訳に自信がない。
People sin by choice, not by nature, volitionally stopping their ears and closing their eyes. */
とりあえず今日はこれでおしまいにしよう。

2014年10月30日木曜日

計算方法を調べるよりもLaTeXで図を作成する方が面倒だった

前回は水平線までの距離を計算する方法を調べたが、せっかく調べたのだからLaTeXで綺麗に印刷したいと思うものである。しかし計算方法を調べるよりもLaTeXで図を作成する方がずっと大変だった。 単純な図だからわざわざInkscapeなどのツールで画像を作成するよりもpicture環境などで直接描画した方がよろしかろうと思ったのだ。しかしこれが大変だった。
適当な直径の円を書きたければ circle コマンドを使えばいいが、直線との接点の座標はどうやって決めたらよいのか、いちいち計算するのがとても面倒だったのだ。しかも図はピクセル単位というかドット単位でしか描画できないのに計算結果はきれいな整数にはなってくれない。見た目ではわからないからだいたいあっていればいいのだけど計算すること自体が手間である。
もっと頭のよい方法があるはずである。ようするに今回は円周上の点との接線をうまく描けばいいのだから円周上の点の座標が綺麗な整数値になってくれる r と x と y の組み合わせを見つければ良いのである。 そこで散々頭を悩ました結果、単に r2 = x2 + y2 としたときの r, x, y の全てが整数になる組み合わせをリストアップすれば済むことに気が付いた。
しかしこのような組み合わせを簡単に見つけるのは難しい、32 + 42 = 52 のような簡単な例ならすぐに思いつくが今回のように割と x と y の比が大きめの組み合わせはどうやって調べたらいいのだろうか。
それで中高生向けの数学の本などを読んでいたら面白いのをみつけた。
隣り合った2つの奇数、たとえば 5 と 7 をとります。このとき、次のような分数の式が成り立ちます。
1   1   12
- + - = --
5   7   35
この分母と分子に現れる 35 と 12 は
352 + 122 = 372
となっています。したがって、35 と 12 を直角にはさむ 2辺とする直角三角形をつくることができます。
同じようなことを、他の隣り合った奇数を使ってできるでしょうか。・・・
--志賀浩二「中高一貫数学コース 数学1」(p125)
なるほどこれは面白い。確かめてみよう。
確かめるために次の python プログラムを用意。
#!/usr/bin/python
from math import *
for i in range(1,101):
 if i % 2 != 0:
  j = i + 2
  a = 2*i+2
  b = i**2 + 2*i
  print " 1     1    {0:3d}".format(a)
  print "--- + --- = ---     {0}^2 + {1}^2 = {2}^2".format(a,b,sqrt(a**2 + b**2))
  print "{0:3d}   {1:3d}   {2:3d} ,".format(i,j,b)
  print
実行結果。
 1     1      4
--- + --- = ---     4^2 + 3^2 = 5.0^2
  1     3     3 ,

 1     1      8
--- + --- = ---     8^2 + 15^2 = 17.0^2
  3     5    15 ,

 1     1     12
--- + --- = ---     12^2 + 35^2 = 37.0^2
  5     7    35 ,

 1     1     16
--- + --- = ---     16^2 + 63^2 = 65.0^2
  7     9    63 ,

 1     1     20
--- + --- = ---     20^2 + 99^2 = 101.0^2
  9    11    99 ,

 1     1     24
--- + --- = ---     24^2 + 143^2 = 145.0^2
 11    13   143 ,

 1     1     28
--- + --- = ---     28^2 + 195^2 = 197.0^2
 13    15   195 ,

~~~中略~~~

 1     1    192
--- + --- = ---     192^2 + 9215^2 = 9217.0^2
 95    97   9215 ,

 1     1    196
--- + --- = ---     196^2 + 9603^2 = 9605.0^2
 97    99   9603 ,

 1     1    200
--- + --- = ---     200^2 + 9999^2 = 10001.0^2
 99   101   9999 ,
ということで、どうやら確からしいので確かめると、
奇数というのは任意の整数 n に対して 2n - 1 となる整数だが、2n - 1 の次の奇数は 2n + 1 である。
先程の式に当てはめると
   1         1       2n + 1 + 2n - 1        4n
------- + ------- = ----------------- = ----------
 2n -1     2n + 1   (2n - 1)*(2n + 1)    4n2 - 1
となり、これは
(4n)2 + (4n2 - 1)2 = 16n4 + 8n2 + 1
つまり
(4n)2 + (4n2 - 1)2 = (4n2 + 1)2
となるので右辺は必ず整数の2乗となるのがわかる。
しかし、次の python プログラムを実行して r2 = x2 + y2 において r , x , y が全て整数となる組み合わせ探すと更にたくさんあることがわかる。
#!/usr/bin/python
from math import *
for x in range(1, 101):
 for y in range(1, 1001):
  if x <= y and sqrt( x**2 + y**2 ) == round( sqrt( x**2 + y**2 ) , 0):
   print '{0}\t{1}\t{2:.0f}'.format(x , y , sqrt(x**2+y**2))
実行結果
3 4 5
5 12 13
6 8 10
7 24 25
8 15 17
9 12 15
9 40 41
10 24 26
11 60 61
12 16 20
12 35 37
13 84 85
14 48 50
15 20 25
15 36 39
15 112 113
~~~省略~~~
35 120 125
~~~省略~~~
99 132 165
99 168 195
99 440 451
99 540 549
100 105 145
100 240 260
100 495 505
100 621 629
こうやって見ると今回は半径130px前後の円を描きたいので 352 + 1202 = 1252 の組み合わせが手ごろな感じがする。 つまり半径125pxの円上の点の座標が x, y ともに整数値になるのは x = 35 , y = 120 または x = 120 , y = 35 の場合とわかる。 これを使えば円の接線の方程式を求める計算の手間が省略できてLaTeXのpicture環境で次のように描画すればよい。
% 35^2 + 120^2 = 125^2
% 135 + 35 =170 , 135 + 120 = 255
\begin{center}
\begin{picture}(270,280)
 \put(135,135){\circle{250}}
 \put(135,135){\line(7,24){35}}
 \put(170,255){\line(-24,7){35}}
 \put(135,135){\line(0,1){130.2}}
 \put(128,127){O}
 \put(128,262){h}
 \put(152,262){d}
 \put(128,197){r}
 \put(157,195){r}
\end{picture}
\end{center}
図の領域を幅270高さ280とすると、picture環境の原点は左下の角なので、ここから座標(135,135)を中心とした半径125の円を描くことにする。 接線と円の接点の座標は(135+35, 135+120)にすればよい。また接線の傾きは -35/120 = -7/24 である。 直角の記号を描きたいなら接線の傾きはわかっているので比較的簡単に求められる。
 %170-12,255+3.5 ,-7/-24, 3.5
 %170-3.5,255-12 ,-24/7, 12
 \put(158,258.5){\line(-7,-24){3.5}}
 \put(166.5,243){\line(-24,7){12}}
というのを追加すればよい。残念ながら全て整数にはならなかったが何も考えずに半径 r を100とか150とか高さ h を 10 とかにしてしまうと接点を計算した時にきれいな整数になることはまずないのだから、それに比べたらずいぶんマシである。

こうして作ったPDFファイルが次のものである。

https://drive.google.com/file/d/0B8A5Lx3UeWQcVHVuMXFqcVFWRHM/view?usp=sharing

これでもう水平線までの距離について悩まなくて済むばかりでなく似たような図を描画するときに円の接線と接点を決めるのが楽になる。

2014年10月28日火曜日

水平線までのおよその距離を計算する方法を調べてみた

大雑把に水平線までの距離を計算したくなったので考えたり調べたりしてみた。
それで計算してみたらだいたいこんな感じになった。


水平線までの距離を d [m] 、目の高さを h [m] として、
地球の半径は地球の円周の長さが 4.0 × 104 [km] だから
 2πr = 4.0 × 104 × 103
      r = 4.0 × 104 × 103 / 2π
        = 2.0 × 107 / π
なので r = 6.37×106 [m] 、地球の直径 2r = 1.27×107 [m] となる。
目の高さ h [m] での水平線までの距離 d [m] は
d2 + r2 = (r + h)2
d = sqrt{ (2r + h) h }
となる。目の高さ h は地球の半径 r に対してとても小さいので (2r + h) の h は実用上は無視できるほど小さくなるので d = sqrt{ 2rh } として問題なし。
数値を入れてみると次の通り。
d = sqrt{ 12.7 × h × 106 } = sqrt{ 12.7 × h } × 10[m]
もっと精度を上げると d = 3568 × sqrt{ h } [m] になるが、実際には大気の屈折でもっと遠くまで見えてしまうらしい。
だから d = sqrt{ 13 × h } × 10[m] で大雑把な計算としては十分なようだ。

2013年2月12日火曜日

久しぶりに JNetHack がやりたくなった。

昔なつかしのJNetHackを調べると Debian Package にはもうないようだ。

自分でコンパイルするの面倒くさいと思いながらも、ないものは仕方がないので、参考URLに書いてある方法でコンパイルしたらできた。

参考URL:
http://rltm9940.blogspot.jp/2011/08/debian-gnu-linux-602squeezejnethack.html

NetHack本体
http://sourceforge.jp/projects/jnethack/downloads/9091/nethack-343-src.tgz/

JNetHackのパッチ
http://sourceforge.jp/projects/jnethack/downloads/30862/jnethack-3.4.3-0.10.diff.gz/

以下手順
必要そうなパッケージを入れる。
# su
# aptitude install bison build-essential flex libncurses-dev

今回はホームディレクトリに入れる。
hoge$ whoami
hoge
hoge$ mkdir ~/nethack
hoge$ cd ~/nethack

nethack-343-src.tgz と jnethack-3.4.3-0.10.diff.gz を ~/nethack に保存。

hoge$ tar zxvf nethack-343.tgz
hoge$ cd nethack-3.4.3
hoge$ zcat ../jnethack-3.4.3-0.10.diff.gz | patch -p1
hoge$ sh sys/unix/setup.sh

hoge$ vi Makefile

PREFIX = /home/hoge/nethack/usr
GAMEUID = hoge
GAMEGRP = hoge


hoge$ vi src/Makefile

# flags for Linux
#   compile normally
CFLAGS = -O2 -fomit-frame-pointer -I../include
# LFLAGS = -L/usr/X11R6/lib

hoge$ vi util/Makefile

# flags for Linux
#   compile normally
CFLAGS = -O2 -fomit-frame-pointer -I../include
# LFLAGS = -L/usr/X11R6/lib

hoge$ vi include/unixconf.h

#define SYSV        /* define for System V, Solaris 2.x, newer  
#define LINUX   /* Another Unix clone */
#define TERMINFO    /* uses terminfo rather than termcap */
#define TIMED_DELAY     /* usleep() */

hoge$ vi include/config.h

Debianの場合gzipは/usr/bin/gzipに存在しないようだ。

#define DLB     /* not supported on all platforms */
#define COMPRESS "/bin/gzip"    /* FSF gzip compression */
/*# define XI18N*/

hoge$ make all
hoge$ make install
hoge$ cd ~/nethack/usr/games
hoge$ ./jnethack

NetHack, Copyright 1985-2003
         By Stichting Mathematisch Centrum and M. Stephenson.
         See license for details.

NetHack[日本語版], Copyright 1993 - 1996
         By I. Numata , S. Miyashita and N. Hamada.
    for 3.4,  Copyright 2002 - 2008
         By K.Shirakata.


キャラクターの種族,職業,性別,属性を適当に選んでよろしいですか?[ynq]





実行できた。めでたしめでたし。

2012年8月1日水曜日

古い体温計だからか

風邪を引いたっぽいから体温を測ろうと思い長年使っていた電子体温計のスイッチを押しても反応がないので、どうやら電池切れのようだ。しかし精密ドライバーがないので交換できずにいた。

精密ドライバーを用意してふたを外して電池の型番を調べてみた。SR41SWと書いてある。近所のスーパーマーケットではLR41とかは置いてあってもSR41とかは置いてない。SRのSは酸化銀電池を意味するらしいが、Lはアルカリ電池を意味するらしい。形も電圧も似たようなものだから互換性はあるようなのだが、酸化銀電池の方が長持ちらしい。

しかし、どの程度電圧が低下しているのかと思いテスターで測ってみると、1.58[V]もあるね・・・。この電池は1.55[V]のはずなんだが、全然電圧低くなってない。

ということは、電子体温計の方が壊れたのか?

もう20年くらい使っているような気がするのだが、実際いつ製造されたものなのか分からないので調べてみようと型番を検索しても出てこないし・・・。相当古いってことだろうか。

それで電池を入れ直してもう一度スイッチを押してみると、ちゃんと動作した。

36.8℃くらいだから平熱より少し高いな。まだ風邪ちゃんと治ってないな。まだ咳ときどき出るし。

とりあえず興味本位でテスターで電圧測っておいて良かった。無駄な買い物しないで済んだ。

でも動作不安定なのも困るな。しばらく様子見て、やっぱり変だったら体温計を買い換えた方がいいんだろうな。

それはそうと、テスターって便利だな。

2012年7月12日木曜日

平均にも色々あるようだ

統計の教科書を読みながら久しぶりに Common Lispに触れてみる。

平均と言って、普段使っているのは算術平均。

(1 2 3 4 5)

というリストがあるとして、全要素を合計した値を要素数で割れば良い。

> (+ 1 2 3 4 5)
15

> (/ (+ 1 2 3 4 5) 5)
3

リスト (1 2 3 4 5) の算術平均は 3 と出た。

しかし、成長率とか増加率のような比率を平均したい場合には算術平均は使えないので代わりに幾何平均を使う。

(0.1 0.2 0.3 0.4 0.5)

というリストがある場合。めんどうなので各要素に 1 を足しておく。

mapcar が便利。

> (mapcar #'(lambda (x) (+ x 1)) '(0.1 0.2 0.3 0.4 0.5))
(1.1 1.2 1.3 1.4 1.5)

それで要素全部を掛け算する。

> (* 1.1 1.2 1.3 1.4 1.5)
3.6036

このリストが各年の成長率だとしたら 5 年間で約 3.6 倍になるらしい。

それでは平均して 1 年あたり何パーセントずつ成長しているのかを計算するには

算術平均なら

> (/ (+ 1.1 1.2 1.3 1.4 1.5)  5)
1.3

1.3 という数になる。つまり平均30パーセント増。
要素数が 5 で、それぞれ 1.3倍ずつ増えていくのだから 1.3 の 5 乗になるはず。
実際に計算してみると

> (expt 1.3 5)
3.712929

となるので、さっきの 3.6036 とは違う。だから算術平均では駄目。
そこで全要素の積を計算し、要素数 n 個なら n 乗根を出せば良い。

> (expt (* 1.1 1.2 1.3 1.4 1.5) (/ 1 5))
1.2922523

平均して29パーセントの成長率と言える。しかし、各要素に 1 を足さないで (0.1 0.2 0.3 0.4 0.5) のままで同じ計算 (expt (* 0.1 0.2 0.3 0.4 0.5) 0.2) をすると違う結果 0.26 になる。これで平均26パーセントの成長率だと思ってしまうと間違いになるから注意しないといけない。

それから或る区間を往復した場合の平均速度のような場合は調和平均を使う。

60kmの距離を行きは10 [km/h]、帰りは6[km/h]で往復した場合の平均速度は

> (/ (+ 10 6) 2)
8

算術平均で 8 [km/h] としたら間違い。
60kmの距離を10[km/h] の速さで移動したら所要時間は 60/10 = 6 時間、60kmの距離を 6[km/h] の速さで移動したら所要時間は 60/6 = 10 時間、所要時間の合計は 6 + 10 = 16 時間、距離は 60×2 = 120[km] なので、平均速度は 120/16 = 15/2 = 7.5[km/h] となる。

この場合のリストは (10 6) で、要素数が2個しかないけど、要素数が多い場合はやっぱり mapcar が便利

> (setf a '(10 6))
(10 6)
> (list '/ 1 (list '* (list '/ 1 (length a)) (cons '+ (mapcar #'(lambda (x) (/ 1 x)) a))))
(/ 1 (* (/ 1 2) (+ 1/10 1/6)))
> (eval (list '/ 1 (list '* (list '/ 1 (length a)) (cons '+ (mapcar #'(lambda (x) (/ 1 x)) a)))))
15/2
> (/ 15 2.0)
7.5

ちゃんと 7.5 になってる。

与えられた数字のリストを用いて算術平均、幾何平均、調和平均を出力する clisp のプログラムを作ってみようと考え本を読みながら試行錯誤。

とりあえずこんなのができた。

$ cat sample.lisp
#!/usr/bin/clisp
(defun readlist (&rest args)
        (values (read-from-string
                (concatenate 'string "("
                        (apply #'read-line args)
                        ")"))))

(setf a (readlist))
(setf len (length a))
(format t "list:~A, length:~A~%" a len)

(format t "~%arithmetic average:~%" )
(setf b (cons '+ a))
(format t "~A=~F~%" b (eval b))
(setf c (list '/ b len))
(format t "~A=~F~%" c (eval c))

(format t "~%geometric average:~%")
(setf d (cons '* a))
(format t "~A=~F~%" d (eval d))
(setf e (list 'expt d (/ 1 len)))
(format t "~A=~F~%" e (eval e))

(format t "~%harmonic average:~%")
(setf f (cons '+ (mapcar #'(lambda (x) (/ 1 x)) a)))
(format t "~A=~F~%" f (eval f))
(setf g (list '/ 1 (list '* '(/ 1 len) f)))
(format t "~A=~F~%" g (eval g))


$ echo 1 2 3 4 5 | ./sample.lisp
list:(1 2 3 4 5), length:5

arithmetic average:
(+ 1 2 3 4 5)=15.0
(/ (+ 1 2 3 4 5) 5)=3.0

geometric average:
(* 1 2 3 4 5)=120.0
(EXPT (* 1 2 3 4 5) 1/5)=2.6051712

harmonic average:
(+ 1 1/2 1/3 1/4 1/5)=2.2833333
(/ 1 (* (/ 1 LEN) (+ 1 1/2 1/3 1/4 1/5)))=2.189781

2012年5月24日木曜日

嗚呼悲しいショック失望した・・・。

先月頃の新聞で近所の千葉県立現代産業科学館が除染対象に選ばれていることに気がついて「おや?福島からはけっこう距離があるのになんで除染しなきゃいけないんだ?」と不思議に思った。

で、風向きかな、千葉県は意外と汚染されていたようだ。子供を外で遊ばせてはいけないようだ。通学以外での外出は極力控えるべきだ。引越しする程ではなさそうだ。などと思った。

そして、無目的にYouTubeを眺めていると、ふと福島原発関連の動画に気がついて見てみた。

いつものように、「嗚呼、危険なのを知りながら放置し続けた自分を含む全国民の罪だわ。観念してガンに怯えて暮らすしかないんだわ。ガンになっても『ただちに死ぬわけではない』のだから。」などと思っていた。しかし。

http://www.youtube.com/watch?v=GjwQHW78Afs&feature=relmfu

あれ?おや?えーーーー!

ラジオとかでは3号機の爆発がこんなに大きかったなんて聞いてないぞ。

水素爆発って聞いていたけど、映像を見る限り水素爆発であそこまで吹き上げるとは思えない。たぶん本当に即発臨界による爆発だろう。

アメリカが退避勧告してた範囲が大袈裟なのは用心深いからだろうと思っていたのだが、これを見る限りでは妥当だったみたい。

隣の建物から配管をつたって水素が入り込むなんてヘンだなと思いはしたが、政府を信用する事にしていたから、非常にがっかりした。

これは、たぶんチェルノブイリを越えている。