python - Sympy - 当表达式包含许多符号时,集成很慢
问题描述
假设我有以下表达式,我想将变量z
从 0 积分到L
.
import sympy as sp
mdot, D, R, alpha, beta, xi, mu0, q, cp, Tin, L = sp.symbols("\dot{m}, D, R, alpha, beta, xi, mu_0, q, c_p, T_in, L", real=True, positive=True, constant=True)
z = sp.symbols("z", real=True, positive=True)
n = sp.Symbol("n", real=True)
firstexpr = 8 * mdot**2 * R / (sp.pi**2 * D**5) * (alpha + beta * (sp.pi * D * mu0 / (4 * mdot))**xi * (q * z / (mdot * cp) + Tin)**(n * xi)) * (q * z / (mdot * cp) + Tin)
res1 = sp.integrate(firstexpr, (z, 0, L), conds="none")
这将花费很长时间:我不得不在我的电脑上 10 分钟后停止计算而没有得到答案。
如果我重写我的表达式,使其仅包含最少数量的常量符号,整合它,最后替换原始符号,情况会显着改善:
a = 8 * mdot**2 * R / (sp.pi**2 * D**5)
b = beta * (sp.pi * D * mu0 / (4 * mdot))**xi
c = q / (mdot * cp)
_a, _b, _c = sp.symbols("a, b, c", real=True, positive=True, constant=True)
secondexpr = _a * (alpha + _b * (_c * z + Tin)**(n * xi)) * (_c * z + Tin)
res2 = sp.integrate(secondexpr, (z, 0, L), conds="none")
sp.simplify(res2.subs([(_a, a), (_b, b), (_c, c)]))
为什么 sympy 在第一种情况下需要很长时间?我在创建符号时是否遗漏了一些假设?
解决方案
推荐阅读
- jsp - 在 Jetty 9.4 JSP 渲染中苦苦挣扎
- php - 无法保存在数据库中,因为:用户 'id6266174_alfa'@'%' 拒绝访问数据库 'myproject'。使用 php 5.5.1.1
- javascript - gridstack.js 插件:是否可以在 gridstack.js 中禁用水平拖动(调整大小)?
- vba - 在 Excel VBA 中,如何使用 IMPORTHTML 函数并增加 html 链接中的日期
- reactjs - 在 React Router 4 中使用链接
- html - 无论如何我可以在我的笔记本电脑浏览器上检查 meta name="viewport" 的使用
- c# - Expression.Lambda 无法自动转换类型
- javascript - Grunt 复制插件无法配置
- php - 如何使用 php 将 mysql DB 从 localhost 复制到服务器?
- mysql - 每月所有周的 SQL 平均值