Exercice 10.7

In [1]:
R.<h,d,a,b,c,A> = PolynomialRing(QQ, order='lex')
I = R.ideal(c*h - 2*A,
            (c-d)^2 + h^2 - a^2,
            d^2 + h^2 - b^2)
G = I.groebner_basis()
G
Out[1]:
[h^2 + d^2 - b^2, h*a^2 - h*b^2 + 4*d*A - 2*c*A, h*c - 2*A, h*A - 1/4*d*a^2 + 1/4*d*b^2 - 1/8*a^2*c - 3/8*b^2*c + 1/8*c^3, d*c + 1/2*a^2 - 1/2*b^2 - 1/2*c^2, a^4 - 2*a^2*b^2 - 2*a^2*c^2 + b^4 - 2*b^2*c^2 + c^4 + 16*A^2]
In [2]:
G[-1]
Out[2]:
a^4 - 2*a^2*b^2 - 2*a^2*c^2 + b^4 - 2*b^2*c^2 + c^4 + 16*A^2

On conclut que la surface d'un triangle de côtés $a,b,c$ est égale à

$$\frac{\sqrt{(-a + b - c) (-a + b + c) (a + b - c) (a + b + c)}}{4}$$
In [3]:
(G[-1] - 16*A^2).factor()
Out[3]:
(-a + b - c) * (-a + b + c) * (a + b - c) * (a + b + c)

Exercice 11.4

In [4]:
A.<cosu,sinu,cost,sint,x,y,z> = PolynomialRing(QQ, order='lex')
I = A.ideal(x - (2 + cosu)*cost,
            y - (2 + cosu) * sint,
            z - sinu,
            cosu^2 + sinu^2 - 1,
            cost^2 + sint^2 - 1)
G = I.groebner_basis()
G
Out[4]:
[cosu - 1/4*x^2 - 1/4*y^2 - 1/4*z^2 + 5/4, sinu - z, cost^2 + sint^2 - 1, cost*x + sint*y - 1/4*x^2 - 1/4*y^2 - 1/4*z^2 - 3/4, cost*y - sint*x, cost*z^2 + 3*cost + 1/4*x^3 + 1/4*x*y^2 + 1/4*x*z^2 - 13/4*x, sint*x^2 + sint*y^2 - 1/4*x^2*y - 1/4*y^3 - 1/4*y*z^2 - 3/4*y, sint*z^2 + 3*sint + 1/4*x^2*y + 1/4*y^3 + 1/4*y*z^2 - 13/4*y, x^4 + 2*x^2*y^2 + 2*x^2*z^2 - 10*x^2 + y^4 + 2*y^2*z^2 - 10*y^2 + z^4 + 6*z^2 + 9]
In [5]:
p = G[-1]
p
Out[5]:
x^4 + 2*x^2*y^2 + 2*x^2*z^2 - 10*x^2 + y^4 + 2*y^2*z^2 - 10*y^2 + z^4 + 6*z^2 + 9
In [6]:
s = SR.var('s')
for f in [sin, cos]:
    for n in [2,3]:
        print f(n*s), '=', f(n*s).simplify_trig()
sin(2*s) = 2*cos(s)*sin(s)
sin(3*s) = (4*cos(s)^2 - 1)*sin(s)
cos(2*s) = 2*cos(s)^2 - 1
cos(3*s) = 4*cos(s)^3 - 3*cos(s)
In [7]:
A.<coss,sins,cos2s,sin2s,cos3s,sin3s,X,Y,Z> = PolynomialRing(QQ, order='lex')
I = A.ideal(X - (2 + cos2s) * cos3s,
            Y - (2 + cos2s)*sin3s,
            Z - sin2s,
            sin2s - 2*coss*sins,
            sin3s - (4*coss^2 - 1)*sins,
            cos2s - (2*coss^2 - 1),
            cos3s - (4*coss^3 - 3*coss),
            sins^2 + coss^2 - 1)
J = I.elimination_ideal([coss,sins,cos2s,sin2s,cos3s,sin3s])
J
Out[7]:
Ideal (4*Y^4 + 64*Y^2*Z^4 - 76*Y^2*Z^2 - 4*Y^2 + 16*Z^10 + 72*Z^8 + 9*Z^6 - 162*Z^4 + 81*Z^2, 16*X*Z^7 - 96*X*Z^5 + 67*X*Z^3 - 3*X*Z + 8*Y^3*Z^2 - 2*Y^3 + 64*Y*Z^6 - 88*Y*Z^4 - 6*Y*Z^2 + 2*Y, 8*X*Y*Z^4 - 42*X*Y*Z^2 + 2*X*Y - 32*Y^2*Z^3 + 24*Y^2*Z - 16*Z^9 - 80*Z^7 - 51*Z^5 + 126*Z^3 - 27*Z, 2*X*Y^2 - 8*X*Z^6 + 62*X*Z^4 - 42*X*Z^2 - 4*Y^3*Z - 36*Y*Z^5 + 59*Y*Z^3 + Y*Z, 25*X^2 + 72*X*Y*Z^3 - 374*X*Y*Z - 288*Y^2*Z^2 + 225*Y^2 - 144*Z^8 - 728*Z^6 - 505*Z^4 + 1074*Z^2 - 225) of Multivariate Polynomial Ring in coss, sins, cos2s, sin2s, cos3s, sin3s, X, Y, Z over Rational Field
In [8]:
p(x=X, y=Y, z=Z) in J
Out[8]:
True

