質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

410閲覧

数値解析学の台形公式の求め方がわからないです

lap._

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2024/12/08 14:07

実現したいこと

積分の応用のプログラムで、f(x)=exp(-x^2)を0から1まで0.1ずつ刻む台形公式で求めたいです。

発生している問題・分からないこと

まず、自然対数の表し方がわからないです。あと、最後刻んだ台形の合計を求めるプログラムでunsupported operand type(s) for *: 'NoneType' and 'float'と出てしまいます。
ここで質問するには申し訳ないほど、無知なので色々教えてください。

該当のソースコード

import numpy as np n=10 a=.0 b=1.0 h=(b-a)/n x=a def F(x): np.exp(-x*x) for j in range(n): x=x+h if x==1.0: break J=(np.sum(F(x)))*h/2 print('n=%d,h=%F,J=%F'%(n,h,J))

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

わからないことがわからなすぎて本当に申し訳ないです。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

台形公式 の「区間幅が等間隔の場合」の公式によれば,「端点(x = a, b)の関数値の半分と分割点の関数値の総和に区間幅を掛ける」ことで定積分の近似値が得られます。

下記に記述例を示しますが,分割点の配列(x_div)を求めるために numpy.arange() を用いました。

Python

1import numpy as np 2 3def F(x): 4 return np.exp(-x * x) 5 6n = 10 7a, b = 0, 1 8h = (b - a) / n 9 10x_div = np.arange(a + h, b - h / 2, h) 11J = ((F(a) + F(b)) / 2 + np.sum(F(x_div))) * h 12 13print('n = %d, h = %F, J = %F' % (n, h, J)) 14# n = 10, h = 0.100000, J = 0.746211

投稿2024/12/09 05:41

little_street

総合スコア453

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lap._

2024/12/10 02:04

回答ありがとうございます! (a + h, b - h / 2, h)とはどういうことか教えて頂けますでしょうか。
little_street

2025/05/05 23:36 編集

np.arange(start, stop, step) の start は最初の値を設定すれば良いですが stop は(その値を含めず)動作を止めるための値なので,分割点 x = a + h, a + 2h, a + 3h, ... , b - 2h, b - h を得るためには stop として b - h と b の間の値を設定する必要があり b - h/2 を使いました。なお,b を設定しても良さそうですが扱っているのが浮動小数点数であり a から h 単位で増やしていったときに誤差で b よりわずかに小さい値が得られるとそれも出力に含まれてしまう可能性があります(整数の場合はその心配はいりません).
lap._

2024/12/11 12:24

ご丁寧にありがとうございます!
guest

0

あと、最後刻んだ台形の合計を求めるプログラムでunsupported operand type(s) for *: 'NoneType' and 'float'と出てしまいます。

こちらについては定義した関数で値を返していないのが原因です。
下記のようにすればエラーは解消されます。

def F(x): return np.exp(-x*x)

関数を修正して実行するとn=10,h=0.100000,J=0.018394と出力されました。

※ 計算結果が正しいかどうかは検証していません。

投稿2024/12/08 15:08

meg_

総合スコア10932

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問