用Python来实现秦九韶算法_python秦九韶算法例题解析
秦九韶介绍
秦九韶是我国古代数学家的杰出代表之一,他与李冶、杨辉、朱世杰并称宋元数学四大家。他的《数书九章》概括了宋元时期中国传统数学的主要成就,尤其是系统总结和发展了高次方程的数值解法与一次同余问题的解法,提出了相当完备的“正负开方术”和“大衍求一术”。对数学发展产生了广泛的影响。——《百度百科》
秦九韶聪敏勤学,宋绍定四年(公元1231),秦九韶考中进士,先后担任县尉、通判、参议官、州守等职。先后在湖北、安徽、江苏、浙江等地做官。南宋理宗景定元年(公元1260年)出任梅州太守,翌年卒于梅州。据史书记载,他“性机巧,星象、音律、算术以至营造无不精究”,还尝从李梅亭学诗词。他在政务之余,以数学为主线进行潜心钻研,且应用范围广泛:天文历法、水利水文、建筑、测绘、农耕、军事、商业金融等方面。
秦九韶算法
秦九韶算法一种多项式简化算法。该算法通过不断累乘和累加来减少求多项式值的运算次数,具有较高的效率和实用性(在西方被称作霍纳算法,是以英国数学家霍纳命名)。
该算法是一种将一元n次多项式的求值问题转化为n个一次式的算法。其大大简化了计算过程,即使在现代,利用计算机解决多项式的求值问题时,秦九韶算法依然是比较先进的算法。
怎样求多项式呢,例如:
求当x=5时的值是多少?
一个直接的做法,就是把5带入多项式
,计算各项的值,然后把他们都加起来,我们看一下需要多少次操作:
4次乘法运算 | ||
3次乘法运算 | ||
2次乘法运算 | ||
1次乘法运算 |
总共需要4+3+1+1=10次乘法运算,再把各项加起来,需要5次加法运算
那有没有更好的算法呢?
秦九韶在他的著作《数书九章》中提出了下面的算法:
把一个n次多项式改写成如下形式:
从推导结果来看,其过程是将高次方程转化为低次方程,然后逐步求解。
求多项式的值时,首先计算最内层括号内一次多项式的值(由内而外),即
...
这样,求n次多项式f(x)的值就转化为求n个一次多项式的值,秦九韶算法的核心思想是利用累加乘法来计算多项式。
举例说明
假设有一个多项式 ,要计算在 x = 2 处的值。
使用秦九韶算法进行计算的步骤如下:
初始化 result = 0,从最高次幂开始遍历系数:
第一步:result = result * 2 + 3 = 0 * 2 + 3 = 3
第二步:result = result * 2 + 2 = 3 * 2 + 2 = 8
第三步:result = result * 2 + 1 = 8 * 2 + 1 = 17
第四步:result = result * 2 + 5 = 17 * 2 + 5 = 39
我们每一步都利用了上一步的计算结果,有效地减少了多余的计算。
最终得到结果 result = 39,即多项式 f(x) 在 x = 2 处的值为 39。
Python语言实现
现在我们用Python语言来实现秦九韶算法计算多项式
, x=2的值
# 定义秦九韶算法函数
# coefficients:多项式系数列表
# x:代入参数
def qinjiushao(coefficients, x):
result = 0
for coeff in coefficients:
result = result * x + coeff
return result
# f(x) = 3x^5 -2x^4 + 3x^3 + x^2 -x +1
# 多项式系数列表
coefficients = [3, -2, 3, 1, -1, 1]
x = 2 # 代入的值
result = qinjiushao(coefficients, x)
# 输出结果
print(result)
输出结果
91
秦九韶算法的其他应用
多项式算法在很多领域有这广泛的应用,实际工作中,因为数据范围或者精度问题,有一种常用方法就是把数值类型以字符串的形式保存,这就涉及到字符串和数值类型的转换,比如字符串转换为整数的问题就可以看做成多项式的计算,利用秦九韶算法可以更加高效完成任务,还有其他领域:
- 工程计算:在工程计算中,经常需要计算多项式在给定点处的值。例如,在求解动力学方程时,需要计算多项式在给定时刻的值;在求解电路问题时,需要计算多项式在给定电压或电流下的值。
- 科学计算:在科学计算中,也经常需要计算多项式在给定点处的值。例如,在求解天体运动问题时,需要计算多项式在给定时间的值;在求解数值积分问题时,需要计算多项式在给定区间的值。
- 数学分析:在数学分析中,秦九韶算法可以用来计算多项式的导数和积分。
- 在计算机图形学中,秦九韶算法可以用来计算多项式曲线或曲面在给定点处的值。在图像处理中,秦九韶算法可以用来计算图像的灰度或颜色值。
总而言之,秦九韶算法是一种通用的多项式计算算法,在工程、科学、数学等领域都有着广泛的应用。