Shadow Academy トップ > 我流・物理数学 > 非線形物理学(カオス理論) > グモウスキー・ミラの写像


グモウスキー・ミラの写像

a ex). a=0.008
b ex). b=0.05
μ ex). μ=-0.8, 0.003, 0.82, …etc.
初期値:x0 ex). x0=0.1
初期値:y0 ex). y0=0
データ出力形式:

データ出力欄:



解説

「グモウスキー・ミラの写像」の式は、次式で与えられる。
xt+1yta(1-byt2ytGxt
yt+1=-xtGxt+1

  2(1-μxt2
Gxt)=μxt
  1+xt2




スクリプトプログラムの使い方

各テキストフィールドに数値を入力後、「計算する」ボタンを押すと、
新しいページテキストエリアにデータが生成されるので、そこで、「全て選択」して、
テキストエディタを起動して、ファイルにコピーペーストし、名前を付けて保存する。
ここでは、Cドライブ以下のtempフォルダに「gumowskimira.dat」という名前で保存する。
これをグラフ作成ツール「wgnuplot」を用いて、グラフ化するには、
wgnuplotを起動して、以下のコマンドを入力する。

横軸をx、縦軸をyとして出力

set terminal png
set output 'c:\temp\gumowskimira.png'
plot 'c:\temp\gumowskimira.dat' using 1:2 with dots
exit




ソースコード(新版)

gumowskimira.html

<form><!-- getElementByIdを使用する為、name属性を指定しない -->
<table border="1" style="margin-left:auto;margin-right:auto;text-align:center;">
  <tr>
    <td style="text-align:right"><i>a</i>=</td>
    <td style="text-align:left"><input type="text" id="a" value="0.008"></td>
    <td style="text-align:left;">ex). <i>a</i>=0.008</td>
  </tr>
  <tr>
    <td style="text-align:right"><i>b</i>=</td>
    <td style="text-align:left"><input type="text" id="b" value="0.05"></td>
    <td style="text-align:left;">ex). <i>b</i>=0.05</td>
  </tr>
  <tr>
    <td style="text-align:right"><i>&mu;</i>=</td>
    <td style="text-align:left"><input type="text" id="mu" value="-0.8"></td>
    <td style="text-align:left;">ex). <i>&mu;</i>=-0.8, 0.003, 0.82, …etc.</td>
  </tr>
  <tr>
    <td style="text-align:right">初期値:<i>x</i><sub>0</sub>=</td>
    <td style="text-align:left"><input type="text" id="x0" value="0.1"></td>
    <td style="text-align:left;">ex). <i>x</i><sub>0</sub>=0.1</td>
  </tr>
  <tr>
    <td style="text-align:right">初期値:<i>y</i><sub>0</sub>=</td>
    <td style="text-align:left"><input type="text" id="y0" value="0"></td>
    <td style="text-align:left;">ex). <i>y</i><sub>0</sub>=0</td>
  </tr>
  <tr>
    <td style="text-align:right;">データ出力形式:</td>
    <td style="text-align:left;" colspan="2">
      <label for="csv"><input type="radio" name="separator" id="csv">CSV(半角コンマ区切り)</label><br>
      <label for="ssv"><input type="radio" name="separator" id="ssv" checked>SSV(半角スペース区切り)</label><br>
      <input type="button" value="計算する" onclick="gmcalc()" style="width:200px;height:40px;"></td>
  </tr>
  <tr>
    <td style="text-align:right;">データ出力欄:</td>
    <td style="text-align:left;" colspan="2"><textarea id="data" cols="50" rows="20"></textarea></td>
  </tr>
</table>
</form>

gumowskimira.js

