1 | initial version |

We can consider the Weierstrass equation $f(x,y) = 0$ (which is quadratic in $y$) and ask when the discriminant with respect to $y$ (which is a polynomial in $x$) is nonnegative (so that there is a real solution):

```
E = EllipticCurve([1,0,1,-234,1352])
f = E.defining_polynomial().subs({f.parent().gen(2) : 1})
R.<x> = QQ[]
S.<y> = R[]
discr = S(f).discriminant()
components = solve(SR(discr) >= 0, x)
```

This gives a list of intervals, which describe the real connected components:

```
[[x >= -13/8*sqrt(65) - 37/8, x <= 13/8*sqrt(65) - 37/8], [x >= 9]]
```

You can ask to which one a certain point `P`

belongs:

```
P = E.gens()[0]
px = P.xy();
component_index = [all(bool(eqn.subs(x=px)) for eqn in component) for component in components].index(True)
print('The point {} lies on component {}'.format(P, components[component_index]))
```

In this case:

```
The point (-16 : 40 : 1) lies on component [x >= -13/8*sqrt(65) - 37/8, x <= 13/8*sqrt(65) - 37/8]
```

2 | No.2 Revision |

We can consider the Weierstrass equation $f(x,y) = 0$ (which is quadratic in $y$) and ask when the discriminant with respect to $y$ (which is a polynomial in $x$) is nonnegative (so that there is a real solution):

```
E = EllipticCurve([1,0,1,-234,1352])
f = E.defining_polynomial().subs({f.parent().gen(2) : 1})
R.<x> = QQ[]
S.<y> = R[]
discr = S(f).discriminant()
components = solve(SR(discr) >= 0, x)
```

This gives a list of intervals, which describe the real connected components:

```
[[x >= -13/8*sqrt(65) - 37/8, x <= 13/8*sqrt(65) - 37/8], [x >= 9]]
```

You can ask to which one a certain point `P`

belongs:

```
P = E.gens()[0]
px =
```~~P.xy();
~~P.xy()[0];
component_index = [all(bool(eqn.subs(x=px)) for eqn in component) for component in components].index(True)
print('The point {} lies on component {}'.format(P, components[component_index]))

In this case:

```
The point (-16 : 40 : 1) lies on component [x >= -13/8*sqrt(65) - 37/8, x <= 13/8*sqrt(65) - 37/8]
```

3 | No.3 Revision |

We can consider the Weierstrass equation $f(x,y) = 0$ (which is quadratic in $y$) and ask when the discriminant with respect to $y$ (which is a polynomial in $x$) is nonnegative (so that there is a real solution):

`E = `~~EllipticCurve([1,0,1,-234,1352])
~~EllipticCurve([1,69,0,1365,8281])
f = E.defining_polynomial().subs({f.parent().gen(2) : 1})
R.<x> = QQ[]
S.<y> = R[]
discr = S(f).discriminant()
components = solve(SR(discr) >= 0, x)

This gives a list of intervals, which describe the real connected components:

`[[x >= -13/8*sqrt(65) - `~~37/8, ~~221/8, x <= 13/8*sqrt(65) - ~~37/8], ~~221/8], [x >= ~~9]]
~~-14]]

You can ask to which one a certain point `P`

belongs:

```
P = E.gens()[0]
px = P.xy()[0];
component_index = [all(bool(eqn.subs(x=px)) for eqn in component) for component in components].index(True)
print('The point {} lies on component {}'.format(P, components[component_index]))
```

In this case:

`The point `~~(-16 ~~(-39 : ~~40 ~~52 : 1) ~~lies ~~is on component [x >= -13/8*sqrt(65) - ~~37/8, ~~221/8, x <= 13/8*sqrt(65) - ~~37/8]
~~221/8]

4 | No.4 Revision |

```
E = EllipticCurve([1,69,0,1365,8281])
f = E.defining_polynomial().subs({f.parent().gen(2) : 1})
R.<x> = QQ[]
S.<y> = R[]
discr = S(f).discriminant()
components = solve(SR(discr) >= 0, x)
```

This gives a list of intervals, which describe the real connected components:

```
[[x >= -13/8*sqrt(65) - 221/8, x <= 13/8*sqrt(65) - 221/8], [x >= -14]]
```

You can ask to which one a certain point `P`

belongs:

```
P = E.gens()[0]
px = P.xy()[0];
component_index = [all(bool(eqn.subs(x=px)) for eqn in component) for component in components].index(True)
print('The point {} lies on component {}'.format(P, components[component_index]))
```

In this case:

`The point (-39 : 52 : 1) `~~is ~~lies on component [x >= -13/8*sqrt(65) - 221/8, x <= 13/8*sqrt(65) - 221/8]

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.