我在將Horner算法的僞代碼翻譯成MatLab中的正確代碼時遇到了一些麻煩。我認爲我的困惑源於代碼假設第一個向量條目可以被0引用的事實,而在MatLab中,這必須是1.我試圖相應地修改我的代碼,但是我不明白它正常工作。該pseducode如下:MatLab - Horner算法
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' – 2012-08-14 19:01:39
'編輯polyval'顯示了Matlab人員如何實現算法。 – Jonas 2012-08-14 19:16:56