python中解多元一次方程组的两种方法

使用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}

对比结果可知,使用此方法的效果要更好,甚至可以用分数表示结果

你可能感兴趣的:(python,开发语言,后端)