2025年1月5日日曜日

Geminiは円周率を計算するPythonプログラムを作れるか?

 Geminiは、自然言語で指示を与えることで、プログラムコードを生成してくれるAIです。今回は、その能力を試すために、Pythonで円周率を計算するプログラムを作ってもらうことにしました。


円周率を計算する方法は色々ありますが、一番単純なモンテカルロ法を使ったプログラムを作ってもらうことにしました。


質問: モンテカルロ法で円周率を計算するPythonプログラムを作ってください。


回答


Python

import random


def monte_carlo_pi(n):

  """

  モンテカルロ法で円周率を計算する関数


  Args:

    n: ランダムに生成する点の数


  Returns:

    円周率の近似値

  """


  inside_circle = 0

  for _ in range(n):

    x = random.random()  # 0 から 1 の間の乱数を生成

    y = random.random()  # 0 から 1 の間の乱数を生成

    if x**2 + y**2 <= 1:  # 原点からの距離が 1 以下かどうかを判定

      inside_circle += 1

  pi = 4 * inside_circle / n

  return pi


# 点の数を指定して円周率を計算

num_points = 1000000

pi_approx = monte_carlo_pi(num_points)


print(f"{num_points}個の点を使用したモンテカルロ法による円周率の近似値: {pi_approx}")


回答は、プログラムだけでなく、そのプログラムの解説と実行結果も添付されています。さらに、matplotlib を使用して、点をプロットし、円周率の計算を可視化するプログラムも添付されています。matplotlibは、Pythonでグラフを描画するためのライブラリです。Geminiが生成したプログラムでは、matplotlibを使って、モンテカルロ法による円周率の計算を視覚的に表現しています。


以下のものです。


import random

import matplotlib.pyplot as plt


# ... (上記の monte_carlo_pi 関数) ...


# 点をプロット

plt.figure(figsize=(6, 6))

for _ in range(num_points):

  x = random.random()

  y = random.random()

  if x**2 + y**2 <= 1:

    plt.plot(x, y, 'ro', markersize=1)  # 円の中の点は赤色でプロット

  else:

    plt.plot(x, y, 'bo', markersize=1)  # 円の外の点は青色でプロット


plt.xlabel("x")

plt.ylabel("y")

plt.title("モンテカルロ法による円周率の計算")

plt.show()


このプログラムを実行したら、私のパソコンでは時間がかかりすぎました。それで使用する点の数を10分の1に減らして実行しました。


また、作成したグラフでは「モンテカルロ法による円周率の計算」というタイトルを表示することになっているのですが、フォントがDejaVu Sansフォントですので、日本語表示がうまくいきません。


そこで、フォントをメイリオに指定するように、プログラムを変更しました。





上のものが、その結果表示されたグラフです。


まとめ

Geminiは、簡単なプログラムであれば、正確に生成してくれることが分かりました。しかし、複雑なプログラムや、特定のライブラリを使ったプログラムを作成する際には、まだ課題があるようです。今後の発展に期待したいです。



0 件のコメント:

コメントを投稿

サッカー なでしこジャパンの昨日2月21日の勝利

 昨日、なでしこジャパンは、SheBelievesCupで、オーストラリアと戦い、4対1で勝利しています。 短縮版での試合を見ているだけなので、状況はよく把握していないのですが、ほとんど完勝と言える内容だったようです。 特に、3点目の得点は、左サイドから中央でMF藤野あおば、FW...