2015の振り返り(いまさら)

かなり久々の更新となります。
久しぶりすぎていったいどうしたものかという感じではあります。
更新してなかったのは書くべきネタがなかったからです。
本当になにもなかったのか、2015年のことをゆるゆる振り返りながら考えたいと思います。

2015年4月

希望に満ちて京都大学情報学科数理工学コースに配属されました。
数理工学コースのほうでは歓迎会があり、おいしい料理とともに数理の教員の方々に迎えていただきなんてすばらしいコースなんだと舌鼓を打っておりました。(食い気しかない)
計算機コースのほうでは歓迎会は開かれなかったようで、そこにもにんまりと優越感を感じていました。意地が悪いですね。
今年の数理の歓迎会は会場がカンフォーラ(京大正門を入って左手のレストラン)だったようで、さらに豪華な感じになってるんですかね?
いやあ、素晴らしい!おいしい料理に勝る歓迎はないと思います。*1

あとは必修科目の数理工学実験の登録を完全に忘れてて、担当教員に土下座メールかました苦い経験を思い出しました。
ほんとに後輩の皆さんは履修関係だけはほんとに気を付けるべきですよ!

2015年5月~7月

去年から継続してた朝永量子論ゼミをやったりしただけ。
特筆するべきことはなし。

2015年 8月~9月
夏休み。バイト漬けだった。

2015年 10月〜11月
サークルの定期演奏会に向けて練習してた。

2015年 12月 友達とHackU 2015というYahoo!主催のハッカソンに参加しました。メンバー全員がアプリ開発初心者だったので、完全にチャレンジ(笑)という状態でのスタートでした。本当になんとか発表前日までに完成に持って行けたのは留学生のKくんのおかげだと心から思います。Iくんの作ってくれたデモPVも素晴らしくて、そういう技を持ってる人はすごいなあという一言につきました。持っているというか、やる過程で頑張って勉強してくれたのかもしれませんが。どちらにせよすごいですね。僕はほとんど貢献できなかったので、悔しさが残るところですが、みんなでわいわいアイデアを形にしていく過程はとても楽しかったです。もう少しプログラミングの勉強をしとけば開発面でもっと協力ができたかもしれないので勉強したいとこですね。またこういう機会があればぜひ参加したいです。

2016年 1月
単位を取るために直前に必死こいて勉強したりしてた。
特筆するべきことはなし。

2016年 2月〜3月
バイトをして金を稼いだ。
朝永ゼミからサクライゼミにいつの間にかシフトしていた。(ブラケット記法は素晴らしい)
時折遊んだ。


こうして去年一年を振り返ってみるとなにかしたと言えるのはHackUにでたことぐらいでしたね。

今年はもう少しいろいろ手を出したいところですね。
まずは研究室選ばないと。

*1:今年も計算機コースの歓迎会は開かれない模様です。にんまり。

極座標ラプラシアンを求める公式

座標として \( {\bf x}(q_1,q_2,q_3)\) が入っているとき

