サラリーマンのすらすらIT日記

IT関連を中心とした日々を綴ります。
--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2014/01/12

楕円曲線で遊ぶ その1−簡単な計算プログラムを作る

楕円曲線上の点にある演算を定義すると群をなすということは、楕円曲線のどの本にも書かれています。2つの点の足し算は高校レベルの数学の知識でできるので、それほど難しくありませんが、次のような問題を解こうとすると多くの計算が必要で面倒です。

3次曲線 は次の5つの有理点をもつ:

P1=(-2,3), P2=(-1,4), P3=(2,5), P4=(4,9), P5=(8,23)

この時、P2, P4, P5 は適当な整数m, nを使って、mP1+nP3と表されることを示せ。

いくつか計算しますと、

P1+P3=(1/4, -33/8)
P1-P3=(4, 9)
2P1=(8, -23)

これでP4=P1-P3とP5=-2P1はわかりましたが、手計算でP2を得るのはなかなかです。計算量が多いだけで計算自体は単純なので、いっそのことプログラムを作って調べてみようということで、Pythonでやってみることにしました。


#! /usr/bin/python3
#
# y^2 = x^3 + ax^2 + bx + c 上の2点P1=(x1,y1),P2=(x2,y2)の和
# P3=(x3,y3)=(lambda^2 - a - x1 - x2, -(lambda * x3 + nu))
# ここで、lambda = (y2-y1)/(x2-x1)
# nu = y1 - lambda * x1 = y2 -lambda * x2

a = input('a >')
b = input('b >')
x1 = input('x-coordinate of P1 >')
y1 = input('y-coordinate of P1 >')
x2 = input('x-coordinate of P2 >')
y2 = input('y-coordinate of P2 >')

if x1 == x2:
dydx = 3 * float(x1) * float(x1) + 2 * float(a) * float(x1) + float(b)
lambd = dydx / (2 * float(y1))
else:
lambd = (float(y2) - float(y1)) / (float(x2) - float(x1))
nu = float(y1) - lambd * float(x1)
x3 = lambd * lambd - float(a) - float(x1) - float(x2)
y3 = -(lambd * x3 + nu)

print('P1(' + x1 + ',' + y1 + ') + P2(' + x2 + ',' + y2 + ')')
print('=(' + str(x3) + ',' + str(y3) + ')')

単純なプログラムです。P1=P2の場合は、2P1(=P1+P1)で、P1を通る接線の方程式ですから、と置き、両辺をxで微分すると



なので、その傾きはとなります(プログラムの16,17行目)。

このプログラムで計算すると、P2=-2P1+P3となりました。

このプログラムではあまりにもしょぼいので、既製の代数学用計算プログラムを使ってみることにしました。次回はその話題です。

スポンサーサイト

コメント

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://sookibizviz.blog81.fc2.com/tb.php/1803-2690ae89

■  カレンダー

08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

■  プロフィール

sookibizviz

Author:sookibizviz
仕事の内容やソフトの紹介を交えながら、日々の悪戦苦闘を綴っていきます。

■  最新記事

■  最新コメント

■  最新トラックバック

■  月別アーカイブ

■  カテゴリ

未分類 (64)
BizViz (24)
IT (1119)
計量 (76)
環境 (26)
数学 (181)
ニュース (46)
本 (187)
音楽 (113)
囲碁 (5)
将棋 (26)
ブログ (14)
日記 (19)

■  FC2カウンター

■  検索フォーム

■  RSSリンクの表示

■  QRコード

QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。