Python 秦九韶 Horner 算法 计算多项式

数学之路-python计算实战(3)-霍纳法则 假设有n+2个实数a0,a1,…,an,和x的序列,要对多项式Pn(x)= anx ^n+a(n-1)x^(n-1)+…+a1x+a0求值,直接方法是对每一项分别求值,并把每一项求的值累加起来,这种方法十分低效,它需要进行n+(n-1)+…+1=n(n+1)/2次乘法运算和n次加法运算。有没有更高效的算法呢?答案是肯定的。通过如下变换我们可以得到一种快得多的算法,即Pn(x)= anx ^n+a( 阅读详情

问题:

  • 给定 x, 计算多项式

pn(x)=anxn+an−1xn−1+⋯+a1x+a0p_n(x) = a_n x^n + a_{n-1}x^{n-1} + \cdots + a_1 x +a_0pn​(x)=an​xn+an−1​xn−1+⋯+a1​x+a0​

直接表达

def p_n(x,a_n:list):
    ans = 0
    for i in range(len(a_n)): 
        ans += x**i*a_n[i]
    return ans
%%time
ans1 = 0
for i in range(1000):
    ans1 += p_n(2,[i for i in range(200)])
Wall time: 116 ms
  • 其中 akxka_kx^kak​xk 需要进行k次乘法,所以很复杂。

秦九韶算法 (Horner 算法)

pn(x)=x[x⋯[x(anx+an−1)+an−2]+⋯+an−1]+a0p_n(x) = x \big[ x \cdots [x(a_n x + a_{n-1}) + a_{n-2}]+\cdots + a_{n-1}\big] + a_0pn​(x)=x[x⋯[x(an​x+an−1​)+an−2​]+⋯+an−1​]+a0​

{bn=anbn−1=an−1+bnx\begin{aligned} \begin{cases} b_n &= a_n \\ b_{n-1} & = a_{n-1} + b_n x\end{cases}\end{aligned}{bn​bn−1​​=an​=an−1​+bn​x​​

def Horner(x,a_n:list):
    n = len(a_n)-1
    def b_n(x,i):
        if i == n: return a_n[i] # b_n = a_n
        return a_n[i]+ b_n(x,i+1)*x # b_{n-1} = a_{n-1} + b_n*x
    return b_n(x,0)
%%time
ans2 = 0
for i in range(1000):
    ans2 += Horner(2,[i for i in range(200)])
Wall time: 51.9 ms
ans1 == ans2
True
  • 只需n 次乘法和n 次加法即可得到一个多项式的值。
秦九韶算法:从多项式暴力计算到O(n)优雅求值的核心原理与工程实践 多项式求值是科学计算、图形渲染和嵌入式系统等领域的基础操作,其核心挑战在于如何高效处理高次幂运算。传统直接计算法的时间复杂度为O(n²),涉及大量重复的乘方和乘法操作,计算效率低下且易产生数值误差。秦九韶算法(Horner's Method)通过将多项式转化为嵌套的乘加形式,将计算复杂度优化至O(n),实现了从概念到性能的质变。该算法的原理在于逐层提取公因子,将高维幂运算降解为一系列一维的乘加迭代,不仅大幅减少了乘法次数,还显著提升了数值稳定性,避免了中间结果的数值溢出或精度丢失。在工程实践中,秦九韶算法广 阅读详情

相关推荐

手把手教你用最小二乘法搞定传感器温度补偿(附Python代码)

本文手把手教你利用最小二乘法为传感器构建高效的温度补偿算法,并提供了完整的Python验证代码。文章深入探讨了从数据采集、模型建立到嵌入式优化的全流程,重点介绍了如何在资源受限的MCU上通过Horner算法和离线计算策略实现实时补偿,有效解决传感器温度漂移问题,提升测量精度。

m9n0o的博客 242

python,利用秦九韶算法计算多项式值

数值分析第一章 a = input('a:') # 多项式各项系数 x = int(input('x:')) a = [int(n) for n in a.split()] b = [] b.append(a[0]) for i in range(1,len(a)): b.append(b[i-1]*x+a[i]) c = [] c.append(b[0]) for j in range(1,len(b)-1): c.append(c[j-1]*x+b[j]) print('f(x)

qq_43630348的博客 4411

泰勒展开:用多项式逼近复杂函数,只用加减乘除

在数值分析和科学计算中,复杂函数往往难以直接求值,而多项式只需要乘法和加法就能高效计算。泰勒展开提供了一种通用思路:利用函数在某点的各阶导数信息,将sin、exp等超越函数表示为局部收敛的多项式级数。其原理清晰,数值实现可通过递推避免阶乘溢出,并逐项逼近真实值。这一技术是数学库函数实现的底层逻辑,也是优化算法中梯度下降与牛顿法的理论基础,同时广泛用于工程中的局部线性化近似。收敛半径和余项分析则决定了近似是否可靠。本文从基础概念出发,结合Python代码演示递推计算、误差验证及浮点陷阱,帮助读者真正理解并运用

weixin_33994429的博客 358

Python实现秦九韶算法

print("多项式在 x={} 时的值为:{}".format(x, horner(poly, x)))多项式在 x=4 时的值为:337。

m0_74107120的博客 706

多项式插值原理与工程实践:从穿点拟合到龙格现象规避

多项式插值是一种用低次多项式函数严格通过给定离散数据点的基础数值方法,其核心在于构造满足P(x_i)=y_i的唯一解析表达式。它依托线性代数(如范德蒙德矩阵可逆性)保障存在唯一解,并凭借计算高效、求导便捷、理论坚实等优势,广泛应用于传感器数据补全、I-V曲线重建、控制系统建模等工程场景。然而,高次插值易引发龙格现象——端点剧烈震荡,根源在于等距节点下矩阵病态性加剧。实际应用中需权衡次数与稳定性,优先采用牛顿插值法支持增量更新,并结合切比雪夫节点或分段策略抑制误差。本文深入解析拉格朗日与牛顿实现细节、余项量化

weixin_30527323的博客 423

秦九韶算法:用代数嵌套将多项式求值从O(n²)压至O(n)

多项式求值是数值计算的基础操作,其本质是将系数与幂次的组合映射为标量结果。传统直接法依赖x**n幂运算,引发指数级中间计算和隐式高成本乘法;而秦九韶算法通过代数恒等变形,将多项式重构为线性递推结构,实现计算复杂度从O(n log n)甚至O(n²)到严格O(n)的坍缩。该方法不损失精度、无需近似,天然适配CPU流水线与现代编译器优化(如fused multiply-add),在Python手写循环、NumPy底层及Numba加速中均体现为确定性性能跃迁。本文以10000次多项式为案例,解析其如何用单个for

weixin_32325225的博客 267

多项式计算(python)

多项式计算 题目描述 编程计算多项式y=2x2+x+8的值,y值保留小数点后编程计算多项式y= 2x^{2} +x+8的值,y值保留小数点后编程计算多项式y=2x2+x+8的值,y值保留小数点后面一位小数 输入 x的值 输出 多项式y的值,结果保留1位小数 样例输入 1 样例输出 11.0 代码如下 x=eval(input()) #输入x的值 y=2*x*x+x+8 #代入多项式求解 print('%.1f'%y) #输出求解结果并保留一位小数 如果对你有帮助,记得给个免费的赞哦! ...

人生如逆旅,我亦是行人。 4760

秦九韶算法

秦九韶算法,含详细说明,可直接调用。秦九韶算法,含详细说明,可直接调用。

python--求多项式的值

系数为a0​,a1​,a2​,a3​,⋯an​的n次多项式是如下的一个函数: p(x)=a0​+a1​x+a2​x2+a3​x3,⋯an​∗xn 函数可以针对不同的x求值,例如, 如果p(x)=1+2x+x2,则p(2)=1+2∗2+22=9。 如果p(x)=1+x2+x4,则 p(2) = 21 ,p(3) = 91 。 编写一个函数poly(),带两个输入参数:一个多项式p(x)的系数a0​,a1​,a2​,a3​,⋯an​的列表和一个数值x,要求函数返回p(x),即多项式对x的求值结果。

weixin_54729407的博客 6562

从零开始:用ADS 2023手把手教你设计2.4GHz Wi-Fi LNA(基于ATF-54143,附模型文件)

本文详细介绍了如何使用ADS 2023软件设计2.4GHz Wi-Fi频段的低噪声放大器(LNA),基于ATF-54143晶体管。内容涵盖模型导入、直流工作点确定、稳定性优化、噪声匹配等关键步骤,并提供可下载的模型文件包,帮助工程师快速掌握LNA设计技巧。

weixin_42531128的博客 320

Verilog数字钟

使用Verilog语言进行的数字钟的编写,FPGA开发板亲测正常 大学生一个,第一次自己做的东西,写出来分享在这里插入代码片一下,有不对的地方请大家批评指正。 这次的做的题是:设计一个数字钟,该数字钟能进行正常的时,分计时功能,且能对数字钟的时间进行调整。 该数字钟有3个按键,按键1为功能键,用于数字钟在“正常计时”,“时调整”,“分调整”这三个功能之间切换;按键2,3用于调整时间,仅当数字钟处于...

bin_bin_bun的博客 6149

数值分析 | 多项式求值(Horner法则)

数值分析 | 多项式求值(Horner法则)

MSTIFIY的博客 2323

qcom bypass node介绍

介绍qcom bypass node,以及如何让其生效

haodada1226的博客 2041

07:计算多项式的值

07:计算多项式的值

just_panlei的博客 142

读取rosbag中的IMU信息并转为tum格式的csv和txt

rostopic -b xx.bag -p /xx > xxx.txt #for euroc structvio import os, sys,re,csv name="street_07" # basedir="/media/yinjie/2498AF1F98AEEF0C/adataset/15results/imu_bagtxt/"+name+'.txt' # txtdir="/media/yinjie/2498AF1F98AEEF0C//adataset/15results/imu_o

qq_42928559的博客 1919

银河麒麟(ky10)x86与arm双架构下编译zlmediakit的实战指南

本文提供了在银河麒麟(ky10)操作系统上,针对x86与arm双架构编译部署流媒体服务器zlmediakit的完整实战指南。文章详细阐述了从环境准备、依赖安装、代码获取到编译构建与测试的全过程,重点解析了两种CPU架构下的关键差异与注意事项,帮助开发者高效完成国产化平台上的流媒体服务搭建。

weixin_29306875的博客 98

计算机的错误计算(一百七十一)

探讨 MATLAB 中秦九韶(Horner)多项式的错误计算。

zaim1的博客 430

我的python学习之路

Python 是一门功能强大且易于学习的编程语言,广泛应用于数据分析、人工智能、Web 开发、自动化等领域。以下是一个 Python 学习路径的总结,帮助你系统地掌握 Python 编程。

数据知道的博客 3万+

经典Python案例实现

入门_30个常用python实现 .pdf 一、 二、 三、 四、 五、函数篇 5.1 计算圆的面积 from math import pi as PI def CircleArea(r): if isinstance(r,(int,float)) and r > 0: #确保接收的参数为大于0的数字 return PI * r * r else: ...

橘嘉禾 51

使用字体解密技术爬取懂车帝二手车数据

本文介绍了一种针对懂车帝二手车平台的字体加密数据采集方案。通过抓包分析,识别出关键API接口并解析了字体加密机制,成功实现了价格等敏感数据的解密。方案采用requests库发送POST请求获取JSON数据,利用fontTools解析字体映射关系,建立加密字符到真实数字的转换算法。程序支持多页采集,提取车辆名称、价格、年份等12个维度的信息,并自动保存为Excel格式。技术亮点包括动态字体解析、健壮的数据处理和分页优化,为二手车市场分析提供了可靠的数据支持。文中特别强调数据采集的合法合规性,建议仅用于学术研究

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1310

100:vue+cesium: 加载glb文件,随机位置加载2000架飞机

本示例在 Vue + cesium 项目中随机位置加载2000架飞机,飞机是glb文件,每个大小为571kb。这个示例属于性能优化的范畴内,通常如果用entity加载glb只能显示几个飞机,这里采用primitive的方法来加载。直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果.

大剑师兰特的GIS世界 706

多项式求值秦九韶算法

1.多项式求值的秦九韶算法 设给定nnn次多项式p(x)=a0xn+a1xn−1+⋯+an−1x+an,a0≠0,p(x)=a_0x^n+a_1x^{n-1}+\cdots+a_{n-1}x+a_n,\quad a_0\neq 0,p(x)=a0​xn+a1​xn−1+⋯+an−1​x+an​,a0​​=0, 求x∗处的值p(x∗).若直接计算每一项aixn−i再相加,共需要x^*处的值p(x^*).若直接计算每一项a_ix^{n-i}再相加,共需要x∗处的值p(x∗).若直接计算每一项ai​xn−i再相

AlbertDarren的博客 7021

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

秦九韶算法:青少年Python编程入门与算法效率实践

多项式求值是数学计算中的基础问题,其核心在于高效计算函数值。秦九韶算法(又称Horner算法)通过递推将幂运算转化为乘加循环,显著降低计算复杂度。在编程中,这种优化能提升效率,尤其适用于图形学、信号处理等场景。对于青少年Python学习者,该算法融合循环、累加器和函数封装,是理解算法效率的理想案例。本文从原理到实现,结合教学实践,帮助读者掌握秦九韶算法并应用于项目。

weixin_30843121的博客 524

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

程序计算精确圆周率π的方法

电脑可以利用级数计算出很多高精度的值, 有关级数的问题请参考《高等数学》,以下是比较有名的有关π的级数:

wabil的专栏 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

esp32-c3-adblock 上游 DNS 切换实操:一行编译参数把 9.9.9.9 换成 1.1.1.1

esp32-c3-adblock 是一台跑在约 2 美元 ESP32-C3 芯片上的 Pi-hole 式 DNS 广告拦截器:53.7 万个广告域名以 40 位 FNV-1a 哈希存进 flash,查询命中即回 0.0.0.0。 这里的目标很单一:把它的默认上游 DNS(Quad9,9.9.9.9)换成 1.1.1.1 或别的解析器。全程不动一行源码,只改一处构建参数,编译加烧录合计约 10 分

gitblog_01040的博客 168

python计算多项式的方法

Python实现的多项式计算

pystuding 6684
上一篇: Python 与 数学 【1】
下一篇: 编程金融小白学 股票期权 lv.0 基本概念
Varalpha
博客等级 码龄7年 353粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值