如何使用 Python 求解具有多个非线性方程的系统?

How can I solve a system with multiple non-linear equations using Python?

我有 12 个非线性方程和 7 个变量要在 Python 中求解。我试过运行下面的代码,但是好像有错误,不知道是不是因为系统导致了多解。还有其他方法可以继续吗?我想知道每个变量的值和每个方程的结果。谢谢

from scipy.optimize import fsolve
from math import exp

def equations(vars):
  a, b, c, d, e, f, g = vars
  eq1=a*c*f-0.17142857
  eq2=a*c*g-0.296922996
  eq3=a*d*f-0.514285714
  eq4=a*d*g-0.890768987
  eq5=a*e*f-1.542857143
  eq6=a*e*g-2.67230696
  eq7=b*c*f-4.628571429
  eq8=b*c*g-8.016920881
  eq9=b*d*f-13.88571429
  eq10=b*d*g-24.05076264
  eq11=b*e*f-41.65714286
  eq12=b*e*g-72.15228793
  return [eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8, eq9, eq10, eq11, eq12]


a, b, c, d, e, f, g =  fsolve(equations, (1, 1, 1, 1, 1, 1, 1))


print(a, b, c, d, e, f, g)
print(eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8, eq9, eq10, eq11, eq12)


我认为这(更改为 12 个变量和 12 个方程)解决了您的错误:

from scipy.optimize import fsolve
from math import exp

def equations(vars):
  a, b, c, d, e, f, g, h, i, j, k, l = vars
  eq1=a*c*f-0.17142857
  eq2=a*c*g-0.296922996
  eq3=a*d*f-0.514285714
  eq4=a*d*g-0.890768987
  eq5=a*e*f-1.542857143
  eq6=a*e*g-2.67230696
  eq7=b*c*f-4.628571429
  eq8=b*c*g-8.016920881
  eq9=b*d*f-13.88571429
  eq10=b*d*g-24.05076264
  eq11=b*e*f-41.65714286
  eq12=b*e*g-72.15228793
  return [eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8, eq9, eq10, eq11, eq12]


a, b, c, d, e, f, g, h, i, j, k, l =  fsolve(equations, (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1))


print(a, b, c, d, e, f, g, h, i, j, k, l)
print(equations([a, b, c, d, e, f, g, h, i, j, k, l]))

输出

0.09788651653637173 2.64293594672212 -0.44472893008448783 -1.334186790203708 -4.002560370786989 -3.9379024240750766 -6.820647073325204 10473726.450237518 -9311686.344387261 -2218712.0864749462 2072840.8309073711 -2892329.2634591246
[1.4286000160623757e-09, -4.3506231950374286e-10, 2.6662094754215104e-10, -3.384060809352718e-10, -1.3234724427491074e-10, 1.0219736168437521e-10, -7.342570995660935e-12, -1.84297022087776e-11, -3.5398635134242795e-09, 2.0477912698879663e-09, 1.210743505453138e-09, -6.863842827442568e-10]

只忽略最后 5 个变量的输出