\[
\newcommand{\partdif}[2]{\frac{\partial #1}{\partial#2}}
\]

\[\partdif{{\bf x}}{q_1} ,\partdif{{\bf x}}{q_2}, \partdif{{\bf x}}{q_3} \]が

各点で互いに直交しているとき、ラプラシアンを求めるのに次の公式が使えます。




\[
\lambda_1{\bf e}_1=\partdif{{\bf x}}{q_1},\lambda_2{\bf e}_2=\partdif{{\bf x}}{q_2},\lambda_3{\bf e}_3=\partdif{{\bf x}}{q_3}
\]

であるとし

\({\bf e}_1,{\bf e}_2,{\bf e}_3\)が右手系正規直交基底となるように取ると

\[
\Delta f=
\frac{1}{\lambda_1\lambda_2\lambda_3}\left[\partdif{}{q_1}\left(\frac{\lambda_2\lambda_3}{\lambda_1}\partdif{f}{q_1}\right)+\partdif{}{q_2}\left(\frac{\lambda_3\lambda_1}{\lambda_2}\partdif{f}{q_2}\right)+\partdif{}{q_3} \left(\frac{\lambda_1\lambda_2}{\lambda_3}\partdif{f}{q_3}\right)\right]
\]






導出はひとまず置いておいて、実際に使ってみます。

極座標

\[
\begin{cases}
x_1=r\sin \phi \cos \theta\\
x_2=r\sin \phi \sin \theta\\
x_3=r\cos \phi \\
\end{cases}
\]

で導入すると
\[
\begin{cases}
\partdif{{\bf x}}{r}=(\sin \phi \cos \theta,\sin \phi \sin \theta,\cos \phi ) \\
\partdif{{\bf x}}{\phi}=(r\cos \phi \cos \theta,r\cos \phi \sin \theta,-r\sin \phi) \\
\partdif{{\bf x}}{\theta}=(-r\cos \phi \sin \theta,r\cos \phi \cos \theta,0) \\
\end{cases}
\]

\[
\begin{cases}
{\bf e}_1=(\sin \phi \cos \theta,\sin \phi \sin \theta,\cos \phi ) \\
{\bf e}_2=(\cos \phi \cos \theta,\cos \phi \sin \theta,-\sin \phi) \\
{\bf e}_3=(-\sin \theta,\cos \theta,0) \\
\end{cases}
\]

と置くと

\[
\begin{cases}
\lambda_1=1\\
\lambda_2=r\\
\lambda_3=r\sin \phi\\
\end{cases}
\]

と置けばよく、公式に代入すると


\[
\Delta f=
\frac{1}{r^2\sin\phi}\left[\partdif{}{r}\left(r^2 \sin\phi\partdif{f}{r}\right)+\partdif{}{\phi}\left(\sin\phi\partdif{f}{\phi}\right)+\partdif{}{\theta} \left(\frac{1}{\sin\theta}\partdif{f}{\theta}\right)\right]
\]

線形微分方程式の解の次元について

とりあえず、微分方程式の解の存在と一意性の定理を使えば
\(n\)次線形微分方程式の解空間の次元が\(n\)であることはすぐ示せるとわかった。

こんなかんじでやる。

線形微分方程式

\[
\frac{d^{n}y}{dt^{n}}+a_1\frac{d^{n}y}{dt^{n}}+\cdots+a_ny=0
\]

が初期条件

\[
\frac{d^{j}y}{dt^{j}} =b_j(t=t_0)
\]

\[
(j=0,\cdots,n-1)
\]


を満たす場合を考える。

解の存在性と一意性からこの条件を満たす解\(y^\circ \)がただ一つある。

いま解の存在性から

\[
\frac{d^{j}y_i}{dt^{j}}=
\begin{cases}
1&&(i=j)\\
0&&(i\neq j)
\end{cases}
(i,j=0,\cdots,n-1)
\]

となるような線形独立な解の組\(y_1,\cdots,y_n\)

がとれて

\[
y^\dagger=b_1y_1+\cdots+b_ny_n
\]

と置けばこれは

微分方程式と初期条件を満たす解になっている

よって一意性より

\[
y^\circ=y^\dagger
\]

となり、\(y_1,\cdots,y_n\)は解空間を張る。

よって解空間の次元は\(n\)となる。

').size(unit * r, unit * r).after(loop); loopFlag = !loopFlag; } focusCircle.stop().animate(450, '>', 250).opacity(0.5).after(loop); pressedCircle.stop().animate(200).size(unit * radius, unit * radius).opacity(0); } function onBlur() { focusCircle.stop().animate(800).opacity(0).size(unit * radius, unit * radius); } function onPress(event) { var innerRadius = radius - 12; var outerRadius = radius + 4; pressedCircle.center(event.layerX, event.layerY).opacity(0.2).size(unit * innerRadius, unit * innerRadius) .animate(600, '>').size(unit * outerRadius, unit * outerRadius).opacity(0); focusCircle.stop().animate(200).opacity(0).size(unit * radius, unit * radius); } // イベント設定 group.click(onPress); group.touchstart(onFocus); group.touchend(onBlur); group.mouseover(onFocus); group.mouseout(onBlur); />

フィボナッチ素数

フィボナッチ素数とは素数の中で\(F_{n+2}=F_{n+1}+F_{n}\)で定義される数列に含まれているような数のことです。

通常\(F_0=0,F_1=1\)としたもので考えます。



ああ、きたないコードだ。

#include <stdio.h>
#include <math.h>
#define N 50
#define STEP 10
#define REPEAT N/STEP
int prime(unsigned int x);
main()
{
	unsigned int fib[N]={0};
	int i,j,count[REPEAT]={0};
	fib[0]=0;
	fib[1]=1;
	for(i=0;i<N;i++){
		fib[i+2]=fib[i+1]+fib[i];
	}

	for(i=0;i<REPEAT;i++){
		for(j=i*STEP;j<(i+1)*STEP;j++){
			count[i]+=prime(fib[j]);
			if(prime(fib[j])){
				printf("fib[%d]=%u\n",j,fib[j]);
			}
		}
		printf("%d-%d of primes:%d\n",i*STEP,(i+1)*STEP-1,count[i]);
	}

    

}

int prime(unsigned int x){
	unsigned int l=(unsigned int)sqrt(x);
	unsigned int i;
	if (x==0||x==1){
		return 0;
	}
	for(i=2;i<=l;i++){
		if(x%i==0){
			return 0;
		}
	}
    return 1;
}

で、結果はこんな感じ。

fib[3]=2
fib[4]=3
fib[5]=5
fib[7]=13
0-9 of primes:4
fib[11]=89
fib[13]=233
fib[17]=1597
10-19 of primes:3
fib[23]=28657
fib[29]=514229
20-29 of primes:2
30-39 of primes:0
fib[43]=433494437
fib[47]=2971215073
40-49 of primes:2

\(F_0=0,F_1=1\)とした場合、素数であるようなフィボナッチ数の項番号も\(4\)を除いて素数になっているというのも面白いです。