1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

バレンタインデーなので LLM にハートを描かせてみた

Posted at

はじめに

こんにちは、ひよこです。今日はバレンタインデーなので、いろいろな LLM にハート型の関数を描かせてみました。果たして、どの LLM が最も美しいハートを描けるのでしょうか?

使った LLM

今回試した LLM は以下の通りです

  • GPT o1-pro
  • GPT o3-mini-high
  • Claude 3
  • Gemini 2 pro
  • Deepseek

試したプロンプト

各 LLM に以下のようなプロンプトを与えました

今日はバレンタインデーです。
そこでハート型に見える関数を作って表示する python プログラムを書いて下さい。
以下の条件を考慮すること。

- 媒介変数を用いてもよい
- 条件分岐は可能な限り使わない
- ハートの部分だけが望ましいがその他の部分があってもよい

結果と考察

結果としてすべての LLM がカージオイドの変形である、いわゆるハート曲線を使っていました。
これはまあ予想の範囲内でしょうか。

** LLM が使った数式**

\begin{aligned}
x &= 16 \sin^3 t \\
y &= 13 \cos t - 5 \cos 2t - 2 \cos 3t - \cos 4t
\end{aligned}

以下に出力結果を示しています。どの LLM もきちんとハートを赤にしている辺りはさすがですね。

GPT o1-pro

image.png

LLM の応答

🐣 GPT o1-pro による応答 以下は,よく知られたハート型の媒介変数表示を用いて描画する Python の例です。条件分岐は使用していませんので,必要に応じて調整してみてください。
🐣 GPT o1-pro によるコード
import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 2*np.pi, 1000)
x = 16 * np.sin(t)**3
y = 13*np.cos(t) - 5*np.cos(2*t) - 2*np.cos(3*t) - np.cos(4*t)

plt.figure(figsize=(6, 6))
plt.plot(x, y, color='red')
plt.axis('equal')
plt.axis('off')
plt.show()

GPT o3-mini-high

image.png

LLM の応答

🐣 GPT o3-mini-high による応答 以下に媒介変数 t を用いたハート型曲線を描画するサンプルコードを示します.
🐣 GPT o3-mini-high によるコード
import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 2*np.pi, 1000)
x = 16 * np.sin(t)**3
y = 13*np.cos(t) - 5*np.cos(2*t) - 2*np.cos(3*t) - np.cos(4*t)

plt.figure(figsize=(6, 6))
plt.plot(x, y, 'r', linewidth=2)
plt.axis('equal')
plt.axis('off')
plt.show()

Claude 3

image.png
LLM の応答

🐣 Claude 3 による応答 バレンタインデーにぴったりなハート型の関数を作成いたします。数学的な美しさを保ちながら、シンプルな方程式でハートを描きましょう。 このプログラムでは、以下の特徴を持つ数式を使用してハートを描画しています。
  1. 媒介変数表示を使用し、x と y をパラメータ t の関数として表現
  2. 条件分岐を使用せず、連続的な数式のみで形状を表現
  3. サイン関数とコサイン関数の組合せで滑らかなハート形を生成

ハートの形状は、x 座標に 3 次のサイン関数、y 座標にコサイン関数の級数を使用することで実現しています。
この方程式は数学的に美しく、スムーズなハート形を生成します。

プログラムを実行すると、赤い線で描かれたハート型のグラフが表示され、薄いピンク色の背景と格子線で見やすく整形されています。

この数式を少し変更することで、ハートの形状を調整することも可能です。例えば、係数を変更することでハートの幅や高さを変えることができます。

🐣 Claude 3 によるコード
import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 2*np.pi, 1000)
x = 16 * np.sin(t)**3
y = 13*np.cos(t) - 5*np.cos(2*t) - 2*np.cos(3*t) - np.cos(4*t)

plt.figure(figsize=(10, 10))
plt.plot(x, y, 'r-', linewidth=2)
plt.axis('equal')
plt.grid(True, linestyle='--', alpha=0.3)
plt.gca().set_facecolor('#fff5f5')
plt.show()

Gemini 2 pro

image.png

