2013/01/07

動画紹介【複雑系・ライフゲーム】

動画サイトで面白い動画を見つけたので紹介します。



複雑系は、多数の系が相互作用することによる様々な挙動を考えます。

人間の脳のはたらきであったり、生態系であったり、電子回路や渋滞、化学、経済など分野を広くまたいでいます。
複雑系は実は生活の至るところに存在するのです。
2012/11/25

Ubuntu12.04のまっさらの状態からtex環境導入まで

私はUbuntu12.04を使っていたのですが、ソフトウェアセンターの進行状況に"検索"という項が出たままになり、キャンセルしても直らず、強制終了や再起動をしても直りませんでした。

ネットで検索しても解決方法はわからず・・・

このままだと、新しいアプリケーションのインストールやアップデートが行えないので、やむなくファイルのバックアップをとり、Ubuntu12.04を再インストールしました。

UbuntuでTeX環境をどうしようかと考えている人もいるかと思うので、自分の中で一番簡単だと落ち着いた方法を紹介します。

1.texliveのインストール
texの基本となる部分を作ります。

Ubuntuソフトウェアセンターを開き、検索窓に「texlive」と打ち込みます。

search_texlive.png

画像で示しているような検索結果が出たら、画像でオレンジに選択されているソフトウェアをインストールします。
(この際ユーザーが設定したパスワードを聞かれます。)

2.platexのインストール
texを日本語に対応させるためのものです。

Ubuntuソフトウェアセンター上の検索窓で「platex」と打ち込みます。
画像で選択しているソフトウェアをインストールします。(奥村晴彦さんによって拡張されたptexのパッケージです)。

search_okumuraplatex.png


3.おすすめTeXエディタ「Texmaker」のインストール
TeXのエディタはたくさんありますが、私は機能が充実していて、デザインもよい「Texmaker」をおすすめします。
設定さえすれば、ワンクリックでPDFファイルを作ることができます。

Ubuntuソフトウェアセンターの検索窓で「texmaker」と打ち込んで出てくるソフトウェアをインストールします。


search_texmaker.png


4.Texmakerの設定
インストールした「Texmaker」ですが、そのままでは日本語を含むTeXファイルをPDFにすることはできません。
上までの操作より少々難しくなりますが、丁寧に説明します。

1.Texmakerの日本語化(省略可・推奨)
現時点でUbuntuソフトウェアセンターからインストールされるTexmakerのバージョンは3.2です。

フォーラムのほうでTexmaker日本語化キット3.4が公開されており、これを用いても正常にメニューなどを日本語化することができました。以下にリンクを示します。

Texmaker 日本語化キット

リンク先で
「texmaker-3.4_ja.zip」をクリックすると、ログインを求められると思います。
ここは面倒くさがらずにアカウントを作成し、ログインしましょう。

ログインした状態でもう一度リンク先の「texmaker-3.4_ja.zip」をクリックするとzipファイルがダウンロードされます。それを適当な場所に展開します(ここでは~/Downloads 以下に展開したとします)。すると「texmaker-3.4_ja」というフォルダが生成されます。

中にある「README.txt」に日本語化の方法が書かれていますが、書き込みの権限などから端末操作を行う必要があるので、詳しく説明します。

端末を開き、そこに打ち込んでいくコマンドを示します。Downloadsとしている部分は展開した場所により変更してください。
~$ cd Downloads/texmaker-3.4_ja #ディレクトリの移動
~$ sudo cp qt_ja.qm /usr/share/texmaker #管理者権限でqt_ja.qmを/usr/share/texmakerにコピー
 #パスワードを聞かれる
~$ sudo cp texmaker_ja.qm /usr/share/texmaker #管理者権限でtexmaker_ja.qmを/usr/share/texmakerにコピー


以上を行い、Texmakerを起動すればメニューが日本語化されているはずです。

2.日本語変換が真っ黒になるのを防ぐ(強く推奨)
通常起動したTexmakerで文書を書いていると、日本語変換をした際、文字が黒く塗りつぶされて候補を表示するので非常に見にくいです。これを解決するため、私は以下に示すシェルを作成し端末から起動しています。
(端末起動に「Guake Terminal」を用いるとF12キーを押すだけで端末が起動されます。便利なのでソフトウェアセンターからインストールしてみてください。)

