google API を用いてルジャンドル陪関数を描画する
「ルジャンドル陪関数の漸化式と規格化」で紹介した
ルジャンドル陪関数の内、
の場合をgoogle APIを用いて描画します。
の場合、ルジャンドル陪関数は
に関する多項式となり、一般にルジャンドル多項式と呼ばれます。
※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);
}



