WANtaroHP (f90: Julia2)



Julia 集合の定義の一般化

Julia 集合は,以下の漸化式で定義される複素数列 $\{z_n\}$ において,与えられた複素数 $c$ に対し, $n\rightarrow\infty$ の極限において無限大に発散しないという条件を満たす複素数 $z_0$ が作る集合として定義される.

\begin{equation} z_{n+1}=z_n{}^2+c \end{equation}

ここで上式の指数部を一般化し,以下のように表現する.

\begin{equation} z_{n+1}=z_n{}^s+c \end{equation}

ここで, $s=s_r+i\cdot s_i$$c=a+i\cdot b$ として, $(s_r,s_i)$ および $(a,b)$ を既知の値として入力し, $z_0$ の値の変化に伴う収束性を評価する.

数値計算において複素数を扱う必要があるが,ここでは入力値は全て実数部と虚数部に分けて計算するが,収束計算では Fortran の複素数変数を用い,プログラムの記載を省力化している. これは,複素数を実数部と虚数部に分けて別途計算する場合,極座標変換が必要となり,煩雑な角度計算が必要となることを避けるためである.

プログラム

Programs

FilenameDescription
a_f90gmt.txt実行用シェルスクリプト
f90_julia2_gmt.f90Julia集合描画

Fortranプログラム実行用コマンド

./f90_julia2_gmt jw ih x0 y0 rr sr si a b filename
jw 作図の水平方向分割数(整数値)
ih 作図の鉛直方向分割数(jwと同じ整数値)
x0 作図の中心座標のx値(実数)
y0 作図の中心座標のy値(実数)
rr 作図半径(実数)
sr 指数実数部 sr の値(実数入力)
si 指数虚数部 si の値(実数入力)
a 定数実数部 a の値(実数入力)
b 定数虚数部 b の値(実数入力)
filename出力画像ファイル名(jpg)


描画事例

実行用スクリプト事例

以下の事例では,画像サイズを 800 x 800 とし,作図範囲は,原点 (0, 0) を中心として,横軸 (-2, 2),縦軸 (-2, 2)としている. 画像サイズについては,プログラム内で入力値に1を加えて画像サイズを確定しているため,ここでの入力値は 799 x 799 としている.

色指定は,下のスクリプト中,echo で生成している GMT のカラーパレット(ファイル:_col.cpt )により行っている. この事例では,色相環の色順に則り,12 色を定義し,発散確定までの繰り返し数を 12 で除して余りの値の対応させて色を割り当てている.

gfortran -o f90_julia2_gmt f90_julia2_gmt.f90

cat << EOT > _col.cpt
0  255   0   0    1  255   0   0
1  255 125   0    2  255 125   0
2  255 255   0    3  255 255   0
3  125 255   0    4  125 255   0
4    0 255   0    5    0 255   0
5    0 255 125    6    0 255 125
6    0 255 255    7    0 255 255
7    0 125 255    8    0 125 255
8    0   0 255    9    0   0 255
9  125   0 255    10 125   0 255
10 255   0 255    11 255   0 255
11 255   0 125    12 255   0 125
F   0   0   0
B   0   0   0
EOT
./f90_julia2_gmt 799 799 0 0 2  1.0 0.0 0.50 0.00 fig_julia2_s10_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  1.1 0.0 0.50 0.00 fig_julia2_s11_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  1.2 0.0 0.50 0.00 fig_julia2_s12_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  1.3 0.0 0.50 0.00 fig_julia2_s13_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  1.4 0.0 0.50 0.00 fig_julia2_s14_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  1.5 0.0 0.50 0.00 fig_julia2_s15_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  1.6 0.0 0.50 0.00 fig_julia2_s16_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  1.7 0.0 0.50 0.00 fig_julia2_s17_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  1.8 0.0 0.50 0.00 fig_julia2_s18_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  1.9 0.0 0.50 0.00 fig_julia2_s19_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  2.0 0.0 0.50 0.00 fig_julia2_s20_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  2.1 0.0 0.50 0.00 fig_julia2_s21_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  2.2 0.0 0.50 0.00 fig_julia2_s22_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  2.3 0.0 0.50 0.00 fig_julia2_s23_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  2.4 0.0 0.50 0.00 fig_julia2_s24_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  2.5 0.0 0.50 0.00 fig_julia2_s25_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  2.6 0.0 0.50 0.00 fig_julia2_s26_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  2.7 0.0 0.50 0.00 fig_julia2_s27_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  2.8 0.0 0.50 0.00 fig_julia2_s28_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  2.9 0.0 0.50 0.00 fig_julia2_s29_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  3.0 0.0 0.50 0.00 fig_julia2_s30_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  3.3 0.0 0.50 0.00 fig_julia2_s33_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  3.5 0.0 0.50 0.00 fig_julia2_s35_0799p050_000.jpg
./f90_julia2_gmt 799 799 0 0 2  4.0 0.0 0.50 0.00 fig_julia2_s40_0799p050_000.jpg

描画事例

以下に (a, b) = (0.5, 0)とし,指数部 s の値を (1.0, 0) から (4.0, 0) まで変化させた場合の描画事例を示す. 卵の中に細胞が誕生し,分裂していくような雰囲気の画像となっている. 描画範囲は全画像同一で,横軸 (-2, 2),縦軸 (-2, 2)である.

s=(1.0, 0)
png
s=(1.1, 0)
png
s=(1.2, 0)
png
s=(1.3, 0)
png
s=(1.4, 0)
png
s=(1.5, 0)
png
s=(1.6, 0)
png
s=(1.7, 0)
png
s=(1.8, 0)
png
s=(1.9, 0)
png
s=(2.0, 0)
png
s=(2.1, 0)
png
s=(2.2, 0)
png
s=(2.3, 0)
png
s=(2.4, 0)
png
s=(2.5, 0)
png
s=(2.6, 0)
png
s=(2.7, 0)
png
s=(2.8, 0)
png
s=(2.9, 0)
png
s=(3.0, 0)
png
s=(3.3, 0)
png
s=(3.5, 0)
png
s=(4.0, 0)
png


inserted by FC2 system