Sau*_*tro 6 python symbolic-math sympy substitution symbolic-computation
我有以下表达式:
from sympy import pi, sin, cos, var, simplify
var('j,u,v,w,vt,wt,a2,t,phi')
u0 = v*a2*sin(pi*j/2 + pi*j*t*phi**(-1)/2) + pi*vt*a2*cos(pi*j/2 + pi*j*t*phi**(-1)/2)*j*phi**(-1)/2 + pi*w*a2*cos(pi*j/2 + pi*j*t*phi**(-1)/2)*j*phi**(-1)
Run Code Online (Sandbox Code Playgroud)
哪个可以简化:
print simplify(u0)
#a2*(pi*j*vt*cos(pi*j*(phi + t)/(2*phi)) + 2*pi*j*w*cos(pi*j*(phi + t)/(2*phi)) + 2*phi*v*sin(pi*j*(phi + t)/(2*phi)))/(2*phi)
Run Code Online (Sandbox Code Playgroud)
给出子表达式:
bj = pi*j*(phi + t)/(2*phi)
cj = j*pi/(2*phi)
Run Code Online (Sandbox Code Playgroud)
目前我手动替换bj并cj在简化u0表达式中获取:
u0 = a2*(v*sin(bj) + cj*vt*cos(bj) + 2*cj*w*cos(bj))
Run Code Online (Sandbox Code Playgroud)
是否可以使用SymPy来实现这一点,避免手动替换?
我想你缺少的是subs将替换任意表达式,而不仅仅是符号
>>> print simplify(u0).subs({pi*j*(phi + t)/(2*phi): bj, j*pi/(2*phi): cj})
a2*(pi*j*vt*cos(bj) + 2*pi*j*w*cos(bj) + 2*phi*v*sin(bj))/(2*phi)
Run Code Online (Sandbox Code Playgroud)
(我simplify之所以使用,是因为这是pi*j*(phi + t)/(2*phi)取而代之的结果pi*j/2 + pi*j*t/(2*phi),但不是必需的)
有关替换和替换的更多信息,请阅读http://docs.sympy.org/0.7.3/tutorial/basic_operations.html#substitution.如果您想进行更高级的替换,请查看该replace方法.
| 归档时间: |
|
| 查看次数: |
3281 次 |
| 最近记录: |