Math Python多项式积分函数输出错误
输出: 积分:0.25x^4.0+1.0x^3.0+1.0x^2+1x+C3ln(x)+ 所以基本上,除了当我积分一个x^-1项时,一切都是有效的。如果if子句认为常量项是最后一项,因此提前返回“C”并将ln(x)放在后面,这有什么不对?为什么ln(x)后面的加号也是?已经玩了几个小时了,但还是想不出来Math Python多项式积分函数输出错误,math,python-3.x,Math,Python 3.x,输出: 积分:0.25x^4.0+1.0x^3.0+1.0x^2+1x+C3ln(x)+ 所以基本上,除了当我积分一个x^-1项时,一切都是有效的。如果if子句认为常量项是最后一项,因此提前返回“C”并将ln(x)放在后面,这有什么不对?为什么ln(x)后面的加号也是?已经玩了几个小时了,但还是想不出来 当我不包括x^-1术语时,一切都是有效的。如果你想知道为什么我在不定积分中加入了左极限和右极限,我计划在函数中实现不定积分或定积分。你发布的代码中的缩进会显示几个If语句。您可能需要再次检查它是
当我不包括x^-1术语时,一切都是有效的。如果你想知道为什么我在不定积分中加入了左极限和右极限,我计划在函数中实现不定积分或定积分。你发布的代码中的缩进会显示几个If语句。您可能需要再次检查它是否与正在运行的代码匹配。示例:“常量”检查嵌套在此代码中的“线性”检查中。“常量”检查“'x'不在术语中”将永远不会计算为True,它位于仅当“'x'在术语中”为True时才会执行的块内部!我的建议是,不要试图在这段代码中找到bug,而是重写,分两步进行:第一步,将输入解析为表示项、系数和指数的结构;第二步,利用解析结构逐项计算积分。如果你有解析的公式,计算积分很容易,对吗?也许先解决这个问题,把它弄走。然后剩下的是更机械的解析问题。这是一种经典的关注点分离或分而治之的方法。如果使用带有调试器的IDE,这是一个很容易解决的问题。通过一两次代码,你就会知道你的假设哪里出错了。市场上最好的IDE来自JetBrains;试试PyCharm。是的,我刚更改了常量检查以匹配代码。它没有嵌套在初始循环中,因此工作正常。我将在调试器中查看它。。。我想我将重写代码,以执行两个单独的过程,这样当我包含具有限制的部分时,它就可以计算,而无需再次解析。谢谢
def poly_integrate(terms,left_limit,right_limit):
split_terms = terms.split('+')
integral_fxdx = 'Integral:'
integral = 0
for term in split_terms:
if (left_limit and right_limit) is None:
#power term
if 'x^' in term:
split_term = term.split('x^')
if float(split_term[1]) != -1:
int_coef = float(split_term[0])/(float(split_term[1])+1)
int_term = str(int_coef) + 'x^' + str(float(split_term[1]) + 1)
integral_fxdx = integral_fxdx + int_term
if float(split_term[1]) == -1:
int_term = split_term[0] + 'ln(x)'
integral_fxdx = integral_fxdx + int_term
#linear term
if 'x' in term and ('^' not in term):
split_term = term.split('x')
int_term = str(float(split_term[0])/2) + 'x^2'
integral_fxdx = integral_fxdx + int_term
#constant
if 'x' not in term:
int_term = term + 'x'
integral_fxdx = integral_fxdx + int_term
#add plus or constant
if term != terms[-0]:
integral_fxdx = integral_fxdx + '+ '
if term == terms[-0]:
integral_fxdx = integral_fxdx + '+ C'
return integral_fxdx