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}

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值