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); }