解方程和使用在其他计算中得到的值 - SAGE

7

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)]

我的问题是,我需要在其他计算中使用得到的y值,但是我无法将这些值分配给任何其他变量。请问有人能帮助我吗?

2个回答

10

(1) 你应该访问 ask.sagemath.org,这是类似于 Stack Overflow 的 Sage 用户、专家和开发者论坛!</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)}]

这个选项会将解决方案以字典列表的形式呈现,而不是等式列表。我们可以像访问其他字典一样访问结果:

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

然后如果我们愿意,就可以将其分配给其他内容:

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

并替换:

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

等等。虽然我认为上面的方法更方便,但是你也可以通过 .rhs()方法来访问相同的结果,而不需要使用 solution_dict:

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

0
如果您有未知数量的变量,可以使用**kwargs将使用solve计算的数据传递到下一个表达式。以下是示例:
B_set是变量列表,在运行时填充,因此在编写代码时不知道变量的名称和数量。
solution = solve(system_of_equations, B_set)[0]
pretty_print(solution)

例如,这给了我: 解方程组的结果 我无法将此答案用于进一步计算,因此让我们将其转换为可用形式。
solution = {str(elem.lhs()): elem.rhs() for elem in solution}

这给了我们: 将结果转换为带有字符串键的字典 然后我们只需将其作为 **kwargs 传递。
approximation = approximation_function(**solution)
pretty_print(approximation)

这将转换为:

从解决方案中没有值的近似

变成:

来自解决方案值的近似

注意:如果您使用solve()函数的字典输出,仍需要将键转换为字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接