La surface paramétrèe est un tore. Le code ci-dessous permet de dessinner la surface et la courbe en 3 dimensions. À l'heure actuelle (versions de Sage jusqu'à 7.4), l'interface Jupyter de Sage ne supporte pas le dessin 3d. Cette instruction peut néanmoins être utilisée en ligne de commande, ou dans le notebook classique.

In [ ]:
s, u, t = SR.var('s, u, t')
(
    parametric_plot3d([(2 + cos(u))*cos(t), (2 + cos(u))*sin(t), sin(u)],
                      (u,-pi,pi), (t,-pi,pi))
    + parametric_plot3d([(2 + cos(2*s))*cos(3*s), (2 + cos(2*s))*sin(3*s), sin(2*s)],
                        (s,0,6*pi), color='red')
)

Exercice 12.5

In [9]:
A.<x,y,t> = PolynomialRing(QQ, order='lex')
f =  x^4*y^2 + x^2*y^4 - x^2*y^2
I = A.ideal(f.derivative(x), f.derivative(y))
I
Out[9]:
Ideal (4*x^3*y^2 + 2*x*y^4 - 2*x*y^2, 2*x^4*y + 4*x^2*y^3 - 2*x^2*y) of Multivariate Polynomial Ring in x, y, t over Rational Field

On voit clairement que l'idéal a dimension 1, et que donc le lieu critique est infini.

In [10]:
I.groebner_basis()
Out[10]:
[x^4*y + 2*x^2*y^3 - x^2*y, x^3*y^2 + 1/2*x*y^4 - 1/2*x*y^2, x^2*y^4 - 1/3*x^2*y^2, x*y^6 - 4/3*x*y^4 + 1/3*x*y^2]
In [11]:
I = A.ideal(f - t, f.derivative(x), f.derivative(y))
I
Out[11]:
Ideal (x^4*y^2 + x^2*y^4 - x^2*y^2 - t, 4*x^3*y^2 + 2*x*y^4 - 2*x*y^2, 2*x^4*y + 4*x^2*y^3 - 2*x^2*y) of Multivariate Polynomial Ring in x, y, t over Rational Field

On voit qu'il y a uniquement deux valeurs critques: $0$ et $-1/27$. L'idéal est par contre toujours de dimension 1, car il y a une infinité de points associés à ces valeurs critiques.

In [12]:
I.groebner_basis()
Out[12]:
[x^4*y - x^2*y - 6*y*t, x^2*y^2 + 3*t, x^2*t - 1/3*t, x*y^4 - x*y^2 - 6*x*t, y^2*t - 1/3*t, t^2 + 1/27*t]
In [13]:
I.dimension()
Out[13]:
1

On peut raffiner l'analyse en séparant les deux valeurs critiques. Pour la valeur critique $t=0$, il suffit de considérer l'idéal $〈f,f_x,f_y〉$. On voit qu'il s'agit d'un idéal de dimension 1, dont la variété correspond aux droites $x=0$ et $y=0$.

In [14]:
I = A.ideal(f, f.derivative(x), f.derivative(y))
I.groebner_basis()
Out[14]:
[x^4*y - x^2*y, x^2*y^2, x*y^4 - x*y^2]

Pour la valeur critique $-1/27$, nous utilisons ajoutons le polynôme $ft-1$, qui force $f$ et $t$ à être différents de $0$. Avec cette formulation, $t$ sera alors l'inverse de l'unique valeur critique non-nulle.

In [16]:
I = A.ideal(f*t - 1, f.derivative(x), f.derivative(y))
I.groebner_basis()
Out[16]:
[x^2 - 1/3, y^2 - 1/3, t + 27]

Cette fois-ci, nous trouvons un idéal de dimension $0$, qui correspond à un nombre fini de points critiques. Ces points sont définis dans $ℚ[\sqrt{1/3}]$, ce que nous vérifions (dans la suite $a=\sqrt{1/3}$)

In [17]:
I.variety()
Out[17]:
[]
In [18]:
k.<a> = QuadraticField(1/3)
k
Out[18]:
Number Field in a with defining polynomial x^2 - 1/3
In [19]:
I.variety(k)
Out[19]:
[{y: -a, t: -27, x: -a},
 {y: -a, t: -27, x: a},
 {y: a, t: -27, x: -a},
 {y: a, t: -27, x: a}]
In [20]:
f(x=a, y=a), f.derivative(x)(x=a, y=a), f.derivative(y)(x=a, y=a)
Out[20]:
(-1/27, 0, 0)