goosle's blog

物理・アニメ・バドミントンの内容が多いかも.最近は映画も.

CheckiO

最近は専ら自作のHP(Suguru NAKATA/ 中田 勝)で日記を更新していたのでこちらは相当お久しぶりです。去年このブログを見て院試勉強を参考にして下さったという方にたまたまお会いし、なんでも記録しておくものだなぁと思った次第です。

趣味でPythonを使って何かGUIアプリケーションが作れないか模索していたのですが、あまりにも基礎を学んでいなさ過ぎな気がしてきました。三角関数もろくに知らない状態で特殊関数を扱ってその応用を考えようとしているかのごとく。単語を知らなくてもググれば英文は読めるかもしれないが、それでは読むだけで終わってしまいます。
ただ、教科書を最初から読んでも、自明なところは書きもせず、よくわからないところは放置してしまうのが世の常。そこで何か良い問題集はないものかと思って探していると、Pythonのオンラインゲームを見つけました。
py.checkio.org
とりあえずElementary レベルから始めているのですが、せっかくなので覚えたメソッドなどは、(しばらく放置して広告ページと化していた)このブログにメモしようと思いました。日曜プログラマ見習いなのでいつまで続くかわかりませんけれども、しばらく書き連ねてみたいと思います。

str()

intをstrに変換できる。

.capitalize()

stringの先頭の文字を大文字に、他の文字を小文字にする。capitarize()ではない()。

.replace("a", "b")

string内のaをbに置換する。bを空白にしておけば削除するメソッドとしても使える。

行列演算(Igor)

動機

2次元wave(数学的には行列)の足し算がしたい。

make /n=(2,2)/D/O w1
make /n=(2,2)/D/O w2
make /n=(2,2)/D/O w3

と、2次元waveをいくつか作って、w1、w2に適当に値を入れて、1次元waveと同じノリで

w3=w1+w2

で、各成分足してくれることを期待してプログラムを書いたのに、w3が計算されない。

解決法

matrixop コマンドを使えば良い。

matrixop/o w3=w1+w2

ちなみにこの場合make でw3を作っていなくても、ここで2次元waveが作られるらしい。
足し算にかかわらず、行列演算(例えば典型的には掛け算など)はmatrixopコマンドを使えば良いらしい。
詳しくは、help browserの[Help Topics] >> [Matrix Math] >> [MatrixOp Operation] >> [MatrixOp]を参照。ぼくもよく知らないような数学演算がいっぱい載ってる。

グラフのいろいろ(Igor)

グラフに x=定数 のグラフを足したかったのだが、なかなかお目当ての解決法が見つからなかった。しかし、その間にどんどん周辺知識が増えていき、グラフが洗練されていった。
グラフを書くにあたって、大変役に立ったページのURLを(絶対に忘れるので明日以降の自分のために)貼っておく。

復数のグラフを並べて表示

復数のグラフを並べて表示したいとき、オフセットをかければ良いが、y軸のオーダーが違いすぎる場合はオフセットをかけてもみづらい。どれかひとつのグラフのオーダーに合わせるように定数倍してオフセットをかけることも考えられるが、以下のページで紹介されているやり方が綺麗で見やすい。
Igorで複数軸のグラフ作成 | kmasaru

x=定数 を表示させる

特徴的なxの値を目立たせたり、オフセットで並べたグラフを貫くようにy軸に平行な線をひきたいときがある。y=定数 のグラフなら描いているグラフと同じ大きさのwaveをつくり、すべてを目的の定数にすればよいのだが、x=定数 のグラフになると、途端に難しい。
annex: Igor Pro lecture No. 28
このページで紹介されているやり方を参考に、大きさ2のwaveを用意してそれをy軸に対してプロットすればx=定数 のグラフを書き足せる。y軸に対してプロットする、というのが全く思いつかなかった。

三重積分(デカルト座標)(Igor Pro)

物理だと3次元の積分をよくするので、helpのintegrate1dの二重積分を参考に三重積分するプログラムを書いた。

// 3D integration in DESCARTES unit

Function Do3DInt(xmin,xmax,ymin,ymax,zmin,zmax)
	Variable xmin,xmax,ymin,ymax,zmin,zmax
	
	Variable/G globalXmin=xmin
	Variable/G globalXmax=xmax
	Variable/G globalYmin=ymin
	Variable/G globalYmax=ymax
	Variable/G globalY
	Variable/G globalZ
			
	return  Integrate1d(userFunction3,zmin,zmax,1)	
End

Function userFunction1(inX)
	Variable inX
	
	NVAR globalY=globalY
	nvar globalZ=globalZ
	
	return hoge(inX,globalY,globalZ)
End

Function userFunction2(inY)
	Variable inY
	
	NVAR globalY=globalY
	globalY=inY
	nvar globalZ=globalZ
	NVAR globalXmin=globalXmin
	NVAR globalXmax=globalXmax
	
	return Integrate1D(userFunction1,globalXmin,globalXmax,1)
End

function userFunction3(inZ)
   variable inZ
   
   nvar globalZ=globalZ
   globalZ=inZ
   nvar globalymin=globalymin
   nvar globalymax=globalymax
   
   return integrate1d(userfunction2,globalymin,globalymax,1)
end

function hoge(inx,iny,inZ)
 variable inx
 variable iny
 variable inz

 return (inx*iny*inz)// chose function f(x,y,z) you like 
end

簡単な関数でいくつか検算したがあっていると思う。

現状ではhoge()のreturnに求めたい被積分関数を手打ちで入れるしかないので、任意の関数で使えるようなより汎用性の高いものに仕上げたい。

極座標ver.も作ったがうまく動作しなかった。(1のr=0から1までの積分が4π/3にならなかった。)

5・6・7月に観た映画

最近このシリーズごぶさたでした。

5月

4「STAR WARS/フォースの覚醒」
13「マイ・インターン
15「ブラックスワン*1
26「ビバリーヒルズコップ」

6月

2「ビバリーヒルズコップ2」
4「こちら葛飾区亀有公園前派出所 THE MOVIE」
10「ビバリーヒルズコップ3」
23「レイヤーケーキ」

7月

9「One Day」
14「ニューヨークの恋人
16「時をかける少女*2
17「インサイド・マン
23「キャッチ・ミー・イフ・ユー・キャン*3

アマゾンプライム会員になっていたことに気付いておらず、随分とTSUTAYANetflixと重複していたことに気がつきました。
なので最近はアマゾンプライムの無料ビデオで見ています。
ドラマも少しずつ見るようになりました。

*1:途中で見てられなくなった

*2:上野公園の野外上映

*3:3回目の視聴