追記2012/11/26:まず端末上にて「sudo apt-get install ibus-qt4」と打ち込んでibus-qt4を導入しておく必要があります。)

まずhomeディレクトリに「tmk.sh」というファイルを作ります。
その内容は


#!/bin/sh
export QT_IM_MODULE="ibus"
texmaker &


とします。
実行権限の付与、パスを通すなど、端末で行う作業を以下に示します。端末を開いて、

~$ chmod +x tmk.sh #実行権限の付与
~$ mkdir mycommand #自作コマンドの保管場所mycommandの作成(名前は任意)
~$ mv tmk.sh mycommand #tmk.shをmycommandに移す
~$ PATH=~/mycommand:$PATH
~$ export PATH #パスを通す 


と入力すると、端末上でどのディレクトリにいても「tmk.sh」と入力すればTexmakerを変換の際文字が黒く塗りつぶされない状態で起動することができます。
追記2012/12/3:上の設定では、パソコンを起動するたびにPATHを通す作業をしなければならないので面倒です。以下のようにすることで、起動のたびに自動でPATHを設定することができます。

まず、ホームフォルダを開き、メニューから「表示>隠しファイルを表示する」にチェックを入れます。すると、「.bashrc」というファイルがあるので、適当なエディタで開き、一番最後の行に次の一文を書き加えます。
PATH=$PATH:~/mycommand

そして、保存し、端末上で
~$ source ~/.bashrc

と打ち込み変更を反映させます。

以降、パソコンを起動するたびに自動で「mycommand」へのPATHが設定されますので、端末を開き「tmk.sh」と入力するだけで、変換時に黒くならない状態でTexmakerを起動することができます。)

3.Texmakerの設定(本題)
ではTexmakerで日本語texを使用するための具体的な設定を説明します。

Texmakerを起動し、メニューの「オプション>Texmakerの設定」を開きます。すると以下のようなウィンドウが開くと思います。左側から「コマンド」タブを選ぶと表示される部分を編集します。

texmaker_command.png


赤で囲んだ部分が私が手を加えて変更した部分です。図のとおり、文字で書きますと

LaTeX
platex -synctex=1 -interaction=nonstopmode %.tex

Dvipdfm
dvipdfmx -f ptex-ipaex.map %.dvi

metapost
pmpost -interaction=nonstopmode %

のとおりに変更してください。「PDFビューア」の「埋め込み」のチェックは外しておいたほうが個人的には使いやすいです。

次に「クイックビルド」タブを選択すると以下のような画面になるかと思います。

texmaker_quick.png


画像で選んでいるように
LaTeX + dvipdfm +PDFファイルを表示」を選択してください。

最後に、スペルチェックが日本語全体にかかって赤の下線ばかりになるのが鬱陶しいのでスペルチェックを外します。

上までと同様にTexmakerの設定から「エディタ」タブを選択し、画像のカーソルがあるあたりの「インライン」のチェックを外します。これで自動的なスペルチェックが消えます。

texmaker_editor.png


(追記2013/01/17「エディタ」タブの中にある「エディタフォントのエンコーディング」(上から3つめ)の選択をUTF-8からEUC-JPに変更しておかないと簡単コンパイルを行った際に文字化けしました。)

以上でUbuntuにまっさらの状態からTeX環境を構築する手順の説明は終わりです。

TeX文書の作成にはいろいろなサイトや書籍が参考になりますのでご覧ください。

Texmakerにて文書を作成し、コンパイルしてPDFまで表示させるにはF1を押すか、クイックビルド左の矢印をクリックすればOKです。(初回のコンパイル前には文書を保存しておく必要があります。)

日本語TeX文書の例を以下に示します。初めてTeX文書を作られる方は試しにコピーして貼り付け、保存した後にTexmaker上でコンパイルしてみてください。


\documentclass[12pt]{jsarticle}
\usepackage[dvipdfm]{graphicx}
\usepackage{pxfonts}
\pagestyle{empty}

