求解方程并使用在其他计算中获得的值 - SAGE

Har*_*rry 7 sage

SAGE中的函数solve()返回我求解方程式的变量的符号值.例如:

sage: s=solve(eqn,y)
sage: s
[y == -1/2*(sqrt(-596*x^8 - 168*x^7 - 67*x^6 + 240*x^5 + 144*x^4 - 60*x - 4) + 8*x^4 + 11*x^3 + 12*x^2)/(15*x + 1), y == 1/2*(sqrt(-596*x^8 - 168*x^7 - 67*x^6 + 240*x^5 + 144*x^4 - 60*x - 4) - 8*x^4 - 11*x^3 - 12*x^2)/(15*x + 1)]
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要在其他计算中使用为y获得的值,但我不能将这些值分配给任何其他变量.有人可以帮我这个吗?

DSM*_*DSM 10

(1)您应该访问ask.sagemath.org,这是Sage用户,专家和开发人员的类似Stack Overflow的论坛! </plug>

(2)如果你想在某些东西中使用solve()调用的值,那么使用solution_dict标志可能是最简单的:

sage: x,y = var("x, y")
sage: eqn = x**4+5*x*y+3*x-y==17
sage: solve(eqn,y)
[y == -(x^4 + 3*x - 17)/(5*x - 1)]
sage: solve(eqn,y,solution_dict=True)
[{y: -(x^4 + 3*x - 17)/(5*x - 1)}]
Run Code Online (Sandbox Code Playgroud)

此选项将解决方案作为字典列表而不是方程列表.我们可以像访问任何其他词典一样访问结果:

sage: sols = solve(eqn,y,solution_dict=True)
sage: sols[0][y]
-(x^4 + 3*x - 17)/(5*x - 1)
Run Code Online (Sandbox Code Playgroud)

如果我们愿意,我们可以将其分配给其他东西:

sage: z = sols[0][y]
sage: z
-(x^4 + 3*x - 17)/(5*x - 1)
Run Code Online (Sandbox Code Playgroud)

替代:

sage: eqn2 = y*(5*x-1)
sage: eqn2.subs(y=z)
-x^4 - 3*x + 17
Run Code Online (Sandbox Code Playgroud)

等等.虽然恕我直言上面更方便,你也可以通过.rhs()在没有solution_dict的情况下访问相同的结果:

sage: solve(eqn,y)[0].rhs()
-(x^4 + 3*x - 17)/(5*x - 1)
Run Code Online (Sandbox Code Playgroud)