Nsolve не может найти корни нелинейных уравненийPython

Программы на Python
Ответить
Anonymous
 Nsolve не может найти корни нелинейных уравнений

Сообщение Anonymous »

Я пытаюсь решить набор нелинейных уравнений, чтобы определить неподвижные точки, используя «nsolve» в Sympy. Я использую начальное предположение для набора уравнений, но nsolve не может дать никаких решений. Выдает "nsolve error".
Я также пробовал "solve" вместо nsolve. Но он возвращает sol= [ ].
Однако я использовал аналитический способ определения фиксированных точек, но не уверен, что это правильный способ решения того же вопроса.

Код: Выделить всё

f1_num = sp.N(f1.subs(subs))
f2_num = sp.N(f2.subs(subs))
f3_num = sp.N(f3.subs(subs))

initial_guess = (g1_val, g2_val, 0.0)   # choose g3 guess 0

# Attempt to solve for g1,g2,g3
try:
sol = sp.nsolve([f1_num, f2_num, f3_num], (g1, g2, g3),
(g1_val, g2_val, 0.02), tol=1e-12, maxsteps=200)
results.append(sol)
except Exception as e:
results.append(None)
print(f"Column {j}: nsolve failed ({e})")
# fallback: try a few different initial guesses
for guess in [(g1_val, g2_val, 0.4), (1.0, 1.0, 0.5), (0.5, 0.5, 0.6)]:
try:
sol = sp.nsolve([f1_num, f2_num, f3_num], (g1, g2, g3), guess)
print("sol=", sol)
print("Found sol with guess", guess, ":", sol)
break
except Exception as e2:
print("guess", guess, "failed:", e2)

g1_fp1 = [None] * num_cols
g1_fp2 = [None] * num_cols
g2_fp = [None] * num_cols

#.............................
# Analytical solution
#.............................
for j in range (num_cols):

try:
roots_f3 = sp.nsolve(f3_num, g1)
if roots_f3:
g1_fp1[j] = float(sp.re(roots_f3[0]))
print(f"g1 roots from f3=",g1_fp1[j])
else:
g1_fp1[j] = np.nan
except Exception as e:
print(f"f3 solution failed ({e})")
g1_fp1[j] = np.nan
#type(sol_f3)
try:
roots_f1 = sp.nsolve(f1_num, g1)
if roots_f1:
g1_fp2[j]= float(sp.re(roots_f1[0]))
print(f"g1 roots from f1=",g1_fp2[j])
else:
g1_fp2[j] = np.nan
except Exception as e:
print(f"f1 solution failed ({e})")
g1_fp2[j] = np.nan
try:
roots_f2 = sp.nsolve(f2_num, g2)
if roots_f2:
g2_fp[j] = float(sp.re(roots_f2[0]))
print(f"g2 roots from f2=",g2_fp[j])
else:
g2_fp[j] = np.nan
except Exception as e:
print(f"f2 solution failed ({e})")
g2_fp[j] = np.nan
Ваши комментарии будут высоко оценены
rgds

Подробнее здесь: https://stackoverflow.com/questions/798 ... -equations
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»