【基础】秦九昭算法实现的多项式快速计算

秦九昭算法

这里写图片描述
图片来自搜狗百科

#include <iostream>
using namespace std;
void main()
{
    int num, x;//num为多项式阶数,x为自变量
    cout << "输入多项式的阶数:";
    cin >> num;
    int *coefficient = new int[num + 1];//新建一个长度为阶数+1个常数的动态数组
    for (int i = num; i >= 0; i--)
    {
        cout << "输入x^" << i << "的系数:";
        cin >> coefficient[i];
    }
    cout << "输入自变量x的值,x=";
    cin >> x;
    int y2 = x*coefficient[0] + coefficient[1];//为算法的迭代赋初值
    //开始迭代
    for (int i = 1; i < num; i++)
        y2 = y2*x + coefficient[i + 1];
    //迭代完成
    cout << y2 << endl;
    delete[]coefficient;
}
要完成这个任务,我们可以使用 MATLAB 来实现两种计算多项式值的方法:直接计算法和秦九昭算法(也称为霍纳法则)。首先,我们定义两种方法的函数,然后创建一个函数来比较它们的执行时间,并生成结果图表。 以下是直接计算法的 MATLAB 函数: ```matlab function P = directPolynomial(a, x) n = length(a) - 1; P = 0; for k = 0:n P = P + a(k+1) * x^k; end end ``` 接下来是秦九昭算法的 MATLAB 函数: ```matlab function P = qinjiuzhaoPolynomial(a, x) n = length(a) - 1; P = a(n+1); for k = n:-1:1 P = P * x + a(k); end end ``` 现在,我们将创建一个脚本来比较两种方法的效率,并生成图表: ```matlab % 参数设置 x = linspace(-10, 10, 50); % 生成一个从-10到10的线性间隔向量 n_values = [5, 10, 15, 20]; % 不同的n值 time_direct = zeros(1, length(n_values)); % 存储直接计算法的时间 time_qinjiuzhao = zeros(1, length(n_values)); % 存储秦九昭算法的时间 % 计算每个n值的时间 for i = 1:length(n_values) n = n_values(i); a = (0:n).'; % 生成系数a = [0, 1, 2, ..., n] % 直接计算法时间 tic; P = directPolynomial(a, x); time_direct(i) = toc; % 秦九昭算法时间 tic; P = qinjiuzhaoPolynomial(a, x); time_qinjiuzhao(i) = toc; end % 绘制图表 figure; bar(n_values, time_direct, 'b', n_values, time_qinjiuzhao, 'r'); legend('Direct Method', 'Qin Jiuzhao Method'); title('Computational Efficiency Comparison'); xlabel('Polynomial Degree n'); ylabel('Time (seconds)'); grid on; ``` 这段脚本首先定义了一系列的 `n` 值,并为每种方法记录了执行时间。然后,它使用 `bar` 函数创建了一个条形图,比较了直接计算法和秦九昭算法在不同 `n` 值下的性能。图表中的蓝色条形表示直接计算法的时间,红色条形表示秦九昭算法的时间。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值