首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一般多项式方程的慢速计算

一般多项式方程的慢速计算
EN

Stack Overflow用户
提问于 2021-05-11 20:38:34
回答 1查看 29关注 0票数 1

我试着做一个通用的多项式函数,它给出了计算它的时间周期,最高的多项式幂powr,以及每个常数a;,其中apowr的长度相同。

我的代码方法如下:time的每个元素都从powr转换为一个向量,然后当使用a将元素与元素相乘时,然后计算结果向量的和,使其成为一个元素。

代码语言:javascript
运行
复制
for i=1:length(time) 
    result(i)=sum((time(i).^[powr]).*[a]);
end

问题是做这个计算的时间太长了,time的元素越多,和/或apowr越长。有没有一种方法可以更快地完成这项计算?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-12 12:42:24

阿米亚:

代码运行缓慢的原因是计算不是多项式分解的,这意味着它没有利用运行的产品。例如,假设您的多项式是3次(即,y = a*x^3 + b*x^2 + c*x + d)。代码的设置方式使得x (类似于time变量)首先是立方体(3乘法+1乘以a),然后是平方(2乘法+1乘以b),然后引用(0乘法+1乘以c),最后添加d。这相当于9次乘法和3次加法。用这种方法计算多项式需要sum(1:n)乘法和n加法。

相反,如果将多项式因式为:y = ((a*x + b)*x + c)*x + d,乘法次数将从9次降至3次,加法次数仍为3次。实际上,多项式因式分解方法使用n乘法和n加法计算多项式(n是多项式的阶数)。因此,人们可以看到,多项式因式分解在计算工作中的规模比我们称之为蛮力方法的速度要慢得多。

要对高次多项式执行此操作,我建议您将代码修改为:

代码语言:javascript
运行
复制
N = length(time); %Get number of time values on which the polynomial evaluation is needed.
hmp = length(a); %I'm assuming a contains the polynomial coefficients in ascending order.
result = ones(N,1)*a(end); %Preallocate memory for results.
for i=hmp-1:-1:1
    result = result.*time + a(i); %Compute the factored parenthesis 'outward'
end

其中,N是要计算多项式的时间值的数量,hmp是最高的幅值幂。将result设为向量可使循环同时计算所有时间条目的多项式。这个for循环利用了多项式因式分解,这将比不必要地从头开始逐个元素计算幂的规模要小得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67486929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档