%% 高さの設定
\setlength{\textheight}{\paperheight} % ひとまず紙面を本文領域に
\setlength{\topmargin}{-5.4truemm} % 上の余白を20mm(=1inch-5.4mm)に
\addtolength{\topmargin}{-\headheight} %
\addtolength{\topmargin}{-\headsep} % ヘッダの分だけ本文領域を移動させる
\addtolength{\textheight}{-40truemm} % 下の余白も20mmに
%% 幅の設定
\setlength{\textwidth}{\paperwidth} % ひとまず紙面を本文領域に
\setlength{\oddsidemargin}{-5.4truemm} % 左の余白を20mm(=1inch-5.4mm)に
\setlength{\evensidemargin}{-5.4truemm} %
\addtolength{\textwidth}{-40truemm} % 右の余白も20mmに
\begin{document}


\title {TeXサンプル}
\author{Chaos Lab.}
\date{2012.11.25}
\maketitle

\section{コーシーの積分表示}
\subsection{コーシーの積分表示}
$f(z)$は領域$D$で正則であるとする。$D$内に単一閉曲線$C$があるとき、点$a$が$C$の内部にあるならば次式が成り立つ。
\begin{equation}
f(a)=\frac{1}{2\pi i}\int _C \frac{f(z)}{z-a}dz
\end{equation}
\subsection{練習問題}
次の積分を求めよ。ただし$C$は$|z|=2$とする。
\begin{equation}
\int _C\frac{z^3}{z+i}dz
\end{equation}
\subsubsection*{$<$解答$>$}
点$z=-i$は円$C$の内部にあり\footnote{$\frac{z^3}{z+i}=\frac{z^3}{z-(-i)} 虚数軸上の点(0,-i)は円C:|z|=2の内部にある。$}、
$f(z)=z^3$は$C$の内部で正則であるから、コーシの積分表示から
\begin{eqnarray*}
\frac{1}{2\pi i}\int _C\frac{z^3}{z+i}dz=f(-i)=(-i)^3&=&i\\
よって   \int _C\frac{z^3}{z+i}dz=2\pi i^2&=&\underline{-2\pi}
\end{eqnarray*}

\end{document}

それではまた次の記事で。
2012/11/25

ピタゴラスの木

ピタゴラスの木というフラクタル図形があります。

詳しいことはリンク参照のこととして、私がこの図形を描こうとネットをさまよっていたところ、英語サイトのフォーラムでjavaによるピタゴラスの木を描画するプログラムを見つけました。参照元は申し訳ありませんが忘れてしまいました。以下にjavaのプログラムを載せますが、私が書いたわけではありません。


/*ピタゴラスの木を描くプログラム*/
import java.awt.*;
import java.util.Scanner;
import javax.swing.*;

public class Main extends JFrame {;

public Main(int n) {
setSize(900, 900);
setTitle("Pythagoras tree");
add(new Draw(n));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Give amount of steps: ");
new Main(sc.nextInt());
}
}

class Draw extends JComponent {
private int height = 900;
private int width = 900;
private int steps;

public Draw(int n) {
steps = n;

Dimension d = new Dimension(width, height);
setMinimumSize(d);
setPreferredSize(d);
setMaximumSize(d);
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
g.setColor(Color.black);

int x1, x2, x3, y1, y2, y3;
int base = width/7;

x1 = (width/2)-(base/2);
x2 = (width/2)+(base/2);
x3 = width/2;
y1 = (height-(height/15))-base;
y2 = height-(height/15);
y3 = (height-(height/15))-(base+(base/2));

//paint
g.drawPolygon(new int[]{x1, x1, x2, x2, x1}, new int[]{y1, y2, y2, y1, y1}, 5);

int n1 = steps;
if(--n1 > 0){
g.drawPolygon(new int[] {x1, x3, x2}, new int[] {y1, y3, y1}, 3);
paintMore(n1, g, x1, x3, x2, y1, y3, y1);
paintMore(n1, g, x2, x3, x1, y1, y3, y1);
}
}

public void paintMore(int n1, Graphics g, double x1_1, double x2_1, double x3_1, double y1_1, double y2_1, double y3_1){
double x1, x2, x3, y1, y2, y3;
//counting
x1 = x1_1 + (x2_1-x3_1);
x2 = x2_1 + (x2_1-x3_1);
x3 = ((x2_1 + (x2_1-x3_1)) + ((x2_1-x3_1)/2)) + ((x1_1-x2_1)/2);
y1 = y1_1 + (y2_1-y3_1);
y2 = y2_1 + (y2_1-y3_1);
y3 = ((y1_1 + (y2_1-y3_1)) + ((y2_1-y1_1)/2)) + ((y2_1-y3_1)/2);

//paint
g.setColor(Color.green);
g.drawPolygon(new int[] {(int)x1, (int)x2, (int)x2_1, (int)x1},
new int[] {(int)y1, (int)y2, (int)y2_1, (int)y1}, 4);

g.drawLine((int)x1, (int)y1, (int)x1_1, (int)y1_1);
g.drawLine((int)x2_1, (int)y2_1, (int)x2, (int)y2);
g.drawLine((int)x1, (int)y1, (int)x2, (int)y2);

if(--n1 > 0){
g.drawLine((int)x1, (int)y1, (int)x3, (int)y3);
g.drawLine((int)x2, (int)y2, (int)x3, (int)y3);
paintMore(n1, g, x1, x3, x2, y1, y3, y2);
paintMore(n1, g, x2, x3, x1, y2, y3, y1);
}
}
}



