使用scipy
from scipy.optimize import fsolve
def func(i):
i1,i2,i3,i4,i5,i6=i[0],i[1],i[2],i[3],i[4],i[5]
return [
i1+i2-i3,
i3+i5-i1,
i4-i2-i5,
i1+5*i5-2*i2,
5*i5+4*i4-3*i3,
2*i2+4*i4+6*i6-10
]
r=fsolve(func,[0,0,0,0,0,0])
print(r)
所得结果为:
[6.88162811e-27 4.15709976e-27 9.75939269e-27 6.56332273e-27
7.57503684e-28 1.66666667e+00]
可以得出结果,但是有一定误差,查找原因是这个库使用了无限接近来算,导致出现此情况
使用sympy
from sympy import *
i1,i2,i3,i4,i5,i6=symbols(['i1','i2','i3','i4','i5','i6'])
a = solve([
i1+i2-i3,
i3+i5-i1,
i4-i2-i5,
i1+5*i5-2*i2,
5*i5+4*i4-3*i3,
2*i2+4*i4+6*i6-10
],[i1,i2,i3,i4,i5,i6])
print(a)
{i1: 0, i2: 0, i3: 0, i4: 0, i5: 0, i6: 5/3}
对比结果可知,使用此方法的效果要更好,甚至可以用分数表示结果