如何移除SymPy方程中的O()项?解决'Equality'对象无removeO属性问题
解决SymPy中移除解的O()项报错问题
Hey there! Let's figure out why you're getting that AttributeError and fix it up.
问题根源
你调用.removeO()时出错,是因为dsolve()返回的fungsi_eksak是一个**Equality对象**(也就是代表y(t) = 级数表达式这样的等式),而removeO()是SymPy里Series(级数)对象独有的方法——直接在等式上调用当然会报错啦。
解决方法
我们只需要先提取等式中等号右侧的级数表达式,再对它调用removeO(),之后如果需要还能重新构造完整等式:
import sympy as sy from IPython.display import display t=sy.symbols('t') y = sy.Function('y') pdb=sy.Eq(y(t).diff(t)-5*sy.exp((-0.2)*t**2)+y(t)**2,0) fungsi_eksak=sy.dsolve(pdb,y(t), ics={y(0): 0}) # 提取等式右侧的级数表达式 series_part = fungsi_eksak.rhs # 移除O()项 clean_expression = series_part.removeO() # 重新构造不带O()项的等式(如果需要保留y(t)=...的形式) clean_solution = sy.Eq(y(t), clean_expression) display(clean_solution)
简化写法
要是你不需要保留等式形式,直接显示处理后的表达式也完全可以:
display(fungsi_eksak.rhs.removeO())
这样执行后,输出就不会带有O(t^6)项啦!
内容的提问来源于stack exchange,提问作者Adhi Aryadi
相关产品推荐
相关产品推荐

