{ "cells": [ { "cell_type": "markdown", "id": "8994f467-b227-46a1-bf32-890ddee38553", "metadata": {}, "source": [ "Hay que cargar estos dos ficheros. Yo he comentado el segundo, pero vosotros no." ] }, { "cell_type": "code", "execution_count": 1, "id": "9be1e47f-b0bd-47c1-a333-96a7652032fa", "metadata": {}, "outputs": [], "source": [ "load(\"zetas_triples.py\")\n", "# load(\"ZetaFunctionsNewtonND.py\")" ] }, { "cell_type": "markdown", "id": "d0dc4e17-343c-4b42-911a-13f7d4781718", "metadata": {}, "source": [ "Datos de una resolución y anillos" ] }, { "cell_type": "code", "execution_count": 2, "id": "2ec2eea6-7796-41c9-bb7a-7c29633cc72c", "metadata": {}, "outputs": [], "source": [ "R. = QQ[]\n", "S. = QQ[]\n", "T. = QQ[]\n", "A = Matrix(QQ, 17, [-13, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, -2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -4, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -4, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1])\n", "Vf = vector(4 * [0] + [1] + 7 * [0] + [1] + 4 * [0])\n", "Vg = vector(8 * [0] + [1] + 7 * [0] + [1])\n", "Vd = vector([13] + 7 * [0] + [1] + 7 * [0] + [1])" ] }, { "cell_type": "markdown", "id": "8a8a49b1-a7c1-4872-b56c-d1b18bf74030", "metadata": {}, "source": [ "Aquí se dan el número de explosiones, las multiplicidades de cada función, el vector de las características de Euler, el divisor *canónico* y el diccionario con los datos de cada estratificación" ] }, { "cell_type": "code", "execution_count": 3, "id": "6679dcd4-8155-41ac-b691-aeb32fd66e76", "metadata": {}, "outputs": [], "source": [ "n, Nf, Ng, Nd, euler, nus, pols = trinomiales(A, Vf, Vg, Vd)" ] }, { "cell_type": "markdown", "id": "bd0f6802-d0b9-4525-aa3c-93e2844812a9", "metadata": {}, "source": [ "Mostramos los polinomios de cada estrato, con los pesos y las características de Euler" ] }, { "cell_type": "code", "execution_count": 4, "id": "272abf46-628b-419a-beed-ee1eec602809", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "Polinomio: z^3 + x^4*z^2 + x^13\n", "Pesos: (2, 1, 1)\n", "Característica de Euler: -13\n", "====================\n", "1\n", "Polinomio: z^3 + x^10*z + x^13\n", "Pesos: (3, 1, 1)\n", "Característica de Euler: 1\n", "====================\n", "2\n", "Polinomio: z^3 + x^20*z + x^26\n", "Pesos: (5, 1, 1)\n", "Característica de Euler: -1\n", "====================\n", "3\n", "Polinomio: z^3 + x^21*z + x^26\n", "Pesos: (6, 1, 1)\n", "Característica de Euler: 1\n", "====================\n", "4\n", "Polinomio: z^3 + x^42*z + x^52\n", "Pesos: (11, 1, 1)\n", "Característica de Euler: -1\n", "====================\n", "5\n", "Polinomio: z^3 + x^28*z + x^39\n", "Pesos: (7, 1, 1)\n", "Característica de Euler: 0\n", "====================\n", "6\n", "Polinomio: z^3 + x^36*z + x^52\n", "Pesos: (9, 1, 1)\n", "Característica de Euler: 0\n", "====================\n", "7\n", "Polinomio: z^3 + x^44*z + x^65\n", "Pesos: (11, 1, 1)\n", "Característica de Euler: 0\n", "====================\n", "8\n", "Polinomio: z^3 + x^52*z + x^78\n", "Pesos: (13, 1, 1)\n", "Característica de Euler: -2\n", "====================\n", "9\n", "Polinomio: z^3 + x^10*z + x^13\n", "Pesos: (3, 1, 1)\n", "Característica de Euler: 1\n", "====================\n", "10\n", "Polinomio: z^3 + x^20*z + x^26\n", "Pesos: (5, 1, 1)\n", "Característica de Euler: -1\n", "====================\n", "11\n", "Polinomio: z^3 + x^21*z + x^26\n", "Pesos: (6, 1, 1)\n", "Característica de Euler: 1\n", "====================\n", "12\n", "Polinomio: z^3 + x^42*z + x^52\n", "Pesos: (11, 1, 1)\n", "Característica de Euler: -1\n", "====================\n", "13\n", "Polinomio: z^3 + x^28*z + x^39\n", "Pesos: (7, 1, 1)\n", "Característica de Euler: 0\n", "====================\n", "14\n", "Polinomio: z^3 + x^36*z + x^52\n", "Pesos: (9, 1, 1)\n", "Característica de Euler: 0\n", "====================\n", "15\n", "Polinomio: z^3 + x^44*z + x^65\n", "Pesos: (11, 1, 1)\n", "Característica de Euler: 0\n", "====================\n", "16\n", "Polinomio: z^3 + x^52*z + x^78\n", "Pesos: (13, 1, 1)\n", "Característica de Euler: -2\n", "====================\n", "(0, 8)\n", "Polinomio: z^3 + x^4*y^26*z^2 + x^13*y^78\n", "Pesos: (2, 13, 1)\n", "Característica de Euler: 1\n", "====================\n", "(0, 16)\n", "Polinomio: z^3 + x^4*y^26*z^2 + x^13*y^78\n", "Pesos: (2, 13, 1)\n", "Característica de Euler: 1\n", "====================\n", "(1, 2)\n", "Polinomio: z^3 + x^10*y^20*z + x^13*y^26\n", "Pesos: (3, 5, 1)\n", "Característica de Euler: 1\n", "====================\n", "(2, 4)\n", "Polinomio: z^3 + x^20*y^42*z + x^26*y^52\n", "Pesos: (5, 11, 1)\n", "Característica de Euler: 1\n", "====================\n", "(2, 5)\n", "Polinomio: z^3 + x^20*y^28*z + x^26*y^39\n", "Pesos: (5, 7, 1)\n", "Característica de Euler: 1\n", "====================\n", "(3, 4)\n", "Polinomio: z^3 + x^21*y^42*z + x^26*y^52\n", "Pesos: (6, 11, 1)\n", "Característica de Euler: 1\n", "====================\n", "(5, 6)\n", "Polinomio: z^3 + x^28*y^36*z + x^39*y^52\n", "Pesos: (7, 9, 1)\n", "Característica de Euler: 1\n", "====================\n", "(6, 7)\n", "Polinomio: z^3 + x^36*y^44*z + x^52*y^65\n", "Pesos: (9, 11, 1)\n", "Característica de Euler: 1\n", "====================\n", "(7, 8)\n", "Polinomio: z^3 + x^44*y^52*z + x^65*y^78\n", "Pesos: (11, 13, 1)\n", "Característica de Euler: 1\n", "====================\n", "(9, 10)\n", "Polinomio: z^3 + x^10*y^20*z + x^13*y^26\n", "Pesos: (3, 5, 1)\n", "Característica de Euler: 1\n", "====================\n", "(10, 12)\n", "Polinomio: z^3 + x^20*y^42*z + x^26*y^52\n", "Pesos: (5, 11, 1)\n", "Característica de Euler: 1\n", "====================\n", "(10, 13)\n", "Polinomio: z^3 + x^20*y^28*z + x^26*y^39\n", "Pesos: (5, 7, 1)\n", "Característica de Euler: 1\n", "====================\n", "(11, 12)\n", "Polinomio: z^3 + x^21*y^42*z + x^26*y^52\n", "Pesos: (6, 11, 1)\n", "Característica de Euler: 1\n", "====================\n", "(13, 14)\n", "Polinomio: z^3 + x^28*y^36*z + x^39*y^52\n", "Pesos: (7, 9, 1)\n", "Característica de Euler: 1\n", "====================\n", "(14, 15)\n", "Polinomio: z^3 + x^36*y^44*z + x^52*y^65\n", "Pesos: (9, 11, 1)\n", "Característica de Euler: 1\n", "====================\n", "(15, 16)\n", "Polinomio: z^3 + x^44*y^52*z + x^65*y^78\n", "Pesos: (11, 13, 1)\n", "Característica de Euler: 1\n", "====================\n", "(0, 'd')\n", "Polinomio: z^3 + x^4*z^2 + x^13*y\n", "Pesos: (2, 1, 1)\n", "Característica de Euler: 13\n", "====================\n", "(4, 'f')\n", "Polinomio: z^3 + x^42*y*z + x^52\n", "Pesos: (11, 1, 1)\n", "Característica de Euler: 1\n", "====================\n", "(8, 'g')\n", "Polinomio: z^3 + x^52*z + x^78*y\n", "Pesos: (13, 1, 1)\n", "Característica de Euler: 1\n", "====================\n", "(8, 'd')\n", "Polinomio: z^3 + x^26*z^2 + x^78*y\n", "Pesos: (13, 1, 1)\n", "Característica de Euler: 1\n", "====================\n", "(12, 'f')\n", "Polinomio: z^3 + x^42*y*z + x^52\n", "Pesos: (11, 1, 1)\n", "Característica de Euler: 1\n", "====================\n", "(16, 'g')\n", "Polinomio: z^3 + x^52*z + x^78*y\n", "Pesos: (13, 1, 1)\n", "Característica de Euler: 1\n", "====================\n", "(16, 'd')\n", "Polinomio: z^3 + x^26*z^2 + x^78*y\n", "Pesos: (13, 1, 1)\n", "Característica de Euler: 1\n", "====================\n" ] } ], "source": [ "for k in pols:\n", " p, w, e = pols[k]\n", " print(k)\n", " print(\"Polinomio:\", p)\n", " print(\"Pesos:\", w)\n", " print(\"Característica de Euler:\", e)\n", " print(\"====================\")" ] }, { "cell_type": "markdown", "id": "1e5ab1ea-ea53-40e9-af0e-1755931776ef", "metadata": {}, "source": [ "Y ahora calculamos las funciones zeta." ] }, { "cell_type": "code", "execution_count": 5, "id": "50b8eb49-214f-4c48-9a5b-38abf04701ac", "metadata": {}, "outputs": [], "source": [ "zt, zm, dic = zetas(n, pols, info=True)" ] }, { "cell_type": "markdown", "id": "16b7ca3c-9e71-4980-b1b6-61e686e3150e", "metadata": {}, "source": [ "Lo siguiente es la descomposición en fracciones parciales de la función zeta topológica" ] }, { "cell_type": "code", "execution_count": 16, "id": "44921d20-57c0-4e2b-85e3-ea096dc8e3ea", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "el cociente es 0\n" ] }, { "data": { "text/html": [ "\\(\\displaystyle \\left(-\\frac{1580}{1521}\\right) \\cdot (s + 1)^{-1}\\)" ], "text/latex": [ "$\\displaystyle \\left(-\\frac{1580}{1521}\\right) \\cdot (s + 1)^{-1}$" ], "text/plain": [ "(-1580/1521) * (s + 1)^-1" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\\(\\displaystyle \\left(\\frac{3043}{3042}\\right) \\cdot (s + \\frac{1}{2})^{-1}\\)" ], "text/latex": [ "$\\displaystyle \\left(\\frac{3043}{3042}\\right) \\cdot (s + \\frac{1}{2})^{-1}$" ], "text/plain": [ "(3043/3042) * (s + 1/2)^-1" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\\(\\displaystyle \\left(\\frac{19}{2028}\\right) \\cdot (s + \\frac{1}{2})^{-2}\\)" ], "text/latex": [ "$\\displaystyle \\left(\\frac{19}{2028}\\right) \\cdot (s + \\frac{1}{2})^{-2}$" ], "text/plain": [ "(19/2028) * (s + 1/2)^-2" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\\(\\displaystyle \\left(\\frac{1}{12168}\\right) \\cdot (s + \\frac{1}{2})^{-3}\\)" ], "text/latex": [ "$\\displaystyle \\left(\\frac{1}{12168}\\right) \\cdot (s + \\frac{1}{2})^{-3}$" ], "text/plain": [ "(1/12168) * (s + 1/2)^-3" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "quo, desc = zt.partial_fraction_decomposition(decompose_powers=True)\n", "print(\"el cociente es \", quo)\n", "for p in desc:\n", " show(p.factor())" ] }, { "cell_type": "code", "execution_count": 17, "id": "87e4fc8d-a73c-4561-95c5-f8032aa2e366", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "El factor ciclotómico de 1 tiene multiplicidad 3\n", "El factor ciclotómico de 2 tiene multiplicidad 15\n", "El factor ciclotómico de 3 tiene multiplicidad 1\n", "El factor ciclotómico de 6 tiene multiplicidad 2\n", "El factor ciclotómico de 13 tiene multiplicidad 2\n", "El factor ciclotómico de 26 tiene multiplicidad 15\n", "El factor ciclotómico de 78 tiene multiplicidad 2\n" ] } ], "source": [ "for j in dic:\n", " print(\"El factor ciclotómico de \", j, \"tiene multiplicidad \", dic[j])" ] }, { "cell_type": "markdown", "id": "b33a65cb-a5a3-4cd6-9092-9e7e10792e67", "metadata": {}, "source": [ "Ahora se calcula usando la estratificación sin las transformadas estrictas de $f, g$ y se comprueba que el resultado es el mismo (`total=False`)." ] }, { "cell_type": "code", "execution_count": 18, "id": "479db410-d72b-4fa4-b7d9-0306fcd0378d", "metadata": {}, "outputs": [], "source": [ "n1, Nf1, Ng1, Nd1, euler1, nus1, pols1 = trinomiales(A, Vf, Vg, Vd, total=False)" ] }, { "cell_type": "code", "execution_count": 19, "id": "8bcbddf5-79de-44d3-b45a-c967b294fde8", "metadata": {}, "outputs": [], "source": [ "zt1, zm1, dic1 = zetas(n1, pols1, info=True)" ] }, { "cell_type": "code", "execution_count": 20, "id": "c0abd797-77e2-4043-929b-36bc19d56e5e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zt == zt1 and zm == zm1 and dic == dic1" ] }, { "cell_type": "markdown", "id": "7be374dc-b6b5-4a72-bed7-c91e4f60e078", "metadata": {}, "source": [ "Consideramos ahora solo la resolución del discriminante." ] }, { "cell_type": "code", "execution_count": 21, "id": "8f0a31df-57aa-4c03-bf54-bb3b0e1a450a", "metadata": {}, "outputs": [], "source": [ "B = A.delete_columns([3, 4, 11, 12]).delete_rows([3, 4, 11, 12])\n", "B[2, 2] = -2\n", "B[8, 8] = -2\n", "Wf = vector(Vf.list()[:2] + [2] + Vf.list()[5:10] + [2] + Vf.list()[13:])\n", "Wg = vector(Vg.list()[:3] + Vg.list()[5:11] + Vg.list()[13:])\n", "Wd = vector(Vd.list()[:3] + Vd.list()[5:11] + Vd.list()[13:])" ] }, { "cell_type": "markdown", "id": "dc309ca1-52b9-45e2-b2e3-c1e0f5335ce6", "metadata": {}, "source": [ "Ahora `total=False` es obligatorio. También sale lo mismo." ] }, { "cell_type": "code", "execution_count": 22, "id": "68a3394b-7fe7-497f-aaef-35e5f5482e3a", "metadata": {}, "outputs": [], "source": [ "n2, Nf2, Ng2, Nd2, euler2, nus2, pols2 = trinomiales(B, Wf, Wg, Wd, total=False)" ] }, { "cell_type": "code", "execution_count": 23, "id": "91e225b1-8f78-4a53-9c50-1efe533c7fd3", "metadata": {}, "outputs": [], "source": [ "zt2, zm2, dic2 = zetas(n2, pols2, info=True)" ] }, { "cell_type": "code", "execution_count": 24, "id": "2514344c-769b-45d0-8738-173f2b31adb6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zt == zt1 and zm == zm1 and dic == dic1" ] }, { "cell_type": "code", "execution_count": null, "id": "cea9ce6e-46d4-4c37-a61a-f6cf6c2d1680", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "SageMath 10.3.rc3", "language": "sage", "name": "sagemath-310" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.1" } }, "nbformat": 4, "nbformat_minor": 5 }