我有一个关于在 python 中求解方程组的问题。在这里,我提出了一个有 5 个方程的情况。显式系统是这样的:
定义 f(x):
F = numpy.array([x[0]*x[2]/(1+x[0]*x[2]) + x[0]*x[3]/(1+x[0]*x[3]) + x[0]*x[4]/(1+x[0]*x[4]) -2,
x[1]*x[2]/(1+x[1]*x[2]) + x[1]*x[3]/(1+x[1]*x[3]) + x[1]*x[4]/(1+x[1]*x[4]) - 2,
x[0]*x[2]/(1+x[0]*x[2]) + x[1]*x[2]/(1+x[1]*x[2]) -1,
x[0]*x[3]/(1+x[0]*x[3]) + x[1]*x[3]/(1+x[1]*x[3]) -2,
x[0]*x[4]/(1+x[0]*x[4]) + x[1]*x[4]/(1+x[1]*x[4]) -1,])
return F
我尝试过的另一种方法是:
F = numpy.zeros(5)
d = numpy.array([2,2])
u = numpy.array([1,2,1])
def f(x):
for i in range(2):
for k in range(3):
F[i] += x[i]*x[k+2]/(1+x[i]*x[k+2])
F[i] = F[i] - d[i]
for i in range(3):
for k in range(2):
F[i+2] += x[i+2]*x[k]/(1+x[k]*x[i+2])
F[i+2] = F[i+2] - u[i]
return F
现在,当我尝试:
a = [1,1,0.5,1,0,5] #initial guess
sol = fsolve(f,a)
第一个方法似乎没问题,并给出了解决方案:
array([2.63229589e+01, 2.63229589e+01, 3.79966918e-02, 2.11613301e+02,3.79966918e-02])
相反,第二个给出了初始猜测作为解决方案,因此,显然,什么都没有发生:
array([1. , 1. , 0.5, 1. , 0.5])
我不明白为什么第二种方法不起作用。我写了第二种情况,因为我必须解决的真实系统有数百个方程和数百个项(它们是求和的结果),所以我不能明确地写出来。这种只有 5 个方程的情况是我尝试过的简化情况,但我仍然不明白问题出在哪里。当我定义系统的方程 F 时,我认为在 f(x) 中具有“for”迭代循环,但是,我再一次不知道出了什么问题。
谁能帮我?