Anonymous
Nsolve не может найти корни нелинейных уравнений
Сообщение
Anonymous » 21 дек 2025, 00:54
Я пытаюсь решить набор нелинейных уравнений, чтобы определить неподвижные точки, используя «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
1766267687
Anonymous
Я пытаюсь решить набор нелинейных уравнений, чтобы определить неподвижные точки, используя «nsolve» в Sympy. Я использую начальное предположение для набора уравнений, но nsolve не может дать никаких решений. Выдает "nsolve error". Я также пробовал "solve" вместо nsolve. Но он возвращает sol= [ ]. Однако я использовал аналитический способ определения фиксированных точек, но не уверен, что это правильный способ решения того же вопроса. [code]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 [/code] Ваши комментарии будут высоко оценены rgds Подробнее здесь: [url]https://stackoverflow.com/questions/79817363/nsolve-is-unable-to-find-roots-for-nonlinear-equations[/url]