Sage中两方程组的实解

2024-05-19 03:20:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码(SageMath 9.3),它决定了 两个方程组的解(第一个表示曲线,第二个表示水平线;常用解表示它们的交点):

x, y = var('x, y')
p1 = y^2 - x^3 + x - 1 == 0
p2 = y - 10 == 0
sols = solve([p1, p2], x, y)
sols

输出:

[[x == 4.698114754098361, y == 10.0],
 [x == (-2.349057376230034 + 3.943882816522595*I), y == 10.0],
 [x == (-2.349057376230034 - 3.943882816522595*I), y == 10.0]]

我的问题是:我如何才能改变这一点,从而只得到真正的解决方案


Tags: 代码var方程组解决方案曲线p2solvep1
1条回答
网友
1楼 · 发布于 2024-05-19 03:20:29

椭圆曲线与水平线的交点

这里有三种方法可以找到交叉点, 或者它的x坐标。可能还有更多的方法

使用solve

一种方法是像以前一样找到所有复杂的解决方案:

sage: x, y = var('x, y')
sage: p1 = y^2 - x^3 + x - 1 == 0
sage: p2 = y - 10 == 0
sage: sols = solve([p1, p2], x, y, solution_dict=True)
sage: sols

然后提取那些真实的:

sage: real_sols = [sol for sol in sols if all(v in RR for v in sol.values())]
sage: real_sols
[{x: 4.698114754098361, y: 10.0}]

使用多项式

另一种方法是定义多项式:

sage: x = polygen(ZZ)
sage: p = x^3 + (-1)*x + 1
sage: p
x^3 - x + 1

在代数实数上求其根:

sage: (p - 10^2).roots(AA, multiplicities=False)
[4.698114752460068?]

或在浮点实数上:

sage: (p - 10^2).roots(RR, multiplicities=False)
[4.69811475246007]

使用椭圆曲线

另一种方法是定义椭圆曲线:

sage: E = EllipticCurve([-1, 1])
sage: E
Elliptic Curve defined by y^2 = x^3 - x + 1 over Rational Field

然后它的周围空间:

sage: P = E.ambient_space()
sage: P
Projective Space of dimension 2 over Rational Field

然后,关联的多项式变量:

sage: P.gens()
(x, y, z)
sage: x, y, z = P.gens()

然后构造对应于“y=10”的投影线:

sage: L = P.curve([y - 10*z])
sage: L
Projective Plane Curve over Rational Field defined by y - 10*z

然后计算椭圆曲线的交点 通过代数实数上的线:

sage: E.intersection_points(L, F=AA)
[(4.698114752460068? : 10 : 1)]

相关问题 更多 >

    热门问题