Created
November 8, 2016 14:24
-
-
Save defeo/ac4a2fd4594f119fbba24986b46808d6 to your computer and use it in GitHub Desktop.
MA2-ace TD 6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Exercice 10.1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"A.<x,y> = PolynomialRing(QQ, order='lex')\n", | |
"I = A.ideal(y^4*x + 3*x^3 - y^4 - 3*x^2, x^2*y - 2*x^2, 2*y^4*x - x^3 - 2*y^4 + x^2)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"On retrouve le générateur de $ℚ[y] ∩ I$ à la fin de la base de Gröbner" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[x^2 - 1/16*y^4, x*y^4 - y^4, y^5 - 2*y^4]" | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"I.groebner_basis()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[y^4 - 16*x^2, y*x^2 - 2*x^2, x^3 - x^2]" | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"I.change_ring(A.change_ring(names='y,x')).groebner_basis()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Une méthode alternative de calculer le même résultat" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Ideal (y^5 - 2*y^4) of Multivariate Polynomial Ring in x, y over Rational Field" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"I.elimination_ideal(x)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Exercice 10.2" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"A.<x,y,z,t> = PolynomialRing(QQ, order='lex')\n", | |
"I = A.ideal(x + y - z, x^2- 2*t^2, y^2 - 5*t^2)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[x + y - z, y^2 - 5*t^2, y*z - 1/2*z^2 - 3/2*t^2, y*t^2 + 1/6*z^3 - 17/6*z*t^2, z^4 - 14*z^2*t^2 + 9*t^4]" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"G = I.groebner_basis()\n", | |
"G" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"z^4 - 14*z^2 + 9" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"p = G[-1](t=1)\n", | |
"p" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"p(z=sqrt(2)+sqrt(5)).expand()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"y + 1/6*z^3 - 17/6*z" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"q = G[-2](t=1)\n", | |
"q" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0" | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"q(y=sqrt(5), z=sqrt(2)+sqrt(5)).expand()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Exercice 10.5" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[X + 126734872901588973582/3395909056778368040767*Y^27 - 1059177032400400444180/3395909056778368040767*Y^26 + 2285808466233304718588/3395909056778368040767*Y^25 + 557276448172777618804/3395909056778368040767*Y^24 + 10527015879533829422789/3395909056778368040767*Y^23 + 4534298082785732166884/3395909056778368040767*Y^22 - 21929288596306940961744/3395909056778368040767*Y^21 + 56329160184432659174606/3395909056778368040767*Y^20 - 32621295253356715497026/3395909056778368040767*Y^19 - 25658713786866124611709/3395909056778368040767*Y^18 + 43205590840914603717979/3395909056778368040767*Y^17 - 165768748128993483079350/3395909056778368040767*Y^16 + 28975447087098703454686/3395909056778368040767*Y^15 + 52105040032950372573350/3395909056778368040767*Y^14 - 31519296754205845938329/3395909056778368040767*Y^13 + 162437763572247864806756/3395909056778368040767*Y^12 - 3236556162508197221408/3395909056778368040767*Y^11 - 40884339127343714124472/3395909056778368040767*Y^10 + 11911188972708254939015/3395909056778368040767*Y^9 - 54062861559277191650146/3395909056778368040767*Y^8 - 17328150062224139585228/3395909056778368040767*Y^7 + 10984661610735135556071/3395909056778368040767*Y^6 - 5735303903628078892952/3395909056778368040767*Y^5 + 792223388139721445320/3395909056778368040767*Y^4 + 13714655845428915245369/3395909056778368040767*Y^3 + 785919437095244302380/3395909056778368040767*Y^2 + 1688372769006791192973/3395909056778368040767*Y - 270367022566925300594/3395909056778368040767, Y^28 - 8*Y^27 + 16*Y^26 + 249/2*Y^24 + 24*Y^23 - 64*Y^22 + 2*Y^21 - 757/2*Y^20 - 56*Y^19 + 96*Y^18 - 6*Y^17 + 379*Y^16 + 72*Y^15 - 63*Y^14 + 14*Y^13 - 251/2*Y^12 - 32*Y^11 + 15*Y^10 - 18*Y^9 - 1/2*Y^8 + 8*Y^5 + 1/2]" | |
] | |
}, | |
"execution_count": 11, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"A.<X,Y> = PolynomialRing(QQ, order='lex')\n", | |
"I = A.ideal(X^4 + Y^4 - 1, X^5*Y^2 - 4*X^3*Y^3 + X^2*Y^5 - 1)\n", | |
"G = I.groebner_basis()\n", | |
"G" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Y^28 - 8*Y^27 + 16*Y^26 + 249/2*Y^24 + 24*Y^23 - 64*Y^22 + 2*Y^21 - 757/2*Y^20 - 56*Y^19 + 96*Y^18 - 6*Y^17 + 379*Y^16 + 72*Y^15 - 63*Y^14 + 14*Y^13 - 251/2*Y^12 - 32*Y^11 + 15*Y^10 - 18*Y^9 - 1/2*Y^8 + 8*Y^5 + 1/2" | |
] | |
}, | |
"execution_count": 12, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"G[-1]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Y^28 - 8*Y^27 + 16*Y^26 + 249/2*Y^24 + 24*Y^23 - 64*Y^22 + 2*Y^21 - 757/2*Y^20 - 56*Y^19 + 96*Y^18 - 6*Y^17 + 379*Y^16 + 72*Y^15 - 63*Y^14 + 14*Y^13 - 251/2*Y^12 - 32*Y^11 + 15*Y^10 - 18*Y^9 - 1/2*Y^8 + 8*Y^5 + 1/2" | |
] | |
}, | |
"execution_count": 13, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"q = G[-1].univariate_polynomial()\n", | |
"q" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Y^28 - 8*Y^27 + 16*Y^26 + 249/2*Y^24 + 24*Y^23 - 64*Y^22 + 2*Y^21 - 757/2*Y^20 - 56*Y^19 + 96*Y^18 - 6*Y^17 + 379*Y^16 + 72*Y^15 - 63*Y^14 + 14*Y^13 - 251/2*Y^12 - 32*Y^11 + 15*Y^10 - 18*Y^9 - 1/2*Y^8 + 8*Y^5 + 1/2" | |
] | |
}, | |
"execution_count": 14, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"q.factor()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(Y - 0.966506296874216) * (Y - 0.721113386166218) * (Y + 0.597428986963397) * (Y + 0.924209668349044) * (Y^2 - 9.64588608545517*Y + 27.2478986510189) * (Y^2 - 2.07381031598562*Y + 1.07569410961252) * (Y^2 - 0.893217025895166*Y + 0.295336342296285) * (Y^2 - 0.779939824160087*Y + 0.428337852683492) * (Y^2 - 0.121266599180110*Y + 1.03967187384805) * (Y^2 - 0.0603056667782709*Y + 0.938887472264107) * (Y^2 + 0.0272947089885237*Y + 1.03310413303256) * (Y^2 + 0.228048118439437*Y + 0.407906285068887) * (Y^2 + 0.525249644063553*Y + 0.343345271720577) * (Y^2 + 1.29090151259232*Y + 0.509689390328851) * (Y^2 + 1.65011569846010*Y + 4.77398949422654) * (Y^2 + 2.01879686263848*Y + 1.01964113877716)" | |
] | |
}, | |
"execution_count": 15, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"q.change_ring(RR).factor()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[(-0.924209668349044, 1),\n", | |
" (-0.597428986963397, 1),\n", | |
" (0.721113386166218, 1),\n", | |
" (0.966506296874216, 1)]" | |
] | |
}, | |
"execution_count": 16, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"q.roots(RR)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkkAAAJJCAYAAAC+gKM0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xl4lOX59vEzyRAgQMK+yyogqyAgpSgqiktVUFHIiCLU\nnYqCWqqta7XuK1q1at2KDKj8EIrigmAVcAFB2QVREQQCEZIAAZIh8/5xvWMIBMwyM/cs389xzPGE\nSTLPJZHkzL1cd1IgEAgIAAAAJSS7LgAAACAaEZIAAABKQUgCAAAoBSEJAACgFIQkAACAUhCSAAAA\nSkFIAgAAKAUhCQAAoBSeSN+wqKhImzZtUq1atZSUlBTp2wMAgAQWCAS0c+dONW3aVMnJRx4rinhI\n2rRpk4466qhI3xYAAOBXGzZsUPPmzY/4MREPSbVq1ZJkxaWnp//mx2dmZmry5MnhLivu7hPJe3Gf\n6L8X94n+e3Gf6L8X94n+e5XlPnl5eTrqqKN+zSNHEvGQFJxiS09PL1NI8ng8Zfq4yoq3+0TyXtwn\n+u/FfaL/Xtwn+u/FfaL/XuW5T1mW/ET9wm2v1xtX94mkePu742vEfVyIt787vkbcx4VY/btLCgQC\ngZC+4m/Iy8tTRkaGcnNzI5Zgo8mgQYM0Y8YM12XgCPgaRT++RtGPr1H0S9SvUXlySNSPJAEAALhA\nSIqweBxGjTd8jaIfX6Pox9co+vE1+m1MtwEAgITBdBsAAEAlEZIAAABKEfE+SUGZmZnyeDzyer3M\niwIAgLDy+Xzy+Xzy+/1l/hzWJAEAgITBmiQAAIBKIiQBAACUgpAEAABQCkISAABAKQhJAAAApSAk\nAQAAlIKQBAAAUApCEgAAQCkISQAAAKUgJAEAAJSCkAQAAFAKQhIAAEApCEkAAAClICQBAACUgpAE\nAABQCkISAABAKQhJAAAApSAkAQAAlIKQBAAAUApCEgAAQCkISQAAAKUgJAEAAJSCkAQAAFAKQhIA\nAEApPK5unJmZKY/HI6/XK6/X66oMAACQAHw+n3w+n/x+f5k/JykQCATCWNMh8vLylJGRodzcXKWn\np0fy1gAAIMGVJ4cw3QYAAFAKQhIAAEApCEkAAAClICQBAACUgpAEAABQCkISAABAKQhJAAAApSAk\nAQAAlIKQBAAAUApCEgAAQCkISQAAAKUgJAEAAJSCkAQAAFAKQhIAAEApCEkAAAClICQBAACUgpAE\nAABQCkISAABAKQhJAAAApQh5SHrggQeUnJysG2+8MdQvDQAAEDEhDUkLFy7U888/r2OPPTaULwsA\nABBxIQtJu3bt0iWXXKIXX3xRtWvXDtXLAgAAOBGykPSnP/1J5557rgYMGBCqlwQAAHDGE4oXmTx5\nsr7++mstWrQoFC8HAADgXKVD0saNGzV27FjNnj1bVapUKfPnZWZmyuMpeXuv1yuv11vZkgAAAOTz\n+eTz+Uo85/f7y/z5SYFAIFCZAqZPn64LLrhAKSkpCr7U/v37lZSUpJSUFO3bt09JSUm/fnxeXp4y\nMjKUm5ur9PT0ytwaAACgXMqTQyo9knTaaadp2bJlJZ4bOXKkOnbsqFtuuaVEQAIAAIgVlQ5JNWrU\nUKdOnQ55rl69eurYsWNlXx4AAMCJsHTcZvQIAADEupDsbjvYnDlzwvGyABJcUZH0ySfStGnSggXS\naadJ99/vuioA8SosIQkAQm3FCqlbNwtKQevWEZIAhA8H3AKICUuXWkAaNkxavlxq1apkYAKAUCMk\nAYgJhYV2HTxY6txZSk6WKtfABACOjJAEICYEQ1KwZ21KCiNJAMKLkAQgJuzfb9dgSGIkCUC4EZIA\nxITgSQIHhiRGkgCEEyEJQEwoKLBrMCR5PIwkAQgvQhKAmBBck1S1ql2ZbgMQboQkADHh4Ok2RpIA\nhFtUh6S8POmJJ1xXASAaHDzdlpJCSAIQXlEdkv74R2ncOOmqq1xXAsC14EhStWp2ZSQJQLhFdUia\nNEnq0EF64QXp4otdVwPApeBIUnBNEiEJQLhFdUhKTZVWrpSOPVby+aRLLnFdEQBXgiNJqal2JSQB\nCLeoDkmS7WBZvFjq2lV6/XVp+HDXFQFwIbi7rXp1uxKSAIRb1IckqTgodetmU3Dnnee6IgCRFgxJ\nB65JAoBwiomQJNk3xCVLpN/9Tpo+XTrjDNcVAYikffvsGpxuq1KFkSQA4RUzIUmyEaX586WTTpI+\n+EA691zXFQGIlIPXJAVbAQBAuMRUSJIsKM2ZI/3+99LMmdLAga4rAhAJwd1tyf//u1YwLAFAuMRc\nSJKKR5ROO02aPdsCEwddAvEtuCYpKBiSgiNMABBqMRmSgj78UBo8WPrsM+mEEwhKQDwLjiQFBfsl\n5edHvhYAiSGmQ5Ikvf22NGiQBaV+/QhKQLwqLJSSkor/HBxJIiQBCBdnm2gzMzPl8Xjk9Xrl9Xor\n9VrTp0vnn2+B6bjjpEWL2B4MxJuDQ1KwFcDu3W7qARBbfD6ffD6f/OWYo3cWJSZPnqz09PSQvd60\nadZoctIkazy5bBlBCYgnfn/JkBScbiMkASiL4KBMXl6eMjIyyvQ5MT/ddqDXX5cuv1xavVrq0YMF\nnUA8YSQJQKTFVUiSpBdflC69VFq+XOrc+dDFngBiU0FB8fZ/qfh4EtYkAQiXuAtJkvTaa9LVV0tr\n1kjt2/NNFIgHhYUlQ1KNGnZlJAlAuMRlSJKk556Txo2T1q+XOnZkRAmIdQdPtwVHkghJAMIlbkOS\nJD32mHTzzdJPP0lHH82IEhDL/H4pJaX4z8GRJP5dAwiXuA5JkvTww9Kf/yxt2CC1bSvl5bmuCEBF\nFBSUDEk1a9qVkAQgXOI+JEnSQw9Jd90lbdkitWkj5eS4rghAefn9Jdt6BEMS020AwiUhQpIk3Xmn\n9Mgj0i+/2GJughIQWw6ebgu2OSEkAQiXhAlJknTTTdL990vbttnU29atrisCUFZ+v1SlSvGfg71o\nmW4DEC4JFZIk6ZZbpCeekLZvl9q1kzZudF0RgLI4OCTVrm1XQhKAcEm4kCRJN9wgvfCCLeLu1Ena\ntMl1RQB+y/79JUMSa5IAhFtChiRJuuIK6aWXpJ07pQ4drJ8SgOi1f3/xeW1ScWNJRpIAhEvChiRJ\nGjVKeuUV+020Y0dp7VrXFQE4nINDkmTNJQlJAMIloUOSJF12mTR5srR3r9S1q7RiheuKAJSGkAQg\n0hI+JEnS0KHSjBl27EGvXgQlIBoVFUnVqpV8LiWFkAQgfAhJ/98550jTpllX3+OOkxYvdl0RgAMF\nAlJaWsnnUlJsFBgAwoGQdIBBg6T33rNh/T59pPnzXVcE4EDB89qCPB5CEoDwISQdZOBA6eOP7e2T\nTyYoAdEgGIQOHkmqUoWQBCB8CEmlOOEEad48e/ukk6Q5c9zWAyS67Gy7Bo8iCapaVdq3L/L1AEgM\nhKTD6NNHWrDAerEMHCi9+67rioDEtX27XWvVKvl81aq2jhAAwoGQdAS9e0uLFtmQfnBhN4DIC4ak\ng0eSqlcnJAEIH0LSb+jWTfrmG/uNdcgQ6a23XFcEJJ5ffrHrwSEpLc3OdAOAcCAklUGHDtLXX1uP\nlqFDpYkTXVcEJJZgSGrQoOTztWoRkgCEDyGpjDp0kFatst9cL71Uev551xUBiSM43Va/fsnnMzKs\nySQAhIPH1Y0zMzPl8Xjk9Xrl9XpdlVEuLVtKa9bYOW9XX239lK691nVVQPzbscOupYUkyUaTPM6+\nmwGIBT6fTz6fT/5yDD87+7YyefJkpaenu7p9hTVtagfhtm8vjR4t7dkj3Xij66qA+BYMSU2alHy+\nXj27btoktWgR2ZoAxJbgoExeXp4yDl7geBhMt1VAw4bSd99JdetKN90k/eMfrisC4ltOjl0P/r0q\nOLL088+RrQdAYiAkVVD9+tK6dRaYbrtNuv121xUB8Ss3V0pKOvT5Ro3sSkgCEA6EpEqoXduCUtOm\n0r33SuPHu64IiE95eXaY7cGaNbPr5s2RrQdAYiAkVVLNmrZG6aijpIcflq6/3nVFQPzZudOauh6s\nVSu7EpIAhAMhKQTS0myNUps20lNPSVde6boiIL7s2mUNXQ/WsqVdt2yJbD0AEgMhKURSU6Vvv5WO\nOUZ68UVp+HDXFQHxIz/fmrkeLC3Nrtu2RbYeAImBkBRCHo+0YoUdZTJpknThha4rAuLDnj2HHm4b\n5PFI2dmRrQdAYiAkhVhysrRkidSrlzR1qh2MC6By9u07dPt/UNWqxR25ASCUCElhkJwsffGF1K+f\n9M470mmncXQCUBl+v/UlK01amu1+A4BQIySFSXKyNG+edOqp0kcfSSecQFACKsLvlwKBQ48kCUpP\nt4XdABBqhKQwmz1bGjRI+uwz6fjjCUpAeW3YYNdgT6SD1a8v7d0buXoAJA5CUgRMn26LuL/6Sure\nnaAElMeaNXZt3rz09zdpYqNN/LsCEGqEpAh5801rC7BsmdShg1RQ4LoiIDb8+KNdg40jD3bUUXal\nVxKAUCMkRdDEidK111rjyfbtmSIAyuL77+16zDGlv79dO7t+801k6gGQOAhJEfbMM9K4cdL69fbN\nPT/fdUVAdPvpJ7u2bVv6+7t2tevy5ZGpB0DiICQ58Nhj0q23Shs32lEm9HgBDm/zZtst6vGU/v7u\n3e0aXLsEAKFCSHLkvvuku++WsrKko4+Wtm51XREQnbKySj+3Lah2bSkpqXhaDgBChZDk0B13SBMm\nSDt22BqlTZtcVwREn+3bD99tOygtrbhVAACECiHJsTFjpOeek3JzbWFqcP0FALNzp1Sv3pE/pm5d\nDrkFEHqEpChw9dXSSy9Z1+AOHeyQXABm717rhXQkTZrQdRtA6BGSosSoUdK0adY/qWdPaelS1xUB\n7m3fbkeStGlz5I9r184aShKUAIQSISmKDB4szZwpFRZKvXtLixe7rghw6/PP7Rrc5n84xx1n1/nz\nw1sPgMRCSIoyZ50lffCBtH+/1KeP9OGHrisC3An+otCr15E/7vjj7bpoUXjrAZBYCElR6NRTpTlz\nrDfMmWfa6BKQiILr83r0OPLHdeli1/Xrw1sPgMTiLCRlZmZq0KBB8vl8rkqIav3722/RVapIgwbZ\nIblAolm71v4NVKt25I8L9krauDEydQGIPT6fT4MGDVJmZmaZPycpEAgEwljTIfLy8pSRkaHc3Fyl\n/1bzE+jbb62j8L59ks8nDRvmuiIgcpo2tc0M2dm//bFVq9qI0ldfhb8uALGrPDmE6bYo16GD7XSr\nXl3KzLQjTYBEsWuXlJFRto9NSytbmAKAsiIkxYB27aR166xh3k03SQ8/7LoiIDL27pXq1Cnbx2Zk\nSDk54a0HQGIhJMWIxo1tfUa9etL48dJDD7muCAg/v1+qX79sH9u4sZSfH956ACQWQlIMqVtX+u47\nqUED6S9/ka6/3nVFQPjs3WuNJBs3LtvHt2hhocrvD29dABIHISnG1K5tp523aSM99ZR16gbi0Xff\n2bVp07J9fIcOdv366/DUAyDxEJJiUM2atuutc2fplVekyy5zXREQeqtX27Vt27J9fLDhZLBLNwBU\nFiEpRnk8tuutSxfptdekCy90XREQWmvX2vWYY8r28SeeaFdGkgCECiEphiUnS998YwfiTp1qx5gU\nFbmuCgiNH36wa+fOZfv4unXt38S334avJgCJhZAU45KT7byqwYOlL7+0M6wISogH69dbF+3atcv+\nOenp0o8/hq0kAAmGkBQn3n5bGjLEug337k1QQuzbtMm6aJfHUUdJ27aFpx4AiYeQFEfeeku66CI7\n861tWykvz3VFQMVlZ0u1apXvczp1siN86JcEIBQISXHmjTeksWNtyqFdO4ISYldurjVPLY++fe36\n4YehrwdA4iEkxaHHH5fuu0/aupWghNi1Z4/UsmX5Puf88+06a1bo6wGQeAhJcerWW4uDUuvW0saN\nrisCyi64sy3YILKsWrSQqlShVxKA0CAkxbFbb7VRpR07bERp+XLXFQFls2CBXbt3L//nNmliXekB\noLIISXFu7Fjb+VZQYB2JV6xwXRHw27780q79+5f/c3v2lHbulHJyQlsTgMRDSEoAgwZJM2dKhYX2\n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\n9NlnritCJEyZIu3eLV1xhetKEEm7dtkvRb17u64Eicrn82nQoEHKzMws8+ckBQKR7X2al5enjIwM\n5ebmKj09PZK3RpSaM8fWphQVSc88wxlY8a5XLzsrLT/femghMTz7rDR6tPTqq9KIEa6rQSIrTw5h\nug3ODRggLVwo1awpXXONNGaM64oQLnv3SkuWSF26EJASzVtv2XXoULd1AOVBSEJU6N7ddju1bSs9\n/bQ0cqTrihAOd99tI4Y0FU08X35pGzUIx4glhCREjbQ0afVqqXNnG5I/5RTr0Iv48eKLUo0aktfr\nuhJE0ooVtibprLNcVwKUDyEJUcXjsW3CAwbYqezNmkkbN7quCqHwySdSdrZ00UWuK0GkBburjxvn\ntg6gvAhJiDrJydJHH9nUzNat0jHHSOvXu64KlTVmjJSUZK0fkFhmzbI1h507u64EKB9CEqLWHXdI\n//mP7YI65hhp3jzXFaGili61xymncLhpotm4UdqyheNnEJsISYhql1wivfmmrU3q3196+GHXFaEi\n/vhHu770kts6EHn332/XW25xWwdQEYQkRL0hQ6xTb5061oAy+AMXsWHdOumrr+xQ45YtXVeDSJs2\nzRbr9+3ruhKg/AhJiAnt2lmLgI4dpZdfls47z7aSI/pdfrld//Uvt3Ug8lassH+3p57quhKgYghJ\niBmpqbau5fjjpenTLTht3+66KhzJxo22q+2441i0m4iuu86ujz3mtg6goghJiCkej/TFF3a8wfff\nS0cdZUdcIDpdfrkUCEgvvOC6EkRaTo70v/9JXbtak1ggFhGSEJP++U9p4kRp3z6pTx/p3XddV4SD\nrVolffihHUFy3HGuq0GkjR1rATnYIwmIRYQkxKzhw63hZEqKdPbZ0t//7roiHGjIEPsh+cYbritB\npBUVSZMnS40bSwMHuq4GqDhCEmLaCSdI331nvXfuvFMaPJgF3dFgyhQbSbrgAltsj8Ry3302yvvX\nv7quBKicpEAgEIjkDfPy8pSRkaHc3Fylp6dH8taIYwUF1kfpiy9sm/nixVLduq6rSkxFRdauYe9e\naccOO5MPiaVePfv679xpHfSBaFKeHML/vogLqanS55/bOoj166UWLWwnHCLviiukvDzpnnsISIlo\n5kzbdTpiBAEJsY+RJMSd116TRo2yc8KmTLG1MYiMVatsq3+rVrb7EImnbVvpxx9tFJFv8YhGjCQh\n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\n", | |
"text/plain": [ | |
"Graphics object consisting of 2 graphics primitives" | |
] | |
}, | |
"execution_count": 17, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"(implicit_plot(I.0, (X,-5,5), (Y,-5,5))\n", | |
" + implicit_plot(I.1, (X, -5, 5), (Y, -5, 5)))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"L'avant-dernier polynôme de la base de Gröbner nous permet de calculer $X$ en fonction de $Y$" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"X + 126734872901588973582/3395909056778368040767*Y^27 - 1059177032400400444180/3395909056778368040767*Y^26 + 2285808466233304718588/3395909056778368040767*Y^25 + 557276448172777618804/3395909056778368040767*Y^24 + 10527015879533829422789/3395909056778368040767*Y^23 + 4534298082785732166884/3395909056778368040767*Y^22 - 21929288596306940961744/3395909056778368040767*Y^21 + 56329160184432659174606/3395909056778368040767*Y^20 - 32621295253356715497026/3395909056778368040767*Y^19 - 25658713786866124611709/3395909056778368040767*Y^18 + 43205590840914603717979/3395909056778368040767*Y^17 - 165768748128993483079350/3395909056778368040767*Y^16 + 28975447087098703454686/3395909056778368040767*Y^15 + 52105040032950372573350/3395909056778368040767*Y^14 - 31519296754205845938329/3395909056778368040767*Y^13 + 162437763572247864806756/3395909056778368040767*Y^12 - 3236556162508197221408/3395909056778368040767*Y^11 - 40884339127343714124472/3395909056778368040767*Y^10 + 11911188972708254939015/3395909056778368040767*Y^9 - 54062861559277191650146/3395909056778368040767*Y^8 - 17328150062224139585228/3395909056778368040767*Y^7 + 10984661610735135556071/3395909056778368040767*Y^6 - 5735303903628078892952/3395909056778368040767*Y^5 + 792223388139721445320/3395909056778368040767*Y^4 + 13714655845428915245369/3395909056778368040767*Y^3 + 785919437095244302380/3395909056778368040767*Y^2 + 1688372769006791192973/3395909056778368040767*Y - 270367022566925300594/3395909056778368040767" | |
] | |
}, | |
"execution_count": 18, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"G[-2]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[]" | |
] | |
}, | |
"execution_count": 19, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"I.variety()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[{Y: -1.00939843131924 - 0.0274944653961864*I, X: -0.262624822031785 - 0.523806714899075*I},\n", | |
" {Y: -1.00939843131924 + 0.0274944653961864*I, X: -0.262624822031785 + 0.523806714899075*I},\n", | |
" {Y: -0.924209668349044, X: 0.721113386166218},\n", | |
" {Y: -0.825057849230049 - 2.02318289822013*I, X: -0.825057716113690 + 2.02318284841370*I},\n", | |
" {Y: -0.825057849230049 + 2.02318289822013*I, X: -0.825057716113690 - 2.02318284841370*I},\n", | |
" {Y: -0.645450756296162 - 0.305094594389287*I, X: 0.0606332995900556 + 1.01783863005335*I},\n", | |
" {Y: -0.645450756296162 + 0.305094594389287*I, X: 0.0606332995900556 - 1.01783863005335*I},\n", | |
" {Y: -0.597428986963397, X: 0.966506296874216},\n", | |
" {Y: -0.262624822031776 - 0.523806714899069*I, X: -1.00939843131924 - 0.0274944653961864*I},\n", | |
" {Y: -0.262624822031776 + 0.523806714899069*I, X: -1.00939843131924 + 0.0274944653961864*I},\n", | |
" {Y: -0.114024059219719 - 0.628414512076182*I, X: 0.0301528333891355 - 0.968492787222865*I},\n", | |
" {Y: -0.114024059219719 + 0.628414512076182*I, X: 0.0301528333891355 + 0.968492787222865*I},\n", | |
" {Y: -0.0136473544942618 - 1.01632567750100*I, X: 0.446608512947587 + 0.309640401851934*I},\n", | |
" {Y: -0.0136473544942618 + 1.01632567750100*I, X: 0.446608512947587 - 0.309640401851934*I},\n", | |
" {Y: 0.0301528333891355 - 0.968492787222865*I, X: -0.114024059219717 - 0.628414512076185*I},\n", | |
" {Y: 0.0301528333891355 + 0.968492787222865*I, X: -0.114024059219717 + 0.628414512076185*I},\n", | |
" {Y: 0.0606332995900551 - 1.01783863005335*I, X: -0.645450756296168 + 0.305094594389296*I},\n", | |
" {Y: 0.0606332995900551 + 1.01783863005335*I, X: -0.645450756296168 - 0.305094594389296*I},\n", | |
" {Y: 0.389969912080043 - 0.525605670018670*I, X: 1.03690515799281 - 0.0228430063789460*I},\n", | |
" {Y: 0.389969912080043 + 0.525605670018670*I, X: 1.03690515799281 + 0.0228430063789460*I},\n", | |
" {Y: 0.446608512947583 - 0.309640401851943*I, X: -0.0136473544942619 + 1.01632567750100*I},\n", | |
" {Y: 0.446608512947583 + 0.309640401851943*I, X: -0.0136473544942619 - 1.01632567750100*I},\n", | |
" {Y: 0.721113386166218, X: -0.924209668349044},\n", | |
" {Y: 0.966506296874216, X: -0.597428986963396},\n", | |
" {Y: 1.03690515799281 - 0.0228430063789459*I, X: 0.389969912080024 - 0.525605670018678*I},\n", | |
" {Y: 1.03690515799281 + 0.0228430063789459*I, X: 0.389969912080024 + 0.525605670018678*I},\n", | |
" {Y: 4.82294304272759 - 1.99677716774417*I, X: -56.0180043338967 + 43.8237865954014*I},\n", | |
" {Y: 4.82294304272759 + 1.99677716774417*I, X: -56.0180043338967 - 43.8237865954014*I}]" | |
] | |
}, | |
"execution_count": 20, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"I.variety(CC)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Exercice 10.6" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[u - z, v^2 - y*z, v*x - z^2, v*z^2 - x*y*z, x^2*y*z - z^4]" | |
] | |
}, | |
"execution_count": 21, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"A.<u,v,x,y,z> = PolynomialRing(QQ, order='lex')\n", | |
"I = A.ideal(v*x - u^2, u*y - v^2, z - u)\n", | |
"G = I.groebner_basis()\n", | |
"G" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"L'idéal obtenu par élimination contient une hyper-surface parasite $z=0$. À l'aide d'une variable $t$, on peut forcer les dénominateurs $u$ et $v$ à ne pas s'annuler en ajoutant le polynôme $1 - uvt$ à l'idéal." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[t*x*y - 1, t*y*z^2 - v, t*z^3 - x, u - z, v^2 - y*z, v*x - z^2, v*z - x*y, x^2*y - z^3]" | |
] | |
}, | |
"execution_count": 22, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"A.<t,u,v,x,y,z> = PolynomialRing(QQ, order='lex')\n", | |
"I = A.ideal(v*x - u^2, u*y - v^2, z - u, 1 - u*v*t)\n", | |
"G = I.groebner_basis()\n", | |
"G" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[t + 1/2*x^2*y - 1/2*x^2 + x + 1/2*y + 1/2, u + 1/2*y - 1/2, x^2*y^2 - 2*x^2*y + x^2 + 4*x*y - 4*x + y^2 + 3]" | |
] | |
}, | |
"execution_count": 23, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"A.<t,u,x,y> = PolynomialRing(QQ, order='lex')\n", | |
"I = A.ideal(t^2 + t + 1 - x,\n", | |
" (t^2 - 1) - y*(t^2 + 1),\n", | |
" 1 - u*(t^2+1))\n", | |
"G = I.groebner_basis()\n", | |
"G" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "SageMath 6.10", | |
"language": "", | |
"name": "sagemath" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 2 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython2", | |
"version": "2.7.10" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 1 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment