contribucion componentes
This commit is contained in:
parent
6f79b3ace6
commit
9aedb768ae
609
ejemplo1.ipynb
Normal file
609
ejemplo1.ipynb
Normal file
@ -0,0 +1,609 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "a6a83522-f953-4884-a2b4-da2b1ed5f484",
|
||||||
|
"metadata": {},
|
||||||
|
"source": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 59,
|
||||||
|
"id": "731aa3f2-2822-491a-b5c8-150ad760c626",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"# load(\"ZetaFunctionsNewtonND.py\")\n",
|
||||||
|
"load(\"zetas_triples_general.py\")\n",
|
||||||
|
"R.<x, y, z> = QQ[]\n",
|
||||||
|
"f=(y^2-x^3)^2+x^5*y\n",
|
||||||
|
"g=(y^2-x^3)^3+x^10\n",
|
||||||
|
"d=f^3-g^2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 2,
|
||||||
|
"id": "a49fdf82-1388-403c-8cd5-4bbd7e3bafd3",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"-x^20 + 2*x^19 + 3*x^17*y - 3*x^16*y^2 + x^15*y^3 - 12*x^14*y^3 + 18*x^11*y^5 + x^10*y^6 - 12*x^8*y^7 + 3*x^5*y^9"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 2,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"d"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 34,
|
||||||
|
"id": "3be58442-a908-4fb2-ba36-1894bd963e12",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Newton's polyhedron of -x^20 + 2*x^19 + 3*x^17*y - 3*x^16*y^2 + x^15*y^3 - 12*x^14*y^3 + 18*x^11*y^5 + x^10*y^6 - 12*x^8*y^7 + 3*x^5*y^9:\n",
|
||||||
|
" support points = [(20, 0, 0), (19, 0, 0), (17, 1, 0), (16, 2, 0), (15, 3, 0), (14, 3, 0), (11, 5, 0), (10, 6, 0), (8, 7, 0), (5, 9, 0)]\n",
|
||||||
|
" vertices = [(5, 9, 0), (19, 0, 0), (17, 1, 0)]\n",
|
||||||
|
" number of proper faces = 15\n",
|
||||||
|
" Facet 0: x + 2*y - 19 >= 0\n",
|
||||||
|
" Facet 1: 2*x + 3*y - 37 >= 0\n",
|
||||||
|
" Facet 2: x - 5 >= 0\n",
|
||||||
|
" Facet 3: y >= 0\n",
|
||||||
|
" Facet 4: z >= 0\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"Zd=ZetaFunctions(d)\n",
|
||||||
|
"Zd.give_info_newton(faces=False, cones=False, compact = False)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 35,
|
||||||
|
"id": "bcc41b1a-ea09-4f75-9e53-71b87a47d0e2",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"f1 = R(f(x=x^2, y=x^3 * (y + 1)) / x^12)\n",
|
||||||
|
"g1 = R(g(x=x^2, y=x^3 * (y - 1)) / x^18)\n",
|
||||||
|
"d1 = R(d(x=x^2, y=x^3 * (y - 1)) / x^37)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 36,
|
||||||
|
"id": "328f85f7-6cd6-40ed-9d60-c1be613e32ea",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"y^4 + 4*y^3 + x*y + 4*y^2 + x"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 36,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"f1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 37,
|
||||||
|
"id": "2eb04dbc-e5eb-4631-9531-92b01fe8f37d",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"y^6 - 6*y^5 + 12*y^4 - 8*y^3 + x^2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 37,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"g1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 38,
|
||||||
|
"id": "b502dd16-e5fc-41dd-894d-c4744b1fc1b4",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"3*y^9 - 27*y^8 + x*y^6 + 96*y^7 - 6*x*y^5 - 168*y^6 + x^2*y^3 + 15*x*y^4 + 144*y^5 - 3*x^2*y^2 - 20*x*y^3 - 48*y^4 - x^3 + 3*x^2*y + 12*x*y^2 - x^2"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 38,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"d1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 39,
|
||||||
|
"id": "113114bc-af4a-4c9e-b3bf-93541e3ad24f",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Newton's polyhedron of 3*y^9 - 27*y^8 + x*y^6 + 96*y^7 - 6*x*y^5 - 168*y^6 + x^2*y^3 + 15*x*y^4 + 144*y^5 - 3*x^2*y^2 - 20*x*y^3 - 48*y^4 - x^3 + 3*x^2*y + 12*x*y^2 - x^2:\n",
|
||||||
|
" support points = [(0, 9, 0), (0, 8, 0), (1, 6, 0), (0, 7, 0), (1, 5, 0), (0, 6, 0), (2, 3, 0), (1, 4, 0), (0, 5, 0), (2, 2, 0), (1, 3, 0), (0, 4, 0), (3, 0, 0), (2, 1, 0), (1, 2, 0), (2, 0, 0)]\n",
|
||||||
|
" vertices = [(0, 4, 0), (2, 0, 0)]\n",
|
||||||
|
" number of proper faces = 11\n",
|
||||||
|
" Facet 0: 2*x + y - 4 >= 0\n",
|
||||||
|
" Facet 1: x >= 0\n",
|
||||||
|
" Facet 2: y >= 0\n",
|
||||||
|
" Facet 3: z >= 0\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"Zd1=ZetaFunctions(d1)\n",
|
||||||
|
"Zd1.give_info_newton(faces=False, cones=False, compact = False)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 40,
|
||||||
|
"id": "5ff51403-dcee-4f63-936a-e4311f2e6ac3",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"A = Matrix(QQ, 6, [ [-3, 0, 1, 0, 0, 0], [0, -2, 1, 0, 0, 0], [1, 1, -3, 0, 1, 0], [0, 0, 0, -3, 0, 1], [0, 0, 1, 0, -2, 1], [0, 0, 0, 1, 1, -1] ])\n",
|
||||||
|
"Vf = vector(4 * [0] + [1] + [0] )\n",
|
||||||
|
"Vg = vector( 5 * [0] + [1] )\n",
|
||||||
|
"Vd = vector([5] + [1] + 2 * [0] + [2] + [0] )"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 41,
|
||||||
|
"id": "13ba1ce2-83c5-4a88-9785-a769a2e32f73",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 41,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"det(-A)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 45,
|
||||||
|
"id": "733c243c-b7c1-454b-bd6e-e88aba1e74d5",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"n, Nf, Ng, Nd, Nhs, euler, nus, pols = trinomiales_general(A, Vf, Vg, [], Vd, total=False)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 46,
|
||||||
|
"id": "69fa70da-afa4-4cca-91e8-c723aae47e68",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"((4, 6, 12, 13, 26, 39), (6, 9, 18, 20, 39, 60), (14, 19, 37, 39, 78, 117))"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 46,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"Nf, Ng, Nd"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 47,
|
||||||
|
"id": "0fb421e2-8ad0-40f8-ab3f-a1048ec3a12a",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"{0: (z^3 + x^2*z^2 + x^8, (2, 1, 1), -4),\n",
|
||||||
|
" 1: (z^3 + x^3*z^2 + x^10, (3, 1, 1), 0),\n",
|
||||||
|
" 2: (z^3 + x^6*z^2 + x^19, (5, 1, 1), -1),\n",
|
||||||
|
" 3: (z^3 + x^13*z + x^20, (6, 1, 1), 1),\n",
|
||||||
|
" 4: (z^3 + x^26*z + x^39, (11, 1, 1), -2),\n",
|
||||||
|
" 5: (z^3 + x^39*z + x^60, (17, 1, 1), 0),\n",
|
||||||
|
" (0, 2): (z^3 + x^2*y^6*z^2 + x^8*y^19, (2, 5, 1), 1),\n",
|
||||||
|
" (1, 2): (z^3 + x^3*y^6*z^2 + x^10*y^19, (3, 5, 1), 1),\n",
|
||||||
|
" (2, 4): (z^3 + x^6*y^13*z^2 + x^19*y^39, (5, 11, 1), 1),\n",
|
||||||
|
" (3, 5): (z^3 + x^13*y^39*z + x^20*y^60, (6, 17, 1), 1),\n",
|
||||||
|
" (4, 5): (z^3 + x^26*y^39*z + x^39*y^60, (11, 17, 1), 1),\n",
|
||||||
|
" (0, 'd'): (z^3 + x^2*z^2 + x^8*y, (2, 1, 1), 5),\n",
|
||||||
|
" (1, 'd'): (z^3 + x^3*z^2 + x^10*y, (3, 1, 1), 1),\n",
|
||||||
|
" (4, 'd'): (z^3 + x^13*z^2 + x^39*y, (11, 1, 1), 2)}"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 47,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"pols"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 48,
|
||||||
|
"id": "116a3b7e-17a1-45dd-a501-2d7430385922",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"zt, zm, dic = zetas(n, pols, info=True)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 49,
|
||||||
|
"id": "8ca2025c-c4c4-40f5-a690-74ed194507f4",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"(1357/2223) * (s + 23/38)^-1 * (s + 11/18)^-1 * (s + 8/13)^-1 * (s + 5/8)^-1 * (s + 1)^-1 * (s^4 + 182245/65136*s^3 + 126929/43424*s^2 + 175993/130272*s + 55/236)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 49,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"zt.factor()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 50,
|
||||||
|
"id": "d5321785-1e6d-48ab-b02c-d81f3b514034",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"{1: 5, 2: 5, 3: 1, 4: 4, 8: 4, 18: 1, 13: 1, 38: 1, 39: 1}"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 50,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"dic"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 51,
|
||||||
|
"id": "d82d56e7-1f23-448b-b8af-16751f7d5db1",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"El factor ciclotómico de 1 tiene multiplicidad 5\n",
|
||||||
|
"El factor ciclotómico de 2 tiene multiplicidad 5\n",
|
||||||
|
"El factor ciclotómico de 3 tiene multiplicidad 1\n",
|
||||||
|
"El factor ciclotómico de 4 tiene multiplicidad 4\n",
|
||||||
|
"El factor ciclotómico de 8 tiene multiplicidad 4\n",
|
||||||
|
"El factor ciclotómico de 18 tiene multiplicidad 1\n",
|
||||||
|
"El factor ciclotómico de 13 tiene multiplicidad 1\n",
|
||||||
|
"El factor ciclotómico de 38 tiene multiplicidad 1\n",
|
||||||
|
"El factor ciclotómico de 39 tiene multiplicidad 1\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"for j in dic:\n",
|
||||||
|
" print(\"El factor ciclotómico de \", j, \"tiene multiplicidad \", dic[j])"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 60,
|
||||||
|
"id": "18c07685-494b-4b67-8358-c322028d700e",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"componentes = zetas_components(n, pols, A, Vf, Vg, Vd, Nf, Ng, Nd, info=True)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 61,
|
||||||
|
"id": "bd6ac3c0-019a-4153-81f6-0e145158997c",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"('polos', (3, 5, (3, 5), (4, 5)))\n",
|
||||||
|
"(5/143) * (s + 8/13)^-1 * (s + 1)^-1 * (s + 16/5)\n",
|
||||||
|
"{13: -1, 39: -1}\n",
|
||||||
|
"=================\n",
|
||||||
|
"('unos', (0, 2, 1, (0, 2), (1, 2), (2, 4), (0, 'd'), (1, 'd')))\n",
|
||||||
|
"(986/1881) * (s + 23/38)^-1 * (s + 11/18)^-1 * (s + 8/13)^-1 * (s + 5/8)^-1 * (s + 1)^-1 * (s^4 + 99233/36192*s^3 + 119869/42432*s^2 + 265381/205088*s + 11385/51272)\n",
|
||||||
|
"{1: 4, 2: 5, 4: 4, 8: 4, 18: 1, 38: 1}\n",
|
||||||
|
"=================\n",
|
||||||
|
"('unos', ((4, 'd'),))\n",
|
||||||
|
"(4/429) * (s + 8/13)^-1 * (s + 1)^-1 * (s + 12)\n",
|
||||||
|
"{13: -2, 39: -2}\n",
|
||||||
|
"=================\n",
|
||||||
|
"('dic', (4,))\n",
|
||||||
|
"(6/143) * (s + 8/13)^-1 * (s + 1)^-1 * (s - 8/3)\n",
|
||||||
|
"{1: 1, 3: 1, 13: 4, 39: 4}\n",
|
||||||
|
"=================\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"for a in componentes:\n",
|
||||||
|
" zetatop, zetamon, dic = componentes[a]\n",
|
||||||
|
" print(a)\n",
|
||||||
|
" print(zetatop.factor())\n",
|
||||||
|
" print(dic)\n",
|
||||||
|
" print(\"=================\")"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 22,
|
||||||
|
"id": "1ba9bd3d-e05b-4f00-80c9-9f543a622ee2",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"(5, 1, 0, 0, 2, 0)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 22,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"Vd"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 18,
|
||||||
|
"id": "ac643c88-e81a-47a9-aa65-71094947049e",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"(32/855*s^2 + 491/3420*s + 253/3420)/(s^3 + 379/171*s^2 + 1085/684*s + 253/684)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 18,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"f2=z^3 + x^6*z^2 + x^19\n",
|
||||||
|
"zf2=ZetaFunctions(f2)\n",
|
||||||
|
"zf2.topological_zeta(local=true, weights=[5,1,1])"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 19,
|
||||||
|
"id": "fe441461-5766-438d-9b0f-151db04e4b9b",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"(s + 23/38) * (s + 11/18) * (s + 1)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 19,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"(s^3 + 379/171*s^2 + 1085/684*s + 253/684).factor()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 20,
|
||||||
|
"id": "8d480cde-88b7-43ce-bc01-a90c66eab0c7",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"(-3/143*s + 8/143)/(s^2 + 21/13*s + 8/13)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 20,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"f4=z^3 + x^26*z + x^39\n",
|
||||||
|
"zf4=ZetaFunctions(f4)\n",
|
||||||
|
"zf4.topological_zeta(local=true, weights=[11,1,1])"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 21,
|
||||||
|
"id": "07b6c70f-84c8-48a8-95ef-21fa53ebce2f",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"(22/1989*s + 73/1989)/(s^2 + 190/117*s + 73/117)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 21,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"f5=z^3 + x^39*z + x^60\n",
|
||||||
|
"zf5=ZetaFunctions(f5)\n",
|
||||||
|
"zf5.topological_zeta(local=true, weights=[17,1,1])"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 22,
|
||||||
|
"id": "aafa5255-b9a6-493b-b8e0-30bade89c987",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"(7/234*s + 25/234)/(s^2 + 64/39*s + 25/39)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 22,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"f3=z^3 + x^13*z + x^20\n",
|
||||||
|
"zf3=ZetaFunctions(f3)\n",
|
||||||
|
"zf3.topological_zeta(local=true, weights=[6,1,1])"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 23,
|
||||||
|
"id": "e71214a3-4cf7-4ff7-b691-9bc0f077bc3b",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"(-1/8*s + 5/16)/(s^2 + 13/8*s + 5/8)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 23,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"f0=z^3 + x^2*z^2 + x^8\n",
|
||||||
|
"zf0=ZetaFunctions(f0)\n",
|
||||||
|
"zf0.topological_zeta(local=true, weights=[2,1,1])"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 24,
|
||||||
|
"id": "3b080c43-5e06-49c8-b649-5659c9a1acd7",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"(1/20*s + 13/60)/(s^2 + 33/20*s + 13/20)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 24,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"f1=z^3 + x^3*z^2 + x^10\n",
|
||||||
|
"zf1=ZetaFunctions(f1)\n",
|
||||||
|
"zf1.topological_zeta(local=true, weights=[3,1,1])"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "14950aeb-aa98-494b-b0f6-d6f02cbaec13",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "SageMath 10.5.beta8",
|
||||||
|
"language": "sage",
|
||||||
|
"name": "sagemath-devel"
|
||||||
|
},
|
||||||
|
"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.12.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 5
|
||||||
|
}
|
||||||
@ -1,14 +1,14 @@
|
|||||||
def trinomiales_general(A, Vf, Vg, Vhs, Vks, Vd, total=True):
|
def trinomiales_general(A, Vf, Vg, Vhs, Vd, total=True):
|
||||||
r"""
|
r"""
|
||||||
Return data necessary to compute the zeta functions of
|
Return data necessary to compute the zeta functions of
|
||||||
a triple singularity defined by
|
a triple singularity defined by
|
||||||
|
|
||||||
.. math::
|
.. math::
|
||||||
z^3 -3 \prod_{i=1}^h h_i^{n_i} \prod_{j=1}^h k_j f z^2
|
z^3 -3 \prod_{i=1}^h h_i^{n_i} f z^2
|
||||||
+ \prod_{i=1}^h h_i \prod_{j=1}^h k_j^{m_j} g,
|
+ \prod_{i=1}^h h_i g,
|
||||||
|
|
||||||
where :math:`f, g, h_i, k_j` are polynomials in two variables,
|
where :math:`f, g, h_i` are polynomials in two variables,
|
||||||
and :math:`n_i > 1, m_j \geq 1`.
|
and :math:`n_i \geq 1`.
|
||||||
|
|
||||||
We consider an embedded resolution of :math:`fg(f^3 - g^2)` with
|
We consider an embedded resolution of :math:`fg(f^3 - g^2)` with
|
||||||
a stratification of the exceptional divisor:
|
a stratification of the exceptional divisor:
|
||||||
@ -41,8 +41,6 @@ def trinomiales_general(A, Vf, Vg, Vhs, Vks, Vd, total=True):
|
|||||||
|
|
||||||
- ``Vhs`` -- a list of tuple whose elements are tuples `(h_i, n_i)`
|
- ``Vhs`` -- a list of tuple whose elements are tuples `(h_i, n_i)`
|
||||||
|
|
||||||
- ``Vks`` -- a list of tuple whose elements are tuples `(k_j, m_j)`
|
|
||||||
|
|
||||||
- ``Vd`` -- the vector with the intersection numbers of the strict
|
- ``Vd`` -- the vector with the intersection numbers of the strict
|
||||||
transform of :math:`f^3 - g^2` with the divisors of the resolution
|
transform of :math:`f^3 - g^2` with the divisors of the resolution
|
||||||
|
|
||||||
@ -68,10 +66,6 @@ def trinomiales_general(A, Vf, Vg, Vhs, Vks, Vd, total=True):
|
|||||||
is the vector in :math:`\mathbb{Z}^n` of the multiplicities for
|
is the vector in :math:`\mathbb{Z}^n` of the multiplicities for
|
||||||
the total transform of :math:`h_i` and the second is :math:`n_i`
|
the total transform of :math:`h_i` and the second is :math:`n_i`
|
||||||
|
|
||||||
- ``Nks`` -- a list of tuple whose elements are tuples, the first element
|
|
||||||
is the vector in :math:`\mathbb{Z}^n` of the multiplicities for
|
|
||||||
the total transform of :math:`k_j` and the second is :math:`m_j`
|
|
||||||
|
|
||||||
- ``Nd`` -- the vector in :math:`\mathbb{Z}^n` of the multiplicities for
|
- ``Nd`` -- the vector in :math:`\mathbb{Z}^n` of the multiplicities for
|
||||||
the total transform of :math:`f^3 - g^2`
|
the total transform of :math:`f^3 - g^2`
|
||||||
|
|
||||||
@ -124,18 +118,16 @@ def trinomiales_general(A, Vf, Vg, Vhs, Vks, Vd, total=True):
|
|||||||
Nf, Ng, Nd = [A1 * N0 for N0 in (Vf, Vg, Vd)]
|
Nf, Ng, Nd = [A1 * N0 for N0 in (Vf, Vg, Vd)]
|
||||||
Nhs = [(A1 * N0, h) for N0, h in Vhs]
|
Nhs = [(A1 * N0, h) for N0, h in Vhs]
|
||||||
ch = len(Nhs)
|
ch = len(Nhs)
|
||||||
Nks = [(A1 * N0, k) for N0, k in Vks]
|
NNf = Nf + sum(j * V0 for V0, j in Nhs)
|
||||||
ck = len(Nks)
|
NNg = Ng + sum(V0 for V0, j in Nhs)
|
||||||
NNf = Nf + sum(j * V0 for V0, j in Nhs) + sum(V0 for V0, j in Nks)
|
NNd = Nd + 2 * sum(V0 for V0, j in Nhs)
|
||||||
NNg = Ng + sum(j * V0 for V0, j in Nks) + sum(V0 for V0, j in Nhs)
|
|
||||||
NNd = Nd + 3 * sum(V0 for V0, j in Nks) + 2 * sum(V0 for V0, j in Nhs)
|
|
||||||
diag = vector(A.diagonal())
|
diag = vector(A.diagonal())
|
||||||
unos = vector(n * [1])
|
unos = vector(n * [1])
|
||||||
if total:
|
if total:
|
||||||
VV = Vf + Vg
|
VV = Vf + Vg
|
||||||
else:
|
else:
|
||||||
VV = Vf.parent()(0)
|
VV = Vf.parent()(0)
|
||||||
resta = VV + Vd + sum(V0 for V0, m in Vhs + Vks)
|
resta = VV + Vd + sum(V0 for V0, m in Vhs)
|
||||||
euler = (-A + 2 * identity_matrix(n)) * unos + diag - resta
|
euler = (-A + 2 * identity_matrix(n)) * unos + diag - resta
|
||||||
nus = A1 * (diag + 2 * unos) + unos
|
nus = A1 * (diag + 2 * unos) + unos
|
||||||
expos = {}
|
expos = {}
|
||||||
@ -149,7 +141,6 @@ def trinomiales_general(A, Vf, Vg, Vhs, Vks, Vd, total=True):
|
|||||||
expos[j] = ((a, b), (a / 2, NNd[j] - b), nus[j], eq, nnd)
|
expos[j] = ((a, b), (a / 2, NNd[j] - b), nus[j], eq, nnd)
|
||||||
cadenas = ('d', )
|
cadenas = ('d', )
|
||||||
cadenash = tuple(('h', h) for h in range(ch))
|
cadenash = tuple(('h', h) for h in range(ch))
|
||||||
cadenask = tuple(('k', k) for k in range(ck))
|
|
||||||
if total:
|
if total:
|
||||||
expos['f'] = ((1, 0), (0, 0), 1, False, True)
|
expos['f'] = ((1, 0), (0, 0), 1, False, True)
|
||||||
expos['g'] = ((0, 1), (0, 0), 1, False, True)
|
expos['g'] = ((0, 1), (0, 0), 1, False, True)
|
||||||
@ -157,8 +148,6 @@ def trinomiales_general(A, Vf, Vg, Vhs, Vks, Vd, total=True):
|
|||||||
expos['d'] = ((0, 0), (0, 1), 1, True, False)
|
expos['d'] = ((0, 0), (0, 1), 1, True, False)
|
||||||
for h, V0 in enumerate(Vhs):
|
for h, V0 in enumerate(Vhs):
|
||||||
expos['h', h] = ((V0[1], 1), (0, 0), 1, False, True)
|
expos['h', h] = ((V0[1], 1), (0, 0), 1, False, True)
|
||||||
for k, V0 in enumerate(Vks):
|
|
||||||
expos['k', k] = ((1, V0[1]), (0, 0), 1, False, True)
|
|
||||||
pols = {}
|
pols = {}
|
||||||
for j in range(n):
|
for j in range(n):
|
||||||
if expos[j][-1]:
|
if expos[j][-1]:
|
||||||
@ -173,8 +162,7 @@ def trinomiales_general(A, Vf, Vg, Vhs, Vks, Vd, total=True):
|
|||||||
interstrict = [(i, j) for i in range(n) for j in cadenas
|
interstrict = [(i, j) for i in range(n) for j in cadenas
|
||||||
if eval('V' + j)[i] != 0]
|
if eval('V' + j)[i] != 0]
|
||||||
interh = [(i, j) for i in range(n) for j in cadenash if Vhs[j[1]][0][i] != 0]
|
interh = [(i, j) for i in range(n) for j in cadenash if Vhs[j[1]][0][i] != 0]
|
||||||
interk = [(i, j) for i in range(n) for j in cadenask if Vks[j[1]][0][i] != 0]
|
for i, j in interdiv + interstrict + interh:
|
||||||
for i, j in interdiv + interstrict + interh + interk:
|
|
||||||
if isinstance(j, str):
|
if isinstance(j, str):
|
||||||
ep = eval('V' + j)[i]
|
ep = eval('V' + j)[i]
|
||||||
else:
|
else:
|
||||||
@ -192,7 +180,7 @@ def trinomiales_general(A, Vf, Vg, Vhs, Vks, Vd, total=True):
|
|||||||
aj, bj = expos[j][1]
|
aj, bj = expos[j][1]
|
||||||
pols[i, j] = (z ** 3 + x ** ai * y ** aj * z ** 2 +
|
pols[i, j] = (z ** 3 + x ** ai * y ** aj * z ** 2 +
|
||||||
x ** bi * y ** bj, (expos[i][2], expos[j][2], 1), ep)
|
x ** bi * y ** bj, (expos[i][2], expos[j][2], 1), ep)
|
||||||
return n, Nf, Ng, Nd, Nhs, Nks, euler, nus, pols
|
return n, Nf, Ng, Nd, Nhs, euler, nus, pols
|
||||||
|
|
||||||
|
|
||||||
def estrato(pol, pesos, euler, info=False):
|
def estrato(pol, pesos, euler, info=False):
|
||||||
@ -272,3 +260,121 @@ def zetas(n, pols, info=False):
|
|||||||
dic[c] = j
|
dic[c] = j
|
||||||
return zetatop, zetamon, dic
|
return zetatop, zetamon, dic
|
||||||
return zetatop, zetamon
|
return zetatop, zetamon
|
||||||
|
|
||||||
|
|
||||||
|
def zetas_components(n, pols, A, Vf, Vg, Vd, Nf, Ng, Nd, info=False, debug=False):
|
||||||
|
r"""
|
||||||
|
Return the topological and Igusa zeta functions from the data of
|
||||||
|
a stratification
|
||||||
|
|
||||||
|
INPUT:
|
||||||
|
|
||||||
|
- ``n`` -- the number of exceptional divisors
|
||||||
|
|
||||||
|
- ``pols`` -- a dictionary from ``trinomiales``
|
||||||
|
|
||||||
|
- ``A`` -- the incidence matrix of the resolution
|
||||||
|
|
||||||
|
- ``Vf`` -- the vector with the intersection numbers of the strict
|
||||||
|
transform of :math:`f` with the divisors of the resolution
|
||||||
|
|
||||||
|
- ``Vg`` -- the vector with the intersection numbers of the strict
|
||||||
|
transform of :math:`g` with the divisors of the resolution
|
||||||
|
|
||||||
|
- ``Vd`` -- the vector with the intersection numbers of the strict
|
||||||
|
transform of :math:`f^3 - g^2` with the divisors of the resolution
|
||||||
|
|
||||||
|
- ``Nf`` -- the vector in :math:`\mathbb{Z}^n` of the multiplicities for
|
||||||
|
the total transform of :math:`f`
|
||||||
|
|
||||||
|
- ``Ng`` -- the vector in :math:`\mathbb{Z}^n` of the multiplicities for
|
||||||
|
the total transform of :math:`g`
|
||||||
|
|
||||||
|
- ``Nd`` -- the vector in :math:`\mathbb{Z}^n` of the multiplicities for
|
||||||
|
the total transform of :math:`f^3 - g^2`
|
||||||
|
|
||||||
|
- ``info`` -- boolean (default: False), if ``True`` a dictionary giving
|
||||||
|
the powers of cyclotomic polynomials for the monodromy zeta function
|
||||||
|
is given
|
||||||
|
|
||||||
|
EXAMPLES::
|
||||||
|
|
||||||
|
sage: A = Matrix(QQ, 3, [-3, 0, 1, 0, -2, 1, 1, 1, -1])
|
||||||
|
sage: Vf = vector(QQ, [1, 0, 0])
|
||||||
|
sage: Vg = vector(QQ, [0, 1, 0])
|
||||||
|
sage: Vd = vector(QQ, [0, 0, 1])
|
||||||
|
sage: n, Nf, Ng, Nd, euler, nus, pols = trinomiales(A, Vf, Vg, Vd)
|
||||||
|
sage: zetas(n, pols, info=True)
|
||||||
|
(1/(s + 1), -t + 1, {1: 1})
|
||||||
|
"""
|
||||||
|
T = PolynomialRing(QQ, 't')
|
||||||
|
t = T.gen(0)
|
||||||
|
pares = [a for a in pols if a not in ZZ]
|
||||||
|
ceros = [i for i in range(n) if Nd[i] < 3 * Nf[i]]
|
||||||
|
Aceros = A.matrix_from_rows_and_columns(ceros, ceros)
|
||||||
|
grafoceros = Graph(Aceros)
|
||||||
|
grafoceros.relabel(ceros)
|
||||||
|
componentesceros = grafoceros.connected_components(sort=False)
|
||||||
|
for j, cpt in enumerate(componentesceros):
|
||||||
|
cpt2 = [(i, j) for i, j in pares if i in cpt or j in cpt]
|
||||||
|
componentesceros[j] = cpt + cpt2
|
||||||
|
if debug:
|
||||||
|
print('componentes ceros', componentesceros)
|
||||||
|
polos = [i for i in range(n) if Nd[i] < 2 * Ng[i]]
|
||||||
|
Apolos = A.matrix_from_rows_and_columns(polos, polos)
|
||||||
|
grafopolos = Graph(Apolos)
|
||||||
|
grafopolos.relabel(polos)
|
||||||
|
componentespolos = grafopolos.connected_components(sort=False)
|
||||||
|
for j, cpt in enumerate(componentespolos):
|
||||||
|
cpt2 = [(i, j) for i, j in pares if i in cpt or j in cpt]
|
||||||
|
componentespolos[j] = cpt + cpt2
|
||||||
|
if debug:
|
||||||
|
print('componentes polos', componentespolos)
|
||||||
|
unos = [i for i in range(n) if Nd[i] > 3 * Nf[i]]
|
||||||
|
Aunos = A.matrix_from_rows_and_columns(unos, unos)
|
||||||
|
grafounos = Graph(Aunos)
|
||||||
|
grafounos.relabel(unos)
|
||||||
|
componentesunos = grafounos.connected_components(sort=False)
|
||||||
|
for j, cpt in enumerate(componentesunos):
|
||||||
|
cpt2 = [(i, j) for i, j in pares if i in cpt or j in cpt]
|
||||||
|
componentesunos[j] = cpt + cpt2
|
||||||
|
resto = [i for i in range(n) if Nd[i] == 2 * Ng[i] == 3 * Nf[i]]
|
||||||
|
dic = [i for i in resto if Vd[i] > 0 or [j for j in unos if A[i, j] > 0]]
|
||||||
|
componentesunos += [[(i, j)] for i, j in pares if i in dic and j == 'd']
|
||||||
|
if debug:
|
||||||
|
print('componentes unos', componentesunos)
|
||||||
|
print('dicríticos ', dic)
|
||||||
|
cte = [i for i in resto if i not in dic]
|
||||||
|
Acte = A.matrix_from_rows_and_columns(cte, cte)
|
||||||
|
grafocte = Graph(Acte)
|
||||||
|
grafocte.relabel(cte)
|
||||||
|
componentescte = grafocte.connected_components(sort=False)
|
||||||
|
for j, cpt in enumerate(componentescte):
|
||||||
|
cpt2 = [(i, j) for i, j in pares if i in cpt or j in cpt]
|
||||||
|
componentescte[j] = cpt + cpt2
|
||||||
|
componentescte += [(i, j) for i, j in pares if i in dic and j in dic]
|
||||||
|
if debug:
|
||||||
|
print('componentes constante', componentescte)
|
||||||
|
res = {}
|
||||||
|
componentes = [('ceros', tuple(cpt)) for cpt in componentesceros]
|
||||||
|
componentes += [('polos', tuple(cpt)) for cpt in componentespolos]
|
||||||
|
componentes += [('unos', tuple(cpt)) for cpt in componentesunos]
|
||||||
|
componentes += [('dic', (cpt,)) for cpt in dic]
|
||||||
|
componentes += [('cte', tuple(cpt)) for cpt in componentescte]
|
||||||
|
for str, cpt in componentes:
|
||||||
|
zetatop = 0
|
||||||
|
n0 = len([i for i in cpt if i in ZZ])
|
||||||
|
zetamon = 1 / (1 - t ** 3) ** n0
|
||||||
|
for k in cpt:
|
||||||
|
zt, zm = estrato(*pols[k])
|
||||||
|
zetatop += zt
|
||||||
|
zetamon *= zm
|
||||||
|
if info:
|
||||||
|
dic = {}
|
||||||
|
for p, j in zetamon.factor():
|
||||||
|
c = p.is_cyclotomic(certificate=True)
|
||||||
|
dic[c] = j
|
||||||
|
res[str, cpt] = (zetatop, zetamon, dic)
|
||||||
|
else:
|
||||||
|
res[str, cpt] = (zetatop, zetamon)
|
||||||
|
return res
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user