【发布时间】:2012-08-14 18:42:12
【问题描述】:
我在将霍纳算法的伪代码转换为 MatLab 中的正确代码时遇到了一些麻烦。我认为我的困惑源于代码假定第一个向量条目可以由 0 引用,而在 MatLab 中,这必须是 1。我试图相应地修改我的代码,但我不明白正常工作。伪代码如下:
input n, (a_i, : 0 ≤ i ≤ n), z_0
for k = 0 to n-1 do
for j = n-1 to k step -1 do
a_j = a_j + z_0*a_(j+1)
end do
end do
output (a_i: 0 ≤ i ≤ n)
这是我在 MatLab 中编写的尝试,其中a 是表示多项式系数的输入向量:
function x = horner(a,z_0)
n = length(a);
for k = 1:n-1
for j = n-1:-1:k
a(j) = a(j) + (z_0)*a(j+1);
end
end
x = a;
我在向量a = [1 -4 7 -5 -2] 上尝试了这个,它表示多项式中的系数。我还设置了z_0 = 3。根据我的书,我应该收到输出向量a = [1 8 25 37 19],但我的代码给出了输出向量a = [-245 -313 -146 -29 -2]。
如果有人能帮我清理这段代码,我将不胜感激!
【问题讨论】:
-
看起来像你的循环短:我会说它应该是
k = 1:n和for j = n:-1:k -
edit polyval向您展示了 Matlab 人员是如何实现该算法的。