LLM の応答

🐣 Gemini 2 pro による応答 はい、承知いたしました。バレンタインデーにちなんで、ハート型に見える関数を Python で作成し、表示するプログラムを記述します。条件分岐を可能な限り使わないように工夫します。

解説

必要なライブラリのインポート
numpy: 数値計算用(配列の生成、三角関数の計算など)
matplotlib.pyplot: グラフ描画用

heart_function(t, a=1) の定義
この関数は、媒介変数 t を使ってハート型の x 座標と y 座標を計算します。
カージオイド (Cardioid) の変形を利用しています。カージオイドは、円の周りを別の円が滑らずに回転するときに、円周上の点が描く軌跡です。今回は、よりハート形に近づけるためにカージオイドの式を修正しています。

x = 16 sin^3(t)
y = 13 cos(t) − 5 cos(2t) − 2 cos(3t) − cos(4t)

媒介変数 t の範囲設定
np.linspace(0, 2*np.pi, 500) で、0 から 2π までを 500 等分した NumPy 配列 t を作成

ハート型関数の計算
heart_function(t, a=0.05) を呼び出して、x 座標と y 座標を計算

グラフの描画
plt.plot(x, y, color='red')
plt.axis('equal')
plt.title(...)
plt.show()

ポイント
条件分岐 (if 文) を使わずに、NumPy の三角関数と媒介変数表示を使ってハート型を表現しています。
heart_function は、滑らかな曲線を得るためにパラメータ t の値から x と y を算出します。

このプログラムを実行すると、バレンタインデーにぴったりの綺麗なハート型のグラフが表示されます。

🐣 Gemini 2 pro によるコード
import numpy as np
import matplotlib.pyplot as plt

def heart_function(t, a=1):
    """
    ハート型を媒介変数表示で定義する関数
    """
    x = a * 16 * np.sin(t)**3
    y = a * (13*np.cos(t) - 5*np.cos(2*t) - 2*np.cos(3*t) - np.cos(4*t))
    return x, y

t = np.linspace(0, 2*np.pi, 500)
x, y = heart_function(t, a=0.05)

plt.figure(figsize=(6, 6))
plt.plot(x, y, color='red')
plt.axis('equal')
plt.title("Happy Valentine's Day!")
plt.show()

Deepseek

image.png

LLM の応答

🐣 Deepseek による応答 特徴 数学的に正確なハート形状: 古典的なパラメトリック方程式を使用

x = 16 sin³(t)
y = 13 cos(t) - 5 cos(2t) - 2 cos(3t) - cos(4t)

視覚的効果
ピンク色の塗りつぶし (#FF69B4)
濃い赤の縁取り (#8B0000)
正方形のアスペクト比維持

バレンタイン仕様
タイトルを追加
軸を非表示にして装飾

このプログラムを実行すると、数学的に正確なハート型が美しく描画されます。媒介変数を使用しているため条件分岐が不要で、純粋な数学的計算のみで形状を表現しています。

🐣 Deepseek によるコード
import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 2*np.pi, 1000)
x = 16 * np.sin(t)**3
y = 13 * np.cos(t) - 5 * np.cos(2*t) - 2 * np.cos(3*t) - np.cos(4*t)

plt.figure(figsize=(8, 8))
plt.fill(x, y, color='#FF69B4')
plt.plot(x, y, color='#8B0000', linewidth=2)
plt.axis('equal')
plt.axis('off')
plt.title("Valentine's Heart", fontsize=20, color='#8B0000')
plt.show()

まとめ

今回の結果では、各 LLM によって微妙な違いが見られました。特に GPT モデルは一貫して正確な出力を示しました。一方、Deepseek は視覚的な美しさを重視した出力を示しました。シンプルなハートの GPT、数学のグラフ感が残る Claude3 と Gemini、そして中まできれいに色を塗っている Deepseek と各 LLM の個性が出ていますね。個人的には桃色感満載の Deepseek のハートが気に入っています。

🐣 みなさんも LLM にバレンタインを祝ってもらってみてはいかがでしょうか?
ではまた次の記事で!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?