高次方程求根python_python – 加速SymPy方程求解器

我正在尝试使用以下python代码解决一组方程式(当然使用SymPy):

def Solve(kp1, kp2):

a, b, d, e, f = S('a b d e f'.split())

equations = [

Eq(a+b, 2.6),

Eq(2*a + b + d + 2*f, 7),

Eq(d + e, 2),

Eq(a*e,kp2*b*d),

Eq( ((b * (f**0.5))/a)*((a+b+d+e+f+13.16)**-0.5), kp1)

]

return solve(equations)

该代码成功地解决了方程,但是大约35秒后. Solve()函数在另一个文件中的迭代块(大约2000次迭代)中使用,因此速度对我来说非常重要.

有没有办法加速求解器?如果没有,你能推荐另一种方法来解决使用python的方程组吗?

解决方法:

你只需要解决一次方程式.之后,您将获得表单的等式:

> a = f_1(kp1,kp2)

> b = f_2(kp1,kp2)

> ……

所以你可以简单地计算a,…,e依赖于kp1和kp2.例如,求解第一,第三和第四方程给出:

> b:-a 2.6

> e:2.0 * kp2 *(5.0 * a – 13.0)/(5.0 * a * kp2 – 5.0 * a – 13.0 * kp2),

> d:10.0 * a /( – 5.0 * a * kp2 5.0 * a 13.0 * kp2)

在我的电脑上解决所有五个方程式太慢了,但如果它给你一个表达式,你只需要插入(替换)kp1和kp2的值,你就不必再次求解方程式了.如需替换,请查看sympy documentation.

所以你的循环应该是这样的:

solutions = sympy.solve(eqs, exclude=[kp1, kp2])

for data_kp1, data_kp2 in data:

for key, eq in solutions:

solution = eq.subs([(kp1, data_kp1), (kp2, data_kp2)])

final_solutions.append("{key}={solution}".format(key=key, solution=solution))

标签:python,numerical-methods,sympy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值