Python はスーパー関数電卓?
久しぶりのプログラミング日記です。
"あとりえこばと"の日常を適当に書き綴っております。
Python の拡張ライブラリ、便利過ぎですね。
特に SymPy と SciPy には本当に何でも揃っています。
積分計算、テイラー展開、ベッセル関数、リーマンゼータ関数 ..... あらゆる計算が数行のコードを書くだけで済んでしまうのです。
特に SymPy が強力。近似解ではなく、人間が解くみたいにして代数記号を使った厳密解を出してきます。たとえば、Jupyter notebook で sin(x) の 5 乗を積分する場合は次のようなコードを書きます。
import sympy
sympy.init_printing()
sympy.var('x')
sympy.integrate(sympy.sin(x) ** 5, x)
たった 4 行のコードで済んでしまうのです。しかも実行結果を LaTeX 形式でコピーして、そのまま記事に貼り付けることもできます。SymPy、おそるべしです。まさに スーパー関数電卓(?)です。
とにかく一度こういう楽を覚えてしまうと、もう後戻りできないんですよね。
「二項展開しないと ...... 面倒だから SymPy にやらせよう」
「リーマンゼータ関数? Scipy にやってもらえばいいじゃん」
「行列積の計算 ...... 計算間違いすると読者さんたちに迷惑がかかるから(←言い訳)、NumPy にお願いしよう」
こんな感じで、あれも Python、これも Python みたいになってしまうわけです。もちろん、こんなことばかりしていると、もともと大して良くない頭に、深刻な追い打ちダメージを与えるに違いありません。
「たまには自分の手で計算しないと ...... 」
と反省したりもするのですが、年をとると積分計算とか億劫になってくるし、記事を書く場合は、やはり Python を活用した方が大幅に時間短縮できるので、「電卓依存症」からなかなか抜け出せないでいるのです。
今、世間で大流行している ChatGPT に Pyhon で電卓を作ってもらいました。
import tkinter as tk
def btn_click(num):
current = display.get()
display.delete(0, tk.END)
display.insert(tk.END, current + str(num))
def btn_clear():
display.delete(0, tk.END)
def btn_equal():
try:
result = eval(display.get())
display.delete(0, tk.END)
display.insert(tk.END, str(result))
except:
display.delete(0, tk.END)
display.insert(tk.END, "Error")
# ウィンドウの作成
window = tk.Tk()
window.title("電卓")
# テキストボックスの作成
display = tk.Entry(window, width=30, justify=tk.RIGHT)
display.grid(row=0, column=0, columnspan=4)
# ボタンの作成
btn_values = [
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"0", ".", "=", "+"
]
row = 1
col = 0
for btn_value in btn_values:
btn = tk.Button(window, text=btn_value, width=5)
btn.grid(row=row, column=col)
btn.configure(command=lambda num=btn_value: btn_click(num))
col += 1
if col > 3:
col = 0
row += 1
# クリアボタンの作成
clear_btn = tk.Button(window, text="C", width=5, command=btn_clear)
clear_btn.grid(row=row, column=col)
# イコールボタンの作成
equal_btn = tk.Button(window, text="=", width=5, command=btn_equal)
equal_btn.grid(row=row, column=col+1)
# ウィンドウの表示
window.mainloop()
py ファイルにコードを保存すればちゃんと動きます。大したものです。tkinter を使っているので、Google Colab では実行できません。IDLE や VScode などで実行してください。
世界で初めて電卓を作ったのは誰?
ChatGPT に「世界で初めて電卓を作ったのは誰ですか?」と尋ねると、以下のような答えが返ってきました。
[ChatGPT] 世界で初めて電卓を作った人物は、フランスの数学者であるブレーズ・パスカル(Blaise Pascal)です。彼は17世紀の1642年に、父親の税収計算のために機械式の計算装置を作成しました。これは「パスカリーヌ(Pascaline)」と呼ばれる装置で、歯車やギアを使用して数値を計算することができました。パスカリーヌは、10進法の数値を扱うことができ、積や商の計算を行うことができました。この発明により、計算がより効率的に行われるようになり、数学や科学の研究において大きな進歩をもたらしました。ブレーズ・パスカルは、数学的な業績により広く知られていますが、パスカリーヌは彼の最も有名な発明の一つとして知られています。
Casioの関数電卓
理系の人なら、誰もが学生時代にお世話になった関数電卓。Casio の電卓を使っていた人がほとんどではないでしょうか。そんなわけで、ChatGPT に Casio の関数電卓の優れている点を尋ねてみました。
[ChatGPT] Casioの関数電卓は、数多くの優れた特徴を持っています。以下にいくつかのポイントを挙げます:
1. 多機能性: Casioの関数電卓は、数学や科学、統計などのさまざまな分野で広範な機能を提供しています。三角関数、指数関数、対数関数、微分、積分、行列計算、確率分布など、さまざまな数学的・科学的な計算が可能です。
2. 直感的なインターフェース: Casioの関数電卓は、使いやすく直感的な操作インターフェースを備えています。ボタンやメニューがわかりやすく配置されており、計算や操作がスムーズに行えます。
3. 可携性: Casioの関数電卓はコンパクトで軽量なデザインですので、持ち運びやすく、学校やオフィスなどでの使用に便利です。
4. 大きなディスプレイ: 多くのCasioの関数電卓は、大きなディスプレイを備えています。これにより、長い数式や複雑な計算結果を見やすく表示することができます。
5. メモリ機能: Casioの関数電卓は、変数や計算結果の一時的な保存に役立つメモリ機能を提供しています。これにより、計算の途中経過を保持したり、再利用したりすることができます。
6. 解析機能: 高度なモデルでは、グラフ描画機能や数値的な方程式の解を求める機能も備えています。これにより、関数や方程式のグラフを表示し、解析的なアプローチで問題を解決することができます。
これらは一般的な特徴ですが、Casioの関数電卓は多様なモデルがあり、機能や特徴は製品ごとに異なる場合があります。使用目的やニーズに合わせて、適切なモデルを選ぶことが重要です。
【プログラミング日記】
先日、知人から「とらや」の羊羹を送っていただいたので大喜びしました。甘いものは大好きです。少し前に叔母から京都のお茶もいただいたので(← もらってばかり)、合わせていただくと、この上ない「幸せ時間」となりますね。実は羊羹と一緒に桃のシロップ漬けもいただきました。特大ガラス瓶にたくさん入っております。羊羹が終わったあとは、桃にヨーグルトを添えて賞味したいと楽しみにしています。実は羊羹と桃の他にも、柚餅子というお菓子もいただきました。三箱も届いたので、一箱は日頃からお世話になっている友人夫妻にお裾分けしましたが、二箱は我が家でいただきました …
え? お菓子の話はもういい? そうですか?
それでは、今回はこのへんにしておきます。
また次回のプログラミング日記にて近況を報告したいと思います。