このファイルをコンパイルし実行すると、繰り返し回数を聞かれるので、値を代入するとウィンドウが開きそこにピタゴラスの木が表示されます。以下に様々な繰り返し回数Nに対する出力結果を示します。クリックで拡大してみてください。


pythagoras_step4.png pythagoras_step6.png
N=4                    N=6

pythagoras_step8.png pythagoras_step10.png
N=8                    N=10


pythagoras_step12.pngpythagoras_step15.png
N=12                    N=15



カオスとフラクタルは同時に顔を出すことが多く、カオス入門書などにもほとんどフラクタルについて触れられています。

JAVAの環境が揃っている方はぜひプログラムをコンパイルして実行してみてください。
2012/03/14

チョーサ氏とゴルビツキー氏のカオス

前回、前々回とほぼ同じ体裁の記事となりますがご了承ください。

さて、ここ3回の記事では「繰り返し公式」を用いてカオスを生成し描画する、ということをやってきました。今回で一区切りとします。繰り返し公式を用いてカオスを生成することについての詳しい説明は「チョーサ氏とゴルビツキー氏のカオス」の描画のあとにしたいと思います。

チョーサ氏とゴルビツキー氏の対称性をもつカオス

チョーサ氏とゴルビツキー氏は複素数の繰り返し公式を用いて、対称性のあるカオスを生成する公式を導きました。その公式は以下のようなものです。

複素数  z=x+iy (x,yは実数) とし、mを自然数とする。



ここに、



である。これを用いて、漸化式



を考える。この公式には大雑把に言ってm個の軸を持つ対称なカオスが見られる。
ここではm=3の場合について、カオスを描いてみる。





であるから、実数部xと虚数部yに分けて考えると漸化式は次式のようになる。





ここに、



である。



この公式のm=3の場合の繰り返し計算を行うc言語のプログラム(chosa.c)のソースは以下のようになります。


/*チョーサ氏とゴルビツキー氏の対称性をもつカオスを描く*/
#include<stdio.h>
#include<math.h>

int main(void){

double x0=0.1, y0=0.1, x1, y1,A ;//変数(x0とy0はともに0ではいけない)
double a, b,c,d ;//パラメータ
int i ;
FILE *fp;

if ((fp = fopen("chosa.dat", "w")) == NULL) {
printf("file open error!!\n");//chosa.datというファイルに出力する

}else{

printf("a > ");
scanf("%lf",&a);
printf("b > ");
scanf("%lf",&b);
printf("c > ");
scanf("%lf",&c);
printf("d > ");
scanf("%lf",&d);//端末からのパラメータa,b,c,dの入力

for(i=0;i<50000;i++){
A=a*(x0*x0+y0*y0)+b*x0*(x0*x0-3.0*y0*y0)+c;
x1=A*x0+d*(x0*x0-y0*y0);
y1=A*y0-2.0*d*x0*y0; //数式部分

fprintf(fp,"%lf %lf\n",x1,y1);//現在のx,yを出力

x0=x1;
y0=y1;
}
}
fclose(fp);


return 0;
}



このプログラムを実行したあと、gnuplotで以下のように入力します。