var gmcalc = function(){
  var t; // ループ変数
  var x = new Array(10001); // 10001個の値(x[0],...,x[10000])を格納する配列xを宣言
  var G = new Array(10001); // 10001個の値(G[0],...,G[10000])を格納する配列Gを宣言
  var y = new Array(10001); // 10001個の値(y[0],...,y[10000])を格納する配列yを宣言

  var a = parseFloat(document.getElementById("a").value);
  var b = parseFloat(document.getElementById("b").value);
  var mu = parseFloat(document.getElementById("mu").value);

  var data = ""; // データを表す変数を空の初期値と共に宣言
  var separator = ""; // データの区切り文字

  // データの区切り文字の種類を選択して取得
  if(document.getElementById("csv").checked == true){ separator=","; } // 半角コンマ区切り
  if(document.getElementById("ssv").checked == true){ separator=" "; } // 半角スペース区切り

  x[0] = parseFloat(document.getElementById("x0").value); // xの初期値
  G[0] = mu * x[0] + 2 * (1 - mu) * x[0] * x[0] / (1 + x[0] * x[0]);
  y[0] = parseFloat(document.getElementById("y0").value); // yの初期値

  data = x[0] + separator + y[0] + separator + G[0];

  for(t=0;t<10000;++t){
    x[t+1] = y[t] + a * (1 - b * y[t] * y[t]) * y[t] + G[t];
    G[t+1] = mu * x[t+1] + 2 * (1 - mu) * x[t+1] * x[t+1] / (1 + x[t+1] * x[t+1]);
    y[t+1] = -x[t] + G[t+1];
    data += "\n" + x[t] + separator + y[t] + separator + G[t];
  }

  document.getElementById("data").value = data; // テキストエリアへ出力する
};



ソースコード(旧版)

gumowskimira.html

<form name="gmform">
<table border="1" style="margin-left:auto;margin-right:auto;text-align:center;">
<tr>
<td style="text-align:right"><i>a</i>=</td>
<td style="text-align:left"><input type="text" name="a" value="0.008"></td>
<td style="text-align:left;">ex). <i>a</i>=0.008</td>
</tr>
<tr>
<td style="text-align:right"><i>b</i>=</td>
<td style="text-align:left"><input type="text" name="b" value="0.05"></td>
<td style="text-align:left;">ex). <i>b</i>=0.05</td>
</tr>
<tr>
<td style="text-align:right"><i>&mu;</i>=</td>
<td style="text-align:left"><input type="text" name="mu" value="-0.8"></td>
<td style="text-align:left;">ex). <i>&mu;</i>=-0.8, 0.003, 0.82, …etc.</td>
</tr>
<tr>
<td style="text-align:right">初期値:<i>x</i><sub>0</sub>=</td>
<td style="text-align:left"><input type="text" name="x0" value="0.1"></td>
<td style="text-align:left;">ex). <i>x</i><sub>0</sub>=0.1</td>
</tr>
<tr>
<td style="text-align:right">初期値:<i>y</i><sub>0</sub>=</td>
<td style="text-align:left"><input type="text" name="y0" value="0"></td>
<td style="text-align:left;">ex). <i>y</i><sub>0</sub>=0</td>
</tr>
</table>
<input type="button" value="計算する" onClick="gmcalc()">
</form>

gumowskimira.js

function gmcalc(){
  var t,a,b,mu; /* ループ変数と各変数 */
  var x=new Array(10001); /* 10001個の値(x[0],...,x[10000])を格納する配列xを宣言 */
  var G=new Array(10001); /* 10001個の値(G[0],...,G[10000])を格納する配列Gを宣言 */
  var y=new Array(10001); /* 10001個の値(y[0],...,y[10000])を格納する配列yを宣言 */
  a=parseFloat(document.gmform.a.value);
  b=parseFloat(document.gmform.b.value);
  mu=parseFloat(document.gmform.mu.value);
  x[0]=parseFloat(document.gmform.x0.value); /* xの初期値 */
  G[0]=mu*x[0]+2*(1-mu)*x[0]*x[0]/(1+x[0]*x[0]);
  y[0]=parseFloat(document.gmform.y0.value); /* yの初期値 */

  document.writeln("<html>");
  document.writeln("<head>");
  document.writeln("<title>グモウスキー・ミラの写像</title>");
  document.writeln("</head>");
  document.writeln("<body bgcolor='#ffd700' text='#000000'>");

  document.writeln("<pre>");
  for(t=0;t<10000;++t){
    x[t+1]=y[t]+a*(1-b*y[t]*y[t])*y[t]+G[t];
    G[t+1]=mu*x[t+1]+2*(1-mu)*x[t+1]*x[t+1]/(1+x[t+1]*x[t+1]);
    y[t+1]=-x[t]+G[t+1];
    document.writeln(x[t]," ",y[t]," ",G[t]);
  }
  document.writeln("</pre>");

  document.writeln("</body>");
  document.write("</html>");
}



参考文献

  1. 「カオスとフラクタル Excelで体験」(オーム社、1999年)



Shadow Academy トップへ戻る

inserted by FC2 system