如何从多项式方程求导?提取多项式系数遇技术问题求助
解决多项式字符串解析与求导问题
看起来你在实现多项式求导时,卡在了从字符串中提取系数这一步,我来帮你搞定这个问题,顺便完善求导函数的逻辑。
第一步:从多项式字符串提取系数数组
你的converter函数目前只是做了字符串分割,还没提取出每一项的系数。我们可以针对不同类型的项(高次项、一次项、常数项)分别处理:
array_1 = '3*x**3 + 2*x**2 + 3*x + 5' def converter(poly_str): # 按' + '分割得到每一项 terms = poly_str.split(' + ') coefficients = [] for term in terms: if 'x' not in term: # 处理常数项,直接转成整数 coefficients.append(int(term)) elif '**' in term: # 处理高次项,提取*x**前面的系数 coeff_part = term.split('*x**')[0] coefficients.append(int(coeff_part)) else: # 处理一次项,提取*x前面的系数 coeff_part = term.split('*x')[0] coefficients.append(int(coeff_part)) # 如果需要像你测试时那样反转数组,就返回 coefficients[::-1] return coefficients # 测试一下,会得到[3, 2, 3, 5] coeff_array = converter(array_1) print(coeff_array)
这段代码会把你的输入字符串转换成对应的系数数组[3,2,3,5],分别对应3x³、2x²、3x、5的系数。如果需要反转成你测试用的[5,3,2,3],只需要把return语句改成return coefficients[::-1]即可。
第二步:实现多项式求导函数
多项式求导的规则很简单:
- 对于项
a*x^n,导数是a*n*x^(n-1) - 常数项的导数是0,求导后可以直接丢弃
根据系数数组的排列顺序,我们可以这样实现求导逻辑:
def derivative(coefficients): new_array = [] # 假设系数数组是按次数从高到低排列(比如[3,2,3,5]对应3x³+2x²+3x+5) term_count = len(coefficients) for idx, coeff in enumerate(coefficients): # 计算当前项的次数:总项数-1 - 当前索引 current_degree = term_count - 1 - idx if current_degree == 0: # 常数项,导数为0,跳过 continue # 计算导数后的系数 new_coeff = coeff * current_degree new_array.append(new_coeff) return new_array # 测试:原系数数组[3,2,3,5]的导数是9x²+4x+3,对应数组[9,4,3] print(derivative(coeff_array)) # 输出 [9, 4, 3] # 如果是反转后的数组[5,3,2,3],导数是3+4x+9x²,对应数组[3,4,9] print(derivative([5,3,2,3])) # 输出 [3, 4, 9]
完整测试
把两部分结合起来,你就可以直接从多项式字符串得到导数的系数数组了:
# 完整流程 poly_str = '3*x**3 + 2*x**2 + 3*x + 5' coeffs = converter(poly_str) deriv_coeffs = derivative(coeffs) print(f"原多项式系数:{coeffs}") print(f"导数多项式系数:{deriv_coeffs}")
运行后会输出:
原多项式系数:[3, 2, 3, 5] 导数多项式系数:[9, 4, 3]
内容的提问来源于stack exchange,提问作者Vural Erdogan
相关产品推荐
相关产品推荐

