{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Calculating special value of \\\\(j(t)\\\\) using Hibert Class Polynomial\n", "Yasuaki Honda at gmail dot com\n", "\n", "Given \\\\(t\\\\) a quadratic irrational, we can compute Hilbert Class Polynomial. Solving the class polynomial using solve(), we can obtain algebraic solutions if the degree of the polynomial is 4 or less. The value of \\\\(j(t)\\\\) should be one of the obtained algebraic solutions. The final step is to choose the right answer among the solutions.\n", "\n", "It is just simple. We can use the similar technic of aproximate calculation to reach the right answer. In this case, we can compute the aproximate values of the obtained algebraic solutions. Also, we can compute numerically the value of \\\\(j(t)\\\\). We should simply choose the aproximate value of the solutions closest to the numerical value of \\\\(j(t)\\\\). The corresponding algebraic solution is the exact value of \\\\(j(t)\\\\)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "install_github(\"YasuakiHonda\",\"modular_j\",\"main\")$" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true, "jupyter": { "outputs_hidden": true } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "; processing (IN-PACKAGE :MAXIMA)\n", "; processing (LET NIL ...)\n", "; processing (DEFPROP |$InFD| ...)\n", "; processing (ADD2LNC (QUOTE |$InFD|) ...)\n", "; processing (DEFMTRFUN (|$InFD| $ANY ...) ...)\n", "; processing (DEFPROP |$Ta| ...)\n", "; processing (ADD2LNC (QUOTE |$Ta|) ...)\n", "; processing (DEFMTRFUN (|$Ta| $ANY ...) ...)\n", "; processing (DEFPROP |$FindInFD| ...)\n", "; processing (ADD2LNC (QUOTE |$FindInFD|) ...)\n", "; processing (DEFMTRFUN (|$FindInFD| $ANY ...) ...)\n", "; processing (LET NIL ...)\n", "; processing (DEFPROP $FLOAT_MODULAR_J ...)\n", "; processing (ADD2LNC (QUOTE $FLOAT_MODULAR_J) ...)\n", "; processing (DEFMTRFUN ($FLOAT_MODULAR_J $ANY ...) ...)\n", "; processing (DEFPROP $BFLOAT_MODULAR_J ...)\n", "; processing (ADD2LNC (QUOTE $BFLOAT_MODULAR_J) ...)\n", "; processing (DEFMTRFUN ($BFLOAT_MODULAR_J $ANY ...) ...)\n", "; processing (DEFPROP |$Checkabc| ...)\n", "; processing (ADD2LNC (QUOTE |$Checkabc|) ...)\n", "; processing (DEFMTRFUN (|$Checkabc| $ANY ...) ...)\n", "; processing (DEFPROP |$FindReducedQuadIrrD| ...)\n", "; processing (ADD2LNC (QUOTE |$FindReducedQuadIrrD|) ...)\n", "; processing (DEFMTRFUN (|$FindReducedQuadIrrD| $ANY ...) ...)\n", "; processing (DEFPROP |$FindClassNumberD| ...)\n", "; processing (ADD2LNC (QUOTE |$FindClassNumberD|) ...)\n", "; processing (DEFMTRFUN (|$FindClassNumberD| $FIXNUM ...) ...)\n", "; processing (DEFPROP |$FindClassPolyD| ...)\n", "; processing (ADD2LNC (QUOTE |$FindClassPolyD|) ...)\n", "; processing (DEFMTRFUN (|$FindClassPolyD| $ANY ...) ...)\n", "; processing (DEFPROP $IRR_NUMBER ...)\n", "; processing (ADD2LNC (QUOTE $IRR_NUMBER) ...)\n", "; processing (DEFMTRFUN ($IRR_NUMBER $ANY ...) ...)\n", "; processing (DEFPROP |$FindDetIrr| ...)\n", "; processing (ADD2LNC (QUOTE |$FindDetIrr|) ...)\n", "; processing (DEFMTRFUN (|$FindDetIrr| $ANY ...) ...)\n", "; processing (DEFPROP $EXACT_MODULAR_J ...)\n", "; processing (ADD2LNC (QUOTE $EXACT_MODULAR_J) ...)\n", "; processing (DEFMTRFUN ($EXACT_MODULAR_J $ANY ...) ...)[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$InFD-IMPL| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$InFD| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$Ta-IMPL| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$Ta| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindInFD-IMPL| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindInFD| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$FLOAT_MODULAR_J-IMPL in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$FLOAT_MODULAR_J in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$BFLOAT_MODULAR_J-IMPL in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$BFLOAT_MODULAR_J in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$Checkabc-IMPL| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$Checkabc| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindReducedQuadIrrD-IMPL| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindReducedQuadIrrD| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindClassNumberD-IMPL| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindClassNumberD| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindClassPolyD-IMPL| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindClassPolyD| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$IRR_NUMBER-IMPL in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$IRR_NUMBER in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindDetIrr-IMPL| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::|$FindDetIrr| in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$EXACT_MODULAR_J-IMPL in DEFUN\n", "[SB-KERNEL:REDEFINITION-WITH-DEFUN] redefining MAXIMA::$EXACT_MODULAR_J in DEFUN\n" ] } ], "source": [ "asdf_load(\"modular_j\")$" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{3}$}\\left[ \\frac{\\sqrt{15}\\,i-1}{4} , \\frac{\\sqrt{15}\\,i-1}{2} \\right] \\]" ], "text/plain": [ " sqrt(15) %i - 1 sqrt(15) %i - 1\n", "(%o3) [---------------, ---------------]\n", " 4 2" ], "text/x-maxima": [ "[(sqrt(15)*%i-1)/4,(sqrt(15)*%i-1)/2]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "irr_list:FindReducedQuadIrrD(-15);" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{4}$}x^2+191025\\,x-121287375\\]" ], "text/plain": [ " 2\n", "(%o4) x + 191025 x - 121287375" ], "text/x-maxima": [ "x^2+191025*x-121287375" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cpoly:FindClassPolyD(x,-15);" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{5}$}\\left[ x=-\\frac{135\\,\\left(637\\,\\sqrt{5}+1415\\right)}{2} , x=\\frac{135\\,\\left(637\\,\\sqrt{5}-1415\\right)}{2} \\right] \\]" ], "text/plain": [ " 135 (637 sqrt(5) + 1415) 135 (637 sqrt(5) - 1415)\n", "(%o5) [x = - ------------------------, x = ------------------------]\n", " 2 2" ], "text/x-maxima": [ "[x = -(135*(637*sqrt(5)+1415))/2,x = (135*(637*sqrt(5)-1415))/2]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "map(factor,solve(cpoly,x));" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{6}$}\\left[ x=-1.9165783286254720747135344482127_B \\times 10^{5} , x=6.3283286254720747135344482127308_B \\times 10^{2} \\right] \\]" ], "text/plain": [ "(%o6) [x = - 1.9165783286254720747135344482127b5, \n", " x = 6.3283286254720747135344482127308b2]" ], "text/x-maxima": [ "[x = -1.9165783286254720747135344482127b5,\n", " x = 6.3283286254720747135344482127308b2]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "map(bfloat,%),fpprec:32;" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{7}$}3.2325610906099284497791461659779_B \\times 10^{-24}\\,i+6.3283286254720747135344450544908_B \\times 10^{2}\\]" ], "text/plain": [ "(%o7) 3.2325610906099284497791461659779b-24 %i\n", " + 6.3283286254720747135344450544908b2" ], "text/x-maxima": [ "3.2325610906099284497791461659779b-24*%i+6.3283286254720747135344450544908b2" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bfloat_modular_j(irr_list[1]);" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{8}$}-1.9165783286254720747135344482127_B \\times 10^{5}\\]" ], "text/plain": [ "(%o8) - 1.9165783286254720747135344482127b5" ], "text/x-maxima": [ "-1.9165783286254720747135344482127b5" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bfloat_modular_j(irr_list[2]);" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{9}$}-\\frac{135\\,\\left(637\\,\\sqrt{5}+1415\\right)}{2}\\]" ], "text/plain": [ " 135 (637 sqrt(5) + 1415)\n", "(%o9) - ------------------------\n", " 2" ], "text/x-maxima": [ "-(135*(637*sqrt(5)+1415))/2" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "factor(exact_modular_j(irr_list[2]));" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\[\\tag{${\\it \\%o}_{10}$}-1.9165783286254720747135344482127_B \\times 10^{5}\\]" ], "text/plain": [ "(%o10) - 1.9165783286254720747135344482127b5" ], "text/x-maxima": [ "-1.9165783286254720747135344482127b5" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bfloat(%),fpprec:32;" ] }, { "cell_type": "code", "execution_count": null, "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": 4 }