$ gnuplot
gnuplot> set size square
gnuplot> set xrange [-2.0:2.0]
gnuplot> set yrenge [-2.0:2.0]
gnuplot> set term jpeg
gnuplot> set output "chosa.jpeg"
gnuplot> plot "chosa.dat" with points pt 5 ps 0 lt 3

xとyの範囲をxrange[-2.0:2.0]などと指定しているのは、出来上がった図が綺麗に対称に見えるようにするためです。適宜変更して調整します。(ちなみに最後の行の [lt 3]とある部分の数字を変えることで、図の色を決めることができます。環境によって色々違う模様)

以上よりできあがった図はこちら。クリックで拡大できます。

chosa1.jpegchosa2.jpeg
a=-1.0,b=0.05,c=2.275,d=-0.5      a=1.0,b=0.0,c=-2.25,d=0.2

chosa3.jpegchosa4.jpeg
a=1.0,b=0.0,c=-1.9,d=0.4        a=-1.0,b=0.1,c=1.6,d=-0.8

どの図もおおむね3つの軸に対称な形をした美しいカオスとなっています。


さて、ここ3回の記事で繰り返し公式によるカオスを見てきました。生成されたカオスを図に表してみるといずれもとても美しく、ただ法則性を指定してパソコンに描かせただけのようにも思えます。そもそもカオスとはいったい何なのか?これについて、私が参考とした「CによるカオスCG サイエンス社 川上博/上田哲史」の説明を引用することにします。

カオスは、過去およそ20年くらいの間(この本が書かれたのは1994年)、様々な分野で興味がもたれ研究されてきた。しかしまだまだ未知の部分も多い。そもそも「カオス」という言葉自身、まだ定まった定義ができていないのが現状である。

●カオスとは
この本では、コンピュータにより繰り返し公式を用いて点列を生成し、次の2つの点が確認できるとき、得られた点列をカオスとみなした。

(1) 周期倍分岐列の連鎖があり、その極限を過ぎた値にパラメータが選ばれていること。

(2) 点列は平面の有界領域を落ち着くことなく彷徨していること。
この性質を持つ点列の集合は、現在もっとも自然にカオスとして受け入れられている。欲をいえば、

(3) 点列の運動が不安定であること。すなわち、運動が初期値の微小な変化に伴って鋭敏に変化すること。
を確認しなけらばいけない。これにはエノン写像の実験ですこし述べた(ブログでは紹介していない)リヤプノフ指数を計算するとよい。本文では、(2)の性質を観察することで(3)の性質をもつとみなしてごまかしてしまった。

点列の動きがランダムに見えることは、カオスの中にうまっている周期点に出入りする2本の曲線の絡み具合によって生じている。数値計算の中に含まれる打ち切り誤差や丸め誤差は、この絡みによって、特定の方向に助長される。これが初期値の近い2つの点列を長時間後には別々に行動させる原因となっている。



枠内で青字で示した用語の説明をします。

周期倍分岐
過去の記事:ロジスティック写像の分岐図で示した図があります。これは横軸にパラメータaの値をとっているのですが、aの増加にともないxの収束先の周期点の周期が1,2,4,8・・・のように増加していきます(図で言うと、枝が1,2,4本・・・と増えて行っている)。このように周期点の周期が倍々に増えていく現象を周期倍分岐と呼びます。図ではa=3.5699以降周期が無限大となり、カオスが生まれています。

bunkizu.jpeg
ロジスティック写像の分岐図


リヤプノフ指数
力学系においてごく接近した軌道が離れていく度合いを表す量のことです。(Wikipedia参照)
詳しい式は少々複雑なので、今後の記事で取り上げることにします。この指数が負の時、軌道は安定な固定点または周期点をとり、0のとき準周期点、正のときカオス点列をとります。

周期点
ある点が時間とともに2点を行ったり来たりする軌道をとる場合、これを安定な2周期点と呼びます。周期的な運動がとる点のことです。運動がカオス状態の場合、周期点が無限にあることになります。


難しい内容となってきました。結論的にカオスって何の役に立つの?と思うかもしれません。しかし、カオスは自然のランダムさを生み出しているのが実は簡潔な法則だったということを示す、画期的な発見なのです。

今回の記事はここまでです。次回以降、カオス理論の用語の説明、あるいはカオスに携わった人の紹介など考えています。



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。