重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

プログラミング(Python)を勉強中の女子学生です!
課題で行き詰まったためご教授願います
質問内容は以下の通りです!
:台形公式で、面積1.718281828,シンプソンの公式で. 1.71828183の等分数をPythonを使って求めよ。
ソースコードが知りたいです。 よろしくお願いします

「プログラミング Pythonについて」の質問画像

A 回答 (3件)

一応ね。


与式がどーなってるのか分からんのだけど(教えて!gooだと写真が勝手に縮小されるんで、写真上げるより文章で書いた方が結果面倒が少ない)、一応、台形公式のプログラムと・・・多分「合成シンプソン公式」だと思うんだけど、

合成シンプソン公式:
https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%B3 …

のPythonコードは次のようなカンジかな。

# 台形公式
def trapezoidal(f, a, b, n = 1):
 def x(k): # 等分割されたk番目のx座標を求めるローカル関数
  return a + k*(b - a)/n
 if n < 1: # 1分割以下はあり得ないんで、エラー
  raise ValueError
 xs = [x(k) for k in range(n + 1)] # x_k座標のリスト
 ys = [f(x) for x in xs] # x_k座標に対応するyのリスト
 return ((b - a)/n) * ((ys[0] + ys[-1])/2 + sum(ys[1:-1]))

# シンプソン公式
def simpson(f, a, b, n = 1):
 if n < 1: # 1分割以下はあり得ないんで、エラー
  raise ValueError
 h = (b - a)/n
 xs = [(a + i * h, i) for i in range(n + 1)] # 分割されたx座標とインデックスのリスト
 ys = [(f(x[0]), x[1]) for x in xs] # x座標に対応するyとインデックスのリスト
 return (h/3) * (ys[0][0] + sum([2 * y[0] if y[1] % 2 == 0 else 4 * y[0] for y in ys[1:-1]]) + ys[-1][0])

これは高階関数として設計されてるんで、fに積分したい関数を入れて計算させます。
積分したい関数を別に作っても良いし、あるいは無名関数(ラムダ式)で与えても良いでしょう。
例えば、

∫(1/x)dx [積分区間はa = 1〜 b = 2]

を計算させたい場合、台形公式で1分割の場合、

>>> trapezoidal(lambda x: 1/x, 1, 2)
0.75
>>>

同じ積分をシンプソンで2分割で計算させたい場合、

>>> simpson(lambda x: 1/x, 1, 2, 2)
0.6944444444444443
>>>

となります。
「プログラミング Pythonについて」の回答画像3
    • good
    • 0

問題良く読めないんだけど、積分かしらん。

    • good
    • 0

一体何処で行き詰まったのか?



丸投げはダメよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!