Я пытаюсь растворить уравнение с использованием решающего набора (уравнение, переменная), которое в результате даст мне значение переменной. В результате я получаю FiniteSet {значение}. Доступен ли этот FiniteSet, чтобы я мог использовать значение (которое, мы надеемся, типа float) для следующих вычислений?
Проблема заключается в следующем:
Я определяю три символа SymPy (drift1, drift2, drift3 = symbols('drift1 drift2 drift3')
), которые должны быть своего рода заполнителями для следующих вычислений. У них нет ценностей. Они являются частью двух уравнений (equation1
и equation2
, оба являются функциями drift1, drift2
и drift3
).
Моя цель - запрограммировать цикл итерации для оптимизации всех трех символов drift1, drift2 и drift3 путем решения обоих уравнений и использования результатов для следующего шага итерации. Для этого я определяю три переменные Python x, y
и z
, начальные значения a и y равны 0.0188
и 0.0099
. z является функцией от x и y и будет вычисляться как новая с каждым шагом итерации.
На первом шаге z вычисляется с использованием x и y (и других переменных, которые я определил в коде), и я заменяю drift2 и drift3 на y и z в уравнении 1 (уравнение теперь является функцией drift1). Активируя equation1=0
в сторону drift1, я использую 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
.
Может кто-нибудь сказать мне, как я могу использовать значение FiniteSet («внутри» FiniteSet; {значение}) для следующих вычислений? Я использую 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)
, я получаю уравнение2 как функцию drift1 и drift2, потому что оно не может использовать значение в FiniteSet {0,047} (0,047 - это нужное мне значение). Я понимаю, почему это так, но у меня нет решения.
Я благодарен за любую помощь! Приветствия