Kri*_*ian 1 matlab polynomial-math
我在将Horner算法的伪代码转换为MatLab中的正确代码时遇到了一些麻烦.我认为我的困惑源于这样一个事实:代码假定第一个向量条目可以用0引用,而在MatLab中,这必须是1.我试图相应地修改我的代码,但是我没有得到它工作正常.pseducode如下:
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)
Run Code Online (Sandbox Code Playgroud)
这是我在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;
Run Code Online (Sandbox Code Playgroud)
我在向量上尝试了这个,a = [1 -4 7 -5 -2]它表示多项式中的系数.我也定了z_0 = 3.根据我的书,我应该收到输出vecor a = [1 8 25 37 19],但我的代码给出了输出向量a = [-245 -313 -146 -29 -2].
如果有人可以帮我清理这段代码,我将非常感激!
试试这个 - 这里a是多项式系数的向量,用(1)作为多项式中最高度项的系数.如果你的矢量是相反的方式,只需设置
b = fliplr(a)
Run Code Online (Sandbox Code Playgroud)
并使用向量调用该函数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;
Run Code Online (Sandbox Code Playgroud)
如果你想传递一个值向量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;
Run Code Online (Sandbox Code Playgroud)
现在返回的x将是你的结果向量