5

有限体 F17 の上に楕円曲線を描く必要があります (つまり、曲線上に特定の点を描きたい) のですが、どういうわけかうまくいきません。

曲線は次の式で定義されます。

y^2 = x^3 +x + 1 (mod 17)

以下の方法を試しましたが、うまくいきません。

for x = 0:16, plot(x, mod(sqrt(x^3+x+1), 16),'r')', end

誰かが助けることができますか?

[アップデート]

Nathan と Bill の提案によると、これは少し変更されたバージョンです。

 x = 0:18
 plot(mod(x,16), mod(sqrt(x.^3+x+1), 16),'ro')

ただし、 x=4 の場合、y が整数ではないなど、数値が間違っているように感じます。

ここに画像の説明を入力

4

3 に答える 3

3

方程式を満たすすべてのポイントをテストする必要がありますy^2 = x^3 +x + 1 (mod 17)。これは有限体であるため、単純に右辺の平方根を取ることはできません。

これは私がそれについて行く方法です:

a=0:16  %all points of your finite field
left_side = mod(a.^2,17)  %left side of the equation
right_side = mod(a.^3+a+1,17) %right side of the equation

points = [];


%testing if left and right side are the same 
%(you could probably do something nicer here)
for i = 1:length(right_side)
    I = find(left_side == right_side(i));
    for j=1:length(I)
        points = [points;a(i),a(I(j))];
    end
end

plot(points(:,1),points(:,2),'ro')
set(gca,'XTick',0:1:16)
set(gca,'YTick',0:1:16)
grid on;

楕円曲線

于 2012-02-06T14:16:22.653 に答える
1

Matlab はベクターをネイティブに処理します。

あなたの構文は似ていましたが、ベクトル化する必要があります:

x = 0:16
plot(x, mod(sqrt(x.^3+x+1), 16),'r')

に注意し.てくださいx.^3。これは、何の意味もないxベクトルを 3 乗するのではなく、 Matlab に各要素を個別に 3 乗するように指示します。x

于 2012-02-06T07:24:04.743 に答える