{ "cells": [ { "cell_type": "markdown", "id": "f85c94f9-b8c8-4fbe-8c29-765917ee2ea6", "metadata": {}, "source": [ "#### B.C.Berndt: Number Theory in the Spirit of Ramanujanより\n", "\n", "$0\\lt x \\lt 1$の範囲で関数$F(x)$を\n", "$$F(x)=exp\\left(-\\pi\\,\\frac{{}_2 F_1\\left(\\frac{1}{2},\\frac{1}{2};1;1-x\\right)}{{}_2 F_1\\left(\\frac{1}{2},\\frac{1}{2};1;x\\right)}\\right)$$\n", "と定義しました(超幾何関数もFですが、引数の形が異なるので区別できると思います)。\n", "
\n", "
\n", "**Chapter 5 Theorem 5.2.5**
\n", "$$F\\left(1-\\frac{\\varphi\\left(-q\\right)^4}{\\varphi\\left(q\\right)^4}\\right)=q$$\n", "\n", "これはまた美しい式ですね。ラマヌジャンのテータ関数$\\varphi(q)$の式$1-\\frac{\\varphi\\left(-q\\right)^4}{\\varphi\\left(q\\right)^4}$と超幾何関数の式$F(x)=exp\\left(-\\pi\\,\\frac{{}_2 F_1\\left(\\frac{1}{2},\\frac{1}{2};1;1-x\\right)}{{}_2 F_1\\left(\\frac{1}{2},\\frac{1}{2};1;x\\right)}\\right)$が逆関数の関係にあるということです。\n", "\n", "これはグラフを描いて本当にそうなっていることを確認したいです。このような一見複雑な式もMaximaを使えばほぼそのまま数値計算できますからやってみましょう。まず$F(x), \\varphi(x)$、そして$g(q)=F\\left(1-\\frac{\\varphi\\left(-q\\right)^4}{\\varphi\\left(q\\right)^4}\\right)$をMaximaで定義します。" ] }, { "cell_type": "code", "execution_count": 1, "id": "3711c2d2-6062-41d7-8031-9b38301acee4", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{0}$}F\\left(x\\right):=\\exp \\left(\\frac{-\\pi\\,{\\it hypergeometric}\\left(\\left[ \\frac{1}{2} , \\frac{1}{2} \\right] , \\left[ 1 \\right] , 1-x\\right)}{{\\it hypergeometric}\\left(\\left[ \\frac{1}{2} , \\frac{1}{2} \\right] , \\left[ 1 \\right] , x\\right)}\\right)\\]" ], "text/plain": [ " 1 1\n", " - %pi hypergeometric([-, -], [1], 1 - x)\n", " 2 2\n", "(%o0) F(x) := exp(----------------------------------------)\n", " 1 1\n", " hypergeometric([-, -], [1], x)\n", " 2 2" ], "text/x-maxima": [ "F(x):=exp(\n", " (-%pi*hypergeometric([1/2,1/2],[1],1-x))/hypergeometric([1/2,1/2],[1],x))" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "F(x):=exp(-%pi*hypergeometric([1/2,1/2],[1],1-x)/hypergeometric([1/2,1/2],[1],x));" ] }, { "cell_type": "code", "execution_count": 2, "id": "416562e2-bac8-42b1-843f-1b0de437940a", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{1}$}\\varphi\\left(x\\right):={\\it sum}\\left(x^{n^2} , n , -10 , 10\\right)\\]" ], "text/plain": [ " 2\n", " n\n", "(%o1) phi(x) := sum(x , n, - 10, 10)" ], "text/x-maxima": [ "phi(x):=sum(x^n^2,n,-10,10)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "phi(x):=sum(x^(n^2),n,-10,10);" ] }, { "cell_type": "code", "execution_count": 3, "id": "285b5da2-5a07-4a9f-89d0-f1f79932341c", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{2}$}g\\left(q\\right):=F\\left(1-\\frac{\\varphi\\left(-q\\right)^4}{\\varphi\\left(q\\right)^4}\\right)\\]" ], "text/plain": [ " 4\n", " phi (- q)\n", "(%o2) g(q) := F(1 - ---------)\n", " 4\n", " phi (q)" ], "text/x-maxima": [ "g(q):=F(1-phi(-q)^4/phi(q)^4)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g(q):=F(1-phi(-q)^4/phi(q)^4);" ] }, { "cell_type": "markdown", "id": "c54a5100-1c02-490a-bdec-dc2318f9bd7a", "metadata": {}, "source": [ "$F(x)$は$0 \\le x \\le 1$で定義されますが、Maximaの超幾何関数の数値計算アルゴリズムの制約を受けてしまい、実際には$0.011\\le x \\le 0.99$くらいでしか計算できません。その区間でグラフを描くと以下のようになります。" ] }, { "cell_type": "code", "execution_count": 4, "id": "edc9df1d-c124-4d28-b5c4-e12929df7371", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "Gnuplot\n", "Produced by GNUPLOT 5.4 patchlevel 2 \n", "\n", "\n", "\n", "\n", "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t \n", "\t \n", "\t\n", "\t\n", "\t \n", "\t \n", "\t\n", "\n", "\n", "\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\t\t%e^-((%pi*hypergeometric([1/2,1/2],[1],1-x))/hypergeometric([1/2,1/2],[1],x))\n", "\t\n", "\n", "\n", "\t\n", "\t\tx\n", "\t\n", "\n", "\n", "\n", "\tgnuplot_plot_1\n", "\n", "\t\n", "\t\n", "\n", "\t\t\n", "\t\t 0\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.05\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.1\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.15\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.2\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.25\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.3\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.1\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.2\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.3\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.4\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.5\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.6\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.7\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.8\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.9\n", "\t\n", "\n", "\n", "\n", "\n", "\t\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\t\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "~/.maxplot.svg" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{3}$}\\left[ \\mbox{ /var/folders/3n/jp9c5wkw8xjgmy006s6t\\_pt80000gn/T/maxout34260.gnuplot } , \\mbox{ ~/.maxplot.svg } \\right] \\]" ], "text/plain": [ "(%o3) [/var/folders/3n/jp9c5wkw8xjgmy006s6t_pt80000gn/T/maxout34260.gnuplot, \n", " ~/.maxplot.svg]" ], "text/x-maxima": [ "[\"/var/folders/3n/jp9c5wkw8xjgmy006s6t_pt80000gn/T/maxout34260.gnuplot\",\n", " \"~/.maxplot.svg\"]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "SB-KERNEL:REDEFINITION-WITH-DEFUN: redefining MAXIMA::SIMP-HYPERGEOMETRIC in DEFUN\n" ] } ], "source": [ "plot2d(F(x),[x,0.011,0.99]);" ] }, { "cell_type": "markdown", "id": "971f56f4-3281-454a-97d5-63092dfacbca", "metadata": {}, "source": [ "そのため$0.011\\le 1-\\frac{\\varphi\\left(-q\\right)^4}{\\varphi\\left(q\\right)^4} \\le 0.99$となるように$q$を選ぶ必要があります。そこでこの式のグラフを見てみましょう。" ] }, { "cell_type": "code", "execution_count": 5, "id": "be83a9e1-9b2d-4bc8-984c-ed32a4865738", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "Gnuplot\n", "Produced by GNUPLOT 5.4 patchlevel 2 \n", "\n", "\n", "\n", "\n", "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t \n", "\t \n", "\t\n", "\t\n", "\t \n", "\t \n", "\t\n", "\n", "\n", "\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\t\tq\n", "\t\n", "\n", "\n", "\n", "\tgnuplot_plot_1\n", "\n", "\t\n", "\t\n", "\n", "\t\t\n", "\t\t 0\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.2\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.4\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.6\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.8\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 1\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.1\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.2\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.3\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.4\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.5\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.6\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.7\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.8\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.9\n", "\t\n", "\n", "\n", "\n", "\n", "\t\n", "\n", "\t\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\t\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "~/.maxplot.svg" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{4}$}\\left[ \\mbox{ /var/folders/3n/jp9c5wkw8xjgmy006s6t\\_pt80000gn/T/maxout34260.gnuplot } , \\mbox{ ~/.maxplot.svg } \\right] \\]" ], "text/plain": [ "(%o4) [/var/folders/3n/jp9c5wkw8xjgmy006s6t_pt80000gn/T/maxout34260.gnuplot, \n", " ~/.maxplot.svg]" ], "text/x-maxima": [ "[\"/var/folders/3n/jp9c5wkw8xjgmy006s6t_pt80000gn/T/maxout34260.gnuplot\",\n", " \"~/.maxplot.svg\"]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot2d(1-phi(-q)^4/phi(q)^4,[q,0.0,0.99]);" ] }, { "cell_type": "markdown", "id": "9afb209d-7b06-414e-a6e6-b7bee3ebdb68", "metadata": {}, "source": [ "$0.4\\lt q$では式の値は1に張り付いています。$0\\lt q\\lt0.3$の範囲は$g(q)$を計算できるかなと思ったのですが、やってみると$0.001\\lt q \\lt 0.26$の範囲が限界でした。その範囲で計算した$g(q)$をプロットしてみます。" ] }, { "cell_type": "code", "execution_count": 6, "id": "d60b460b-1a95-49a6-ac6c-29c6b977c5c8", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "Gnuplot\n", "Produced by GNUPLOT 5.4 patchlevel 2 \n", "\n", "\n", "\n", "\n", "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t \n", "\t \n", "\t\n", "\t\n", "\t \n", "\t \n", "\t\n", "\n", "\n", "\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\t\tx\n", "\t\n", "\n", "\n", "\n", "\tgnuplot_plot_1\n", "\n", "\t\n", "\t\n", "\n", "\t\t\n", "\t\t 0\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.05\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.1\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.15\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.2\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.25\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.3\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.05\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.1\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.15\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.2\n", "\t\n", "\n", "\n", "\t\t\n", "\t\t 0.25\n", "\t\n", "\n", "\n", "\n", "\n", "\t\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\t\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "~/.maxplot.svg" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{5}$}\\left[ \\mbox{ /var/folders/3n/jp9c5wkw8xjgmy006s6t\\_pt80000gn/T/maxout34260.gnuplot } , \\mbox{ ~/.maxplot.svg } \\right] \\]" ], "text/plain": [ "(%o5) [/var/folders/3n/jp9c5wkw8xjgmy006s6t_pt80000gn/T/maxout34260.gnuplot, \n", " ~/.maxplot.svg]" ], "text/x-maxima": [ "[\"/var/folders/3n/jp9c5wkw8xjgmy006s6t_pt80000gn/T/maxout34260.gnuplot\",\n", " \"~/.maxplot.svg\"]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot2d(g(x),[x,0.001,0.26]);" ] }, { "cell_type": "markdown", "id": "522a0abf-92cd-4970-8962-c5682b25d57b", "metadata": {}, "source": [ "これはほぼ直線になっています。狭い範囲ではありますが、所望のグラフが得られました。\n", "最後に念の為いくつかの実際の数値で$g(q)$を確認してみましょう。" ] }, { "cell_type": "code", "execution_count": 7, "id": "8a231445-9769-4752-b51f-9b19ff4437ef", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{6}$}\\left[ \\right] \\]" ], "text/plain": [ "(%o6) []" ], "text/x-maxima": [ "[]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{8}$}\\left[ 0.1230000000000001 , 0.2215000000000012 , 0.243000000000002 \\right] \\]" ], "text/plain": [ "(%o8) [0.1230000000000001, 0.2215000000000012, 0.243000000000002]" ], "text/x-maxima": [ "[0.1230000000000001,0.2215000000000012,0.243000000000002]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res:[];\n", "for q in [0.123, 0.2215, 0.243] do push(ev(g(q),numer),res)$\n", "reverse(res);" ] } ], "metadata": { "kernelspec": { "display_name": "Maxima", "language": "maxima", "name": "maxima" }, "language_info": { "codemirror_mode": "maxima", "file_extension": ".mac", "mimetype": "text/x-maxima", "name": "maxima", "pygments_lexer": "maxima", "version": "5.44.0" } }, "nbformat": 4, "nbformat_minor": 5 }