GeminiはAIであり、不正確な情報を表示することがあります
オリジナル
AKITOの特異点 様 (0:00〜7:03) はじめまして。 よろしくお願いします。
↓【数学実況#14】図形
https://youtu.be/3MOYnJCVwok
いつものsympyで(オリジナル Youtbe様の方法を参考に)
ver0.1
・先生の丸写しです。図形の証明は省略です。ステキです。
・0:58 中学生の知識。
# ver0.1
from sympy import *
var('x',real=True,positive=True)
print("#",together(solve(Eq(x**2/sqrt(1+x**2),1/sqrt(1+x**2)+x/sqrt(1+x**2)),x)[0]))
# (1 + sqrt(5))/2
いつもの sympyで
ver1.1
・?大人の知識。
CAD風です。大人は、補助線、そ~じが苦手。左下が原点A(0,0)
solve は言う事キカン? solveset でテキトウにです。
後半で、IntervalについてGemini先生に聞いています。
# ver1.1
from sympy import *
var('x',real=True,positive=True)
AB,CD =x,1
A,B,C,D=map(Point,[(0,0),(AB,0),(AB,CD),(0,CD)])
E =Line(B,D).projection(C) # ;print(E)
# sol =solve(Eq(Line(E,D).angle_between(Line(E,A)),pi/4),x)
sol =solveset(Eq(Line(E,D).angle_between(Line(E,A)),pi/4),x,Interval(1,5)).args[0]
print("#",together(sol))
# (1 + sqrt(5))/2
ver1.2
・上と同じ。?無理すれば、何をやっているかわからなくなります。
ver1.1 ありきです。さすがにEまで押し込むのはどうかと思いました。
作図が不便です。ver1.1 のように、Eを残して、作図でEを見たい。
# ver1.2
from sympy import *
var('x',real=True,positive=True)
AB,CD =x,1
A,B,C,D=map(Point,[(0,0),(AB,0),(AB,CD),(0,CD)])
E =Line(B,D).projection(C) # ;print(E)
print("#",together(solveset(Eq(Line(E,D).angle_between(Line(E,A)),pi/4),x,Interval(1,5)).args[0]))
# (1 + sqrt(5))/2
ver2.1
・0:52 高校の知識。
・Gemini先生へ、ver1.1 を丸投げです。何だか怪しい。
geometry モジュールを使わずに、tan の処理のソースコードと計算結果を背景黒で。教えて下さい。(ver1.1 のソースコードの表示を省略)
0:55 高校生知識。高校の知識。
6:25 高校生知識。tan を使った処理。
SymPyを用いた幾何問題の代数的解法(tanを利用)
# ver2.1
from sympy import *
x = Symbol('x', real=True, positive=True)
# 各頂点の座標(平面ベクトル)
A = Matrix([0, 0])
B = Matrix([x, 0])
C = Matrix([x, 1])
D = Matrix([0, 1])
# 点Cから直線BD(方向ベクトル BD = D - B)への射影点 E
BD = D - B
t = (C - B).dot(BD) / BD.dot(BD)
E = B + t * BD
# ベクトル ED と EA
v1 = D - E
v2 = A - E
# tan(pi/4) = 1 となる条件: |v1 x v2| / (v1 . v2) == 1
# 2次元の外積(行列式)と内積の計算
cross_val = abs(v1[0]*v2[1] - v1[1]*v2[0])
dot_val = v1.dot(v2)
# 方程式 |v1 x v2| / (v1 . v2) = tan(pi/4) = 1
eq = Eq(cross_val / dot_val, 1)
# 解の導出
sol = solveset(eq, x, Interval(1, 5))
ans = together(sol.args[0])
print("#", ans)
# # (1 + sqrt(5))/2
ver1.4
・Gemini先生へ。(連続して)
matrix も使わないで教えて下さい。
# ver2.2
# SymPyを用いた幾何問題の代数的解法(Matrix・geometry非使用)
from sympy import *
x = Symbol('x', real=True, positive=True)
# 各頂点の座標 (x, y)
Ax, Ay = 0, 0
Bx, By = x, 0
Cx, Cy = x, 1
Dx, Dy = 0, 1
# 点Cから直線BDへの射影点 E(Ex, Ey) の計算
# 直線BDの方向ベクトル: (Dx - Bx, Dy - By) = (-x, 1)
BDx, BDy = Dx - Bx, Dy - By
BCx, BCy = Cx - Bx, Cy - By
# 射影のパラメータ t = (BC · BD) / (BD · BD)
t = (BCx * BDx + BCy * BDy) / (BDx**2 + BDy**2)
Ex = Bx + t * BDx
Ey = By + t * BDy
# ベクトル ED と EA の成分
v1x, v1y = Dx - Ex, Dy - Ey
v2x, v2y = Ax - Ex, Ay - Ey
# 外積 z成分(平行四辺形の面積)と 内積
cross_val = abs(v1x * v2y - v1y * v2x)
dot_val = v1x * v2x + v1y * v2y
# tan(angle) = |外積| / 内積 = tan(pi/4) = 1
eq = Eq(cross_val / dot_val, 1)
# 解の導出
sol = solveset(eq, x, Interval(1, 5))
ans = together(sol.args[0])
print("#", ans)
# (1 + sqrt(5))/2
(続けて)Gemini先生へ。作図。
以下のpng図だけ出力して。matplotlib 不要。
(ver1.1 のソースコードの表示を省略)
・「間違っています。」を繰り返しました。紆余曲折の末です。
solveset の Interval について
以下のInterval で 私はテキトーに(1,5) にしていますが、根拠付けをお願いします。
(ver1.1 のソースコードの表示を省略)
Interval(1, 5) は、問題の幾何学的解である 黄金比 $x = \frac{1+\sqrt{5}}{2} \approx 1.618$
を探索範囲内に確実に収めつつ、不適解(代数的な虚解や範囲外の解)を除外するための 適切な開区間 です。
(途中省略)?黄金比
A. 実数全体かつ正の範囲指定 (Interval(0, oo))...
B. 黄金比を明確に囲むコンパクトな区間 (Interval(1, 2))...
??
いつもの? sympyの実行環境 と 参考のおすすめです。
sympyのweb上での実行方法
SymPy Live Shellで。
ソースコードの解説は、私よりGemini先生へのソースコードの丸投げがおすすめです。質問の追加はいくらでも。
モーダル対応?「実行して」。「作図して」「問題文章の丸投げ」いい時代です。
いつもと違うおすすめです。
sympy のdoc
・いらないカモ。
ver0.1
・together(*args, **kwargs)
https://docs.sympy.org/latest/modules/core.html#sympy.core.expr.Expr.together
ver1.1
・angle_between(l2) < Line
https://docs.sympy.org/latest/modules/geometry/lines.html#sympy.geometry.line.LinearEntity.angle_between
・Solveset
https://docs.sympy.org/latest/modules/solvers/solveset.html
ver1.2
・Matrices
https://docs.sympy.org/latest/tutorials/intro-tutorial/matrices.html
・dot(p)
https://docs.sympy.org/latest/modules/geometry/points.html#sympy.geometry.point.Point.dot
ver2.1
ver2.2
wikipedia内で
qiita 内で
後記
GeminiはAIであり、不正確な情報を表示することがあります
・後出しで、私の言い訳です。気をつけて確認しているつもりです。
お気づきがあれば、アドバイスいただけると幸いです。
