1

ホーナーのアルゴリズムの擬似コードを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)

これを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ます。私の本によると、私は出力vecorを受け取るべきでしa = [1 8 25 37 19]たが、私のコードは出力ベクトルを与えますa = [-245 -313 -146 -29 -2]

誰かが私がこのコードを片付けるのを手伝ってくれるなら、私はとても感謝しています!

4

1 に答える 1

5

これを試してみてください - これaは、多項式の最高次数項の係数として a(1) でリストされた多項式係数のベクトルです。ベクトルが逆の場合は、単に設定します

b = fliplr(a)

vector を使用して関数を呼び出します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れるのは結果のベクトルになります

于 2012-08-14T18:58:46.410 に答える