HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > 計算物理学

google API を用いてルジャンドル陪関数を描画する

文責:遠藤 理平 (2011年12月28日) カテゴリ:TIPS 集(99)計算物理学(127)

ルジャンドル陪関数の漸化式と規格化」で紹介した ルジャンドル陪関数P_l^{\,m}の内、m=0\, , \, l=0\sim10の場合をgoogle APIを用いて描画します。 m=0の場合、ルジャンドル陪関数はxに関する多項式となり、一般にルジャンドル多項式と呼ばれます。

※google API の使い方は、「Google API で数式とグラフを書く(TEX + Google Chart API + Google Visualization API)」をご覧ください。

Javascript ソース

google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawVisualization);

var l_max=10, m=0;

function Factorial1(n)
{
  if( n<=0 ) return (1.0);
  var F = 1.0;
  for(var i=n; i>=2; i--){
    F *= i;    
  }
  return (F);
}
function Factorial2(n)
{
  if( n<=0 ) return (1.0);
  var F = 1.0;
  for(var i=n; i>=2; i=i-2){
    F *= i;    
  }
  return (F);
}
function Legendre (m, l, x ) {
  var mm = Math.abs(m);
  if( mm>l )  return (0);
  var r0, r1, r2;
    r0 = 0.0;
    r1 = Math.pow(1.0-x*x, mm/2.0) * Factorial2(2*mm-1);
    if( mm==l && m>=0) return (r1);
    if( mm==l && m<0)  return (r1 * Math.pow(-1.0,mm) * Factorial1(l-mm)/Factorial1(l+mm)) ;
    for(var ll = mm+1; ll<=l; ll++ ){
      r2 = ((2.0*ll-1.0)*x*r1 - (ll+mm-1.0)*r0)/(ll-mm);
      r0 = r1;
      r1 = r2;
    }
  if(m>=0) return (r2);
  else return (r2 * Math.pow(-1.0,mm) * Factorial1(l-mm)/Factorial1(l+mm)) ;
}
function round(n, x) {
  return( Math.round(x*Math.pow(10, n))/Math.pow(10, n));
}

var keta = 3;
function drawVisualization() {
  var data = new google.visualization.DataTable();
  data.addColumn('number', 'X');
  for(var l=0; l<=l_max; l++){
    data.addColumn('number', 'm='+m+', l='+l);
  }
  var x;
  var y;
  var n_max = 1000;
  var x_min = -1;
  var x_max = 1;
  data.addRows(n_max+2);
  for (var n =0; n<=n_max ; n++){
    /*x = x_min + (x_max-x_min) * n /n_max;*/
    x = Math.cos(Math.PI*n/n_max);
    data.setValue(n, 0, round(keta, x));
    for (var l=0; l<=l_max ; l++){
      data.setValue(n, l+1, round(keta, Legendre(m,l,x)));
    }
  }
  var chart = new google.visualization.ScatterChart(document.getElementById('drow2'));
  var options = {
    title: 'ルジャンドル陪関数',
    strictFirstColumnType: true,
    width: 600, height: 600,
    pointSize: 1,
    vAxis: {title: "P",  titleTextStyle: {color: "black"}},
    hAxis: {title: "X", minValue: -1, maxValue: 1, titleTextStyle: {color: "black"}}
  };
  chart.draw(data, options);
}


▲このページのトップNPO法人 natural science トップ

関連記事

TIPS 集

計算物理学







▲このページのトップNPO法人 natural science トップ