秦九韶算法

给定a[]和x,求多项式的值。

double f (int n,double a[],double x){//n代表a[]的大小,数组的传递需要指定数组大小
    int i;                           //a[]储存每个x项的系数值,在函数外初始化
    double p=a[n];//初始化p;
    for(i=n;i>0;i--)
        p=a[i-1]+x*p;
    return p;
}

 

要完成这个任务,我们可以使用 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` 值下的性能。图表中的蓝色条形表示直接计算法的时间,红色条形表示秦九昭算法的时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值