Steenbrink/Tutorial.ipynb
2024-04-18 23:08:55 +02:00

579 lines
16 KiB
Plaintext

{
"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.<x, y, z> = QQ[]\n",
"S.<s> = QQ[]\n",
"T.<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": [
"<html>\\(\\displaystyle \\left(-\\frac{1580}{1521}\\right) \\cdot (s + 1)^{-1}\\)</html>"
],
"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": [
"<html>\\(\\displaystyle \\left(\\frac{3043}{3042}\\right) \\cdot (s + \\frac{1}{2})^{-1}\\)</html>"
],
"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": [
"<html>\\(\\displaystyle \\left(\\frac{19}{2028}\\right) \\cdot (s + \\frac{1}{2})^{-2}\\)</html>"
],
"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": [
"<html>\\(\\displaystyle \\left(\\frac{1}{12168}\\right) \\cdot (s + \\frac{1}{2})^{-3}\\)</html>"
],
"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
}