【问题标题】:How can I use the elements of a FiniteSet for my following calculations?如何使用 FiniteSet 的元素进行以下计算?
【发布时间】:2019-07-11 13:24:25
【问题描述】:

我正在尝试使用 solveset(equation, variable) 来解算方程,这将得到变量的值作为结果。结果我得到了一个 FiniteSet {value}。这个 FiniteSet 是否可以访问,以便我可以使用该值(希望是 float 类型)进行下一次计算?

问题如下: 我定义了三个 SymPy 符号 (drift1, drift2, drift3 = symbols('drift1 drift2 drift3')),它们应该是以下计算的占位符。他们没有价值观。它们是两个方程的一部分(equation1equation2,两者都是 drift1, drift2drift3 的函数)。 我的目标是编写一个迭代循环,通过求解两个方程来优化所有三个符号drift1、drift2 和drift3,并将结果用于下一个迭代步骤。为此,我定义了三个Python变量x, yz,a和y的初始值为0.01880.0099。 z 是 x 和 y 的函数,将在每个迭代步骤中重新计算。 在第一步中,z 是用 x 和 y(以及我在代码中定义的其他变量)计算的,我在方程 1 中用 y 和 z 替换了drift2 和drift3(方程现在是drift1 的函数)。通过激活equation1=0towardsdrift1,我正在使用solveset(equation1.subs(drift2, y).subs(drift3, z), drift1),我得到一个包含结果的FiniteSet。我将使用此结果通过执行solveset(equation2.subs(drift1, result from FiniteSet).subs(drift3, z), drift2) 来求解第二个等式。这不起作用,因为结果不是float 变量而是sympy.sets.sets.FiniteSet-type。

谁能告诉我如何使用 FiniteSet 的值(“内部”FiniteSet;{value})进行下一次计算?我使用 Pyhton 3 和 SymPy。

import numpy as np
from sympy import *
import scipy as sp

drift1, drift2, drift3 = symbols('drift1 drift2 drift3')
init_printin(use_unicode=True)

equation1 =  0.005*(drift1*(-23.88*drift2*(15.16*drift3 + 1.15)-20.31*drift3
                       +00.47*drift2*(15.16*drift3+1.15)+1.03*drift3+0.05))/drift1

equation2 = 0.005*(drift1*(35.73*drift2*(-13.79*drift3 + 0.86)+7.91*drift3+2.09)
                       +1.65*drift2*(-13.79*drift3+0.86)+0.75*drift3+0.07)/drift1

x, y = 0.0188, 0.0099
gesamtlaenge = 1.676
laenge1 = 0.04
laenge2 = 0.02

# the loop for the iteration is not included in this code
# the only thin I wanna know is how to substitute drift1 by the solution of 
# the first calculation sol1

z = gesamtlaenge-laenge1-laenge2-x-y
expr1 = equation1.subs(drift2, y).subs(drift3, z)
sol1 = solveset(equation, drift1)
# up to this point, the code is running, but now, I get a FiniteSet {0.047} as
# result for sol1 and I wanna use this value to substitute drift1 in the next calculation
expr2 = equation2.subs(drift1, sol1).subs(drift3, z)
sol2 = solveset(equation, drift2)
print(drift1, drift2, drift3)

当我执行expr2 = equation2.subs(drift1, sol1).subs(drift3, z) 时,我得到了 equation2 作为drift1 和drift2 的函数,因为它不能使用FiniteSet {0,047} 中的值(0.047 是我需要的值)。我明白为什么会这样,但我没有解决办法。

感谢您的帮助!干杯

【问题讨论】:

    标签: python python-3.x sympy substitution


    【解决方案1】:

    您可以通过转换为列表来访问 FiniteSet 的元素。在这种情况下,如果有一个解决方案,list(sol1).pop() 将起作用:

    >>> sol1 = FiniteSet(1)
    >>> x.subs(x, list(sol1).pop())
    1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 2018-07-24
      • 1970-01-01
      • 2022-10-04
      • 2018-09-02
      相关资源
      最近更新 更多