python - sympy - 替代特定的力量
问题描述
我有这个平等。
import sympy as sp
D, L, V = sp.symbols("D, L, V", real=True, positive=True)
Veq = sp.Eq(V, sp.pi * D**3 / 4 * (sp.Rational(2, 3) + L / D))
我想解决Veq
. D**3
如果我尝试直接的方法,sp.solve(Veq, D**3)
计算将需要一段时间,最终会给我一个非常长的结果(对我来说没用)。
我的尝试:尝试D**3
用新符号替换,然后解决它。不幸的是,替换也将替换D
等式中的另一个:
t = sp.symbols("t")
print(Veq.subs(D**3, t))
>>> Eq(V, pi*t*(L/t**(1/3) + 2/3)/4)
注意这个词L/t**(1/3)
。我希望它是L/D
在替换之后。到目前为止,我已经设法操纵表达式并使用以下代码达到我的目标:
res = sp.Mul(*[a.subs(D**3, sp.symbols("t")) if a.has(D**3) else a for a in asd.args[1].args])
Veq = sp.Eq(V, res)
print(Veq)
>>> Eq(V, pi*t*(2/3 + L/D)/4)
我想知道,是否有一些标志subs
可以用来实现我的目标?还是别的什么方法?
解决方案
如果您希望替换准确,您可以使用该exact
标志:
>>> var('D V L')
(D, V, L)
>>> Veq = sp.Eq(V, sp.pi * D**3 / 4 * (sp.Rational(2, 3) + L / D))
>>> Veq.subs(D**3,y,exact=True)
Eq(V, pi*y*(2/3 + L/D)/4)
>>> solve(Veq.subs(D**3,y,exact=True),y)
[12*D*V/(pi*(2*D + 3*L))]
当给出假设时,该exact
标志似乎被忽略:
>>> D, L, V = symbols("D, L, V", real=True, positive=True)
>>> (D**3+D).subs(D**3,y,exact=True)
y**(1/3) + y
>>> D, L, V = symbols("D, L, V")
>>> (D**3+D).subs(D**3,y,exact=True)
D + y
您可以replace
根据您的情况使用:
>>> D, L, V = symbols("D, L, V", real=True, positive=True)
>>> (D**3+D).replace(D**3,y)
D + y
但是由于您的表达式是关系,您必须在参数上使用替换,而不是关系(否则您将收到错误):
>>> eq = Eq(D**3, D - 1)
>>> eq.func(*[a.replace(D**3,y) for a in eq.args])
Eq(y, D - 1)
推荐阅读
- laravel - 我想使用 laravel 将数据更新到与密钥相关的数据库中
- laravel - Laravel 返回模板而不是错误消息
- if-statement - 以空单元格为键的电子表格查找
- c# - 将 GPS 坐标(纬度、经度)转换为本地坐标系
- java - 如何在一个页面中显示来自不同类别的不同分数
- c# - 获取已创建 PDF 文档的页面
- angular - Angular Material 动态着色应用程序背景不起作用
- javascript - 如何从 React.js 中的 HTML 代码中获取组件?
- android - doAsync 在 Fragment 类中不起作用
- python - 为什么 yocto scipy 配方需要明确设置 python3?如何?