{ "cells": [ { "cell_type": "markdown", "id": "7c3bc808-0b5e-4b31-a7d1-fbcad76c913c", "metadata": {}, "source": [ "### 超幾何関数と超幾何微分方程式\n", "\n", "超幾何関数が満たす微分方程式を超幾何微分方程式と呼びます。具体的には\n", "$$F(x)=_{2}F_1\\left(a,b;c;x\\right)$$\n", "の時、\n", "$$x\\,(1-x)\\frac{d^2\\,F(x)}{d\\,x^2}+(c-(a+b+1)\\,x)\\,\\frac{d\\,F(x)}{d\\,x}-a\\,b\\,F(x)=0$$\n", "が成り立ちます。これを証明していきます。\n", "\n", "証明の方針としては$A_n=\\frac{(a)_n\\,(b)_n}{(c)_n}$として、\n", "$$F(x)=\\sum_{n=0}^{\\infty}\\frac{A_n\\,x^n}{n!}$$\n", "から$\\frac{d}{dx}F(x), \\frac{d^2}{dx^2}F(x)$の級数展開を、係数に$A_{n+1}$が現れる場合と$A_n$が現れる場合と2通り計算します。\n", "\n", "次に上記の$A_n$の定義から自明に導かれる漸化式$A_{n+1}=\\frac{(a+n)\\,(b+n)}{c+n}\\,A_n$から$(c+n)\\,A_{n+1}=(a+n)\\,(b+n)\\,A_n$の両辺を展開して、さらに両辺の総和を取ります。その各項を先ほど求めた微分に置き換えていくことでこの微分方程式を求めます。" ] }, { "cell_type": "markdown", "id": "29f05174-2872-4eb2-a41c-832540426d6d", "metadata": {}, "source": [ "準備としてout1stTerm()という関数を定義します。総和の式を引数としてとり、総和の最初の項を取り出し、それと第2項以降の総和の和にします。その際に第2項以降の総和を$n=0$から始まるように調整します。" ] }, { "cell_type": "code", "execution_count": 1, "id": "e19e4961-4f1d-41b4-821e-cb58460e4773", "metadata": {}, "outputs": [], "source": [ "out1stTerm(sumexp):=block([ar:args(sumexp),exp,varname,initvalue,finvalue],\n", " [exp,varname,initvalue,finvalue]:ar,\n", " subst(0,varname,exp)+apply(sum,[subst(varname+1,varname,exp),varname,initvalue,finvalue]))$" ] }, { "cell_type": "markdown", "id": "c90fe632-c6f7-48a0-b1cf-d09f39c2afb0", "metadata": {}, "source": [ "まず$F(x)$を級数展開の形で定義します。" ] }, { "cell_type": "code", "execution_count": 2, "id": "30db0b79-40c7-4d9b-9608-3c152513b789", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{1}$}F\\left(x\\right)=\\sum_{n=0}^{\\infty }{\\frac{A_{n}\\,x^{n}}{n!}}\\]" ], "text/plain": [ " inf n\n", " ==== A x\n", " \\ n\n", "(%o1) F(x) = > -----\n", " / n!\n", " ====\n", " n = 0" ], "text/x-maxima": [ "F(x) = 'sum((A[n]*x^n)/n!,n,0,inf)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "F0:F(x)=sum(A[n]/n!*x^n,n,0,inf);" ] }, { "cell_type": "markdown", "id": "6f21cb6d-708b-4378-b259-1b666199b13d", "metadata": {}, "source": [ "このまま微分します。" ] }, { "cell_type": "code", "execution_count": 3, "id": "15298aec-7ece-4014-834a-4080a7c29d9d", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{2}$}\\frac{d}{d\\,x}\\,F\\left(x\\right)=\\sum_{n=0}^{\\infty }{\\frac{n\\,A_{n}\\,x^{n-1}}{n!}}\\]" ], "text/plain": [ " inf n - 1\n", " ==== n A x\n", " d \\ n\n", "(%o2) -- (F(x)) = > -----------\n", " dx / n!\n", " ====\n", " n = 0" ], "text/x-maxima": [ "'diff(F(x),x,1) = 'sum((n*A[n]*x^(n-1))/n!,n,0,inf)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FD1_1:'diff(F(x),x)=diff(rhs(F0),x);" ] }, { "cell_type": "markdown", "id": "f2dbdc4e-dc1c-498f-ad9e-8dc74bf481de", "metadata": {}, "source": [ "右辺にout1stTerm()を使って$n=0$の場合を外に出し、第2項以降の総和のインデックスを調整します。" ] }, { "cell_type": "code", "execution_count": 4, "id": "4afd68c3-40de-4342-b7a8-5a5ef7110463", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{3}$}\\frac{d}{d\\,x}\\,F\\left(x\\right)=\\sum_{n=0}^{\\infty }{\\frac{A_{n+1}\\,x^{n}}{n!}}\\]" ], "text/plain": [ " inf n\n", " ==== A x\n", " d \\ n + 1\n", "(%o3) -- (F(x)) = > ---------\n", " dx / n!\n", " ====\n", " n = 0" ], "text/x-maxima": [ "'diff(F(x),x,1) = 'sum((A[n+1]*x^n)/n!,n,0,inf)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "SB-KERNEL:REDEFINITION-WITH-DEFUN: redefining MAXIMA::SIMP-UNIT-STEP in DEFUN\n", "SB-KERNEL:REDEFINITION-WITH-DEFUN: redefining MAXIMA::SIMP-POCHHAMMER in DEFUN\n" ] } ], "source": [ "FD1_2:lhs(FD1_1)=ev(out1stTerm(rhs(FD1_1)),factorial_expand:true);" ] }, { "cell_type": "code", "execution_count": 5, "id": "9f276802-360e-4c57-a650-447a46d158c1", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{4}$}\\frac{d^2}{d\\,x^2}\\,F\\left(x\\right)=\\sum_{n=0}^{\\infty }{\\frac{\\left(n-1\\right)\\,n\\,A_{n}\\,x^{n-2}}{n!}}\\]" ], "text/plain": [ " inf n - 2\n", " 2 ==== (n - 1) n A x\n", " d \\ n\n", "(%o4) --- (F(x)) = > -------------------\n", " 2 / n!\n", " dx ====\n", " n = 0" ], "text/x-maxima": [ "'diff(F(x),x,2) = 'sum(((n-1)*n*A[n]*x^(n-2))/n!,n,0,inf)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FD2_1:'diff(F(x),x,2)=diff(rhs(FD1_1),x);" ] }, { "cell_type": "code", "execution_count": 6, "id": "8b7b1736-d750-43fd-b153-11d073725b2d", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{5}$}\\frac{d^2}{d\\,x^2}\\,F\\left(x\\right)=\\sum_{n=0}^{\\infty }{\\frac{n\\,A_{n+1}\\,x^{n-1}}{n!}}\\]" ], "text/plain": [ " inf n - 1\n", " 2 ==== n A x\n", " d \\ n + 1\n", "(%o5) --- (F(x)) = > ---------------\n", " 2 / n!\n", " dx ====\n", " n = 0" ], "text/x-maxima": [ "'diff(F(x),x,2) = 'sum((n*A[n+1]*x^(n-1))/n!,n,0,inf)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FD2_2:lhs(FD2_1)=ev(out1stTerm(rhs(FD2_1)),factorial_expand:true);" ] }, { "cell_type": "markdown", "id": "e019abf4-2153-4963-897b-47e22adb7fcf", "metadata": {}, "source": [ "$A_n$の定義から次の漸化式が自明に成り立ちます。" ] }, { "cell_type": "code", "execution_count": 7, "id": "407e29be-910f-426c-824f-87da3ad6aa0e", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{6}$}A_{n+1}=\\frac{\\left(n+a\\right)\\,\\left(n+b\\right)\\,A_{n}}{n+c}\\]" ], "text/plain": [ " (n + a) (n + b) A\n", " n\n", "(%o6) A = ------------------\n", " n + 1 n + c" ], "text/x-maxima": [ "A[n+1] = ((n+a)*(n+b)*A[n])/(n+c)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Acond:A[n+1]=(a+n)*(b+n)/(c+n)*A[n];" ] }, { "cell_type": "code", "execution_count": 8, "id": "e15432bd-71d1-4b12-b67f-f5bdb794f0df", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{7}$}n\\,A_{n+1}+c\\,A_{n+1}=n^2\\,A_{n}+b\\,n\\,A_{n}+a\\,n\\,A_{n}+a\\,b\\,A_{n}\\]" ], "text/plain": [ " 2\n", "(%o7) n A + c A = n A + b n A + a n A + a b A\n", " n + 1 n + 1 n n n n" ], "text/x-maxima": [ "n*A[n+1]+c*A[n+1] = n^2*A[n]+b*n*A[n]+a*n*A[n]+a*b*A[n]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "expand(%*(n+c));" ] }, { "cell_type": "markdown", "id": "aee6ebf2-1c74-416d-9d45-6a9d7354ed12", "metadata": {}, "source": [ "両辺に$\\frac{x^n}{n!}$をかけた式について$n=0$から$\\infty$まで総和を取ります。" ] }, { "cell_type": "code", "execution_count": 9, "id": "a8bbcc0e-2c91-4d6b-bdbc-79633efc31bc", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{8}$}\\sum_{n=0}^{\\infty }{\\frac{\\left(n+c\\right)\\,A_{n+1}\\,x^{n}}{n!}}=\\sum_{n=0}^{\\infty }{\\frac{\\left(n^2+\\left(b+a\\right)\\,n+a\\,b\\right)\\,A_{n}\\,x^{n}}{n!}}\\]" ], "text/plain": [ " inf n inf 2 n\n", " ==== (n + c) A x ==== (n + (b + a) n + a b) A x\n", " \\ n + 1 \\ n\n", "(%o8) > ----------------- = > ----------------------------\n", " / n! / n!\n", " ==== ====\n", " n = 0 n = 0" ], "text/x-maxima": [ "'sum(((n+c)*A[n+1]*x^n)/n!,n,0,inf) = 'sum(((n^2+(b+a)*n+a*b)*A[n]*x^n)/n!,n,\n", " 0,inf)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SUM:factor(sum(%*x^n/n!,n,0,inf));" ] }, { "cell_type": "markdown", "id": "bde785e6-ce2d-4d79-9d7d-385b48b14a58", "metadata": {}, "source": [ "上記の式の左辺をじっと睨んでから、FD2_2式の両辺に$x$をかけた式およびFD1_2の両辺に$c$をかけた式の和を計算してみます。" ] }, { "cell_type": "code", "execution_count": 10, "id": "4f35d58c-7498-4172-ba7b-818d33b7f112", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{9}$}x\\,\\left(\\frac{d^2}{d\\,x^2}\\,F\\left(x\\right)\\right)+c\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)=\\sum_{n=0}^{\\infty }{\\frac{\\left(n+c\\right)\\,A_{n+1}\\,x^{n}}{n!}}\\]" ], "text/plain": [ " inf n\n", " 2 ==== (n + c) A x\n", " d d \\ n + 1\n", "(%o9) x (--- (F(x))) + c (-- (F(x))) = > -----------------\n", " 2 dx / n!\n", " dx ====\n", " n = 0" ], "text/x-maxima": [ "x*'diff(F(x),x,2)+c*'diff(F(x),x,1) = 'sum(((n+c)*A[n+1]*x^n)/n!,n,0,inf)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "LDE:factor(sumcontract(intosum(FD2_2*x+c*FD1_2)));" ] }, { "cell_type": "markdown", "id": "9a282646-d6da-41f5-ba8e-352a8c0d336d", "metadata": {}, "source": [ "SUMの左辺とLDEの右辺が等しいことが見て取れます。
\n", "同様にFD2_1に$x^2$, FD1_1に$x\\,(1+a+b)$, F0に$a\\,b$をかけて足した式を計算します。" ] }, { "cell_type": "code", "execution_count": 11, "id": "c50de1e1-0e42-4b0a-88b6-1ed7af8c5248", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{10}$}x^2\\,\\left(\\frac{d^2}{d\\,x^2}\\,F\\left(x\\right)\\right)+b\\,x\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)+a\\,x\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)+x\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)+a\\,b\\,F\\left(x\\right)=\\sum_{n=0}^{\\infty }{\\frac{\\left(n^2+\\left(b+a\\right)\\,n+a\\,b\\right)\\,A_{n}\\,x^{n}}{n!}}\\]" ], "text/plain": [ " 2\n", " 2 d d d d\n", "(%o10) x (--- (F(x))) + b x (-- (F(x))) + a x (-- (F(x))) + x (-- (F(x)))\n", " 2 dx dx dx\n", " dx\n", " inf 2 n\n", " ==== (n + (b + a) n + a b) A x\n", " \\ n\n", " + a b F(x) = > ----------------------------\n", " / n!\n", " ====\n", " n = 0" ], "text/x-maxima": [ "x^2*'diff(F(x),x,2)+b*x*'diff(F(x),x,1)+a*x*'diff(F(x),x,1)+x*'diff(F(x),x,1)\n", " +a*b*F(x)\n", " = 'sum(((n^2+(b+a)*n+a*b)*A[n]*x^n)/n!,n,0,inf)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "RDE:factor(sumcontract(intosum(FD2_1*x^2+FD1_1*x*(1+a+b)+a*b*F0)));" ] }, { "cell_type": "markdown", "id": "5072234c-3650-4bc8-8042-3714ea38613f", "metadata": {}, "source": [ "RDEの右辺とSUMの右辺が等しいことが見て取れます。
\n", "従ってLDEの左辺とRDEの左辺が等しいことがわかり、次の微分方程式が得られます。" ] }, { "cell_type": "code", "execution_count": 12, "id": "53de7f4b-a2f2-451e-bf63-ec3b3b356285", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{11}$}x\\,\\left(\\frac{d^2}{d\\,x^2}\\,F\\left(x\\right)\\right)+c\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)=x^2\\,\\left(\\frac{d^2}{d\\,x^2}\\,F\\left(x\\right)\\right)+b\\,x\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)+a\\,x\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)+x\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)+a\\,b\\,F\\left(x\\right)\\]" ], "text/plain": [ " 2\n", " d d\n", "(%o11) x (--- (F(x))) + c (-- (F(x))) = \n", " 2 dx\n", " dx\n", " 2\n", " 2 d d d d\n", " x (--- (F(x))) + b x (-- (F(x))) + a x (-- (F(x))) + x (-- (F(x))) + a b F(x)\n", " 2 dx dx dx\n", " dx" ], "text/x-maxima": [ "x*'diff(F(x),x,2)+c*'diff(F(x),x,1) = x^2*'diff(F(x),x,2)\n", " +b*x*'diff(F(x),x,1)+a*x*'diff(F(x),x,1)\n", " +x*'diff(F(x),x,1)+a*b*F(x)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lhs(LDE)=lhs(RDE);" ] }, { "cell_type": "code", "execution_count": 13, "id": "5b48d4aa-af41-4add-b709-1627aa0769cf", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{12}$}x\\,\\left(\\frac{d^2}{d\\,x^2}\\,F\\left(x\\right)\\right)-x^2\\,\\left(\\frac{d^2}{d\\,x^2}\\,F\\left(x\\right)\\right)=b\\,x\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)+a\\,x\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)+x\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)-c\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)+a\\,b\\,F\\left(x\\right)\\]" ], "text/plain": [ " 2 2\n", " d 2 d\n", "(%o12) x (--- (F(x))) - x (--- (F(x))) = \n", " 2 2\n", " dx dx\n", " d d d d\n", " b x (-- (F(x))) + a x (-- (F(x))) + x (-- (F(x))) - c (-- (F(x))) + a b F(x)\n", " dx dx dx dx" ], "text/x-maxima": [ "x*'diff(F(x),x,2)-x^2*'diff(F(x),x,2) = b*x*'diff(F(x),x,1)\n", " +a*x*'diff(F(x),x,1)+x*'diff(F(x),x,1)\n", " -c*'diff(F(x),x,1)+a*b*F(x)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%-args(rhs(%))[1]-args(lhs(%))[2];" ] }, { "cell_type": "code", "execution_count": 14, "id": "16065761-b4f9-4440-9a55-2bdde0a2ce52", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{13}$}\\left(x-x^2\\right)\\,\\left(\\frac{d^2}{d\\,x^2}\\,F\\left(x\\right)\\right)+\\left(\\left(-b-a-1\\right)\\,x+c\\right)\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)-a\\,b\\,F\\left(x\\right)=0\\]" ], "text/plain": [ " 2\n", " 2 d d\n", "(%o13) (x - x ) (--- (F(x))) + (((- b) - a - 1) x + c) (-- (F(x)))\n", " 2 dx\n", " dx\n", " - a b F(x) = 0" ], "text/x-maxima": [ "(x-x^2)*'diff(F(x),x,2)+(((-b)-a-1)*x+c)*'diff(F(x),x,1)-a*b*F(x) = 0" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%-rhs(%),ratsimp;" ] }, { "cell_type": "markdown", "id": "4363a68a-7ea2-43b4-858f-c55943a07c0a", "metadata": {}, "source": [ "少し整理して所望の形の微分方程式を得ることができました。" ] }, { "cell_type": "code", "execution_count": 15, "id": "2b88aefc-76dd-4876-99ad-16c63714dcee", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{14}$}\\mathbf{true}\\]" ], "text/plain": [ "(%o14) true" ], "text/x-maxima": [ "true" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "display2d;" ] }, { "cell_type": "code", "execution_count": 18, "id": "2fc31e05-4907-4c46-a63a-b45fc5dc5c55", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{16}$}\\mathbf{false}\\]" ], "text/plain": [ "(%o16) false" ], "text/x-maxima": [ "false" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "display2d:false;" ] }, { "cell_type": "code", "execution_count": 20, "id": "0c4a139b-3f2d-41f9-bf3d-57b1e81aeb74", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\(\\left(x-x^2\\right)\\,\\left(\\frac{d^2}{d\\,x^2}\\,F\\left(x\\right)\\right)+\\left(\\left(-b-a-1\\right)\\,x+c\\right)\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)-a\\,b\\,F\\left(x\\right)=0\\)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{18}$}\\left(x-x^2\\right)\\,\\left(\\frac{d^2}{d\\,x^2}\\,F\\left(x\\right)\\right)+\\left(\\left(-b-a-1\\right)\\,x+c\\right)\\,\\left(\\frac{d}{d\\,x}\\,F\\left(x\\right)\\right)-a\\,b\\,F\\left(x\\right)=0\\]" ], "text/plain": [ "(%o18) (x-x^2)*'diff(F(x),x,2)+(((-b)-a-1)*x+c)*'diff(F(x),x,1)-a*b*F(x) = 0" ], "text/x-maxima": [ "(x-x^2)*'diff(F(x),x,2)+(((-b)-a-1)*x+c)*'diff(F(x),x,1)-a*b*F(x) = 0" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(%o13);" ] }, { "cell_type": "code", "execution_count": null, "id": "32db64d3-85a4-4afa-a554-590d94ca3f24", "metadata": {}, "outputs": [], "source": [] } ], "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 }