MatLab-Horner算法

MatLab-Horner算法,matlab,polynomial-math,Matlab,Polynomial Math,我在将霍纳算法的伪代码转换为MatLab中的正确代码时遇到了一些问题。我认为我的困惑源于这样一个事实:代码假设第一个向量条目可以被0引用,而在MatLab中,这必须是1。我试图相应地修改我的代码,但无法使其正常工作。PSEDU代码如下: 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) e

我在将霍纳算法的伪代码转换为MatLab中的正确代码时遇到了一些问题。我认为我的困惑源于这样一个事实:代码假设第一个向量条目可以被0引用,而在MatLab中,这必须是1。我试图相应地修改我的代码,但无法使其正常工作。PSEDU代码如下:

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-47-5-2]上尝试了这个方法,它表示多项式中的系数。我还设置了z_0=3。根据我的书,我应该收到输出向量a=[1 8 25 37 19],但我的代码给出了输出向量a=[-245-313-146-29-2]

如果有人能帮我清除这些代码,我将非常感激

试试这个-这里a是多项式系数的向量,a1是多项式中最高阶项的系数。如果向量的方向相反,只需设置

b = fliplr(a)
并使用向量b调用函数。此函数将使用Horners算法计算多项式。请注意,这假设z_0是要计算多项式的值,因此返回的是单个值,而不是向量

function x = horner(a,z_0)
n = length(a);
result = a(1);
for j = 2:n
    result = result*z_0 + a(j);
end
x = result;
如果要传入值z的向量进行计算,以便可以同时计算z元素的多个点,则可以通过向量传入它们:

function x = horner(a,z)
n = length(a);
m = length(z);
result = a(1)*ones(1,m);
for j = 2:n
    result = result.*z + a(j);
end
x = result;
现在返回的x将是结果向量

试试这个-这里a是多项式系数向量,a1是多项式中最高阶项的系数。如果向量的方向相反,只需设置

b = fliplr(a)
并使用向量b调用函数。此函数将使用Horners算法计算多项式。请注意,这假设z_0是要计算多项式的值,因此返回的是单个值,而不是向量

function x = horner(a,z_0)
n = length(a);
result = a(1);
for j = 2:n
    result = result*z_0 + a(j);
end
x = result;
如果要传入值z的向量进行计算,以便可以同时计算z元素的多个点,则可以通过向量传入它们:

function x = horner(a,z)
n = length(a);
m = length(z);
result = a(1)*ones(1,m);
for j = 2:n
    result = result.*z + a(j);
end
x = result;

现在,返回的x将是结果向量

看起来像是循环1到short:我说它应该是k=1:n,对于j=n:-1:kedit polyval向您展示了Matlab人员是如何实现算法的。看起来像是循环1到short:我说它应该是k=1:n,对于j=n:-1:kedit polyval向您展示了Matlab人员是如何实现算法的实现了算法。太棒了!非常感谢你的帮助。大脑冻结,没有意识到向量应该翻转:。非常感谢@克里斯蒂安:没问题,请注意,您也可以使用polyval函数-查看相关文档。再次感谢。是的,我其实很熟悉这个函数,但是因为我真的很想学习这个东西,我也想自己写算法:太棒了!非常感谢你的帮助。大脑冻结,没有意识到向量应该翻转:。非常感谢@克里斯蒂安:没问题,请注意,您也可以使用polyval函数-查看相关文档。再次感谢。是的,我实际上对这个函数很熟悉,但因为我真的想学习这些东西,我也想能够自己编写算法: