• ベストアンサー

畳み込み積分の数値計算方法

y(t)=∫f(τ)h(t-τ)dτ, 積分区間 0≦τ≦t. この畳み込み積分のfとhの関数形が具体的にわかっているときに、y(t)の値を求めるにはどうすればいいのでしょうか。積分が解析的な式で表される場合はその式にtの値を代入すれば済むと思いますが、解析的な式でかけない場合は数値計算しないといけないと思います。数値計算はどのようにするのでしょうか? ラプラス変換とかフーリエ変換とか使うのでしょうか? 数値積分をするのでしょうか? 常套手段があると思うので、教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
noname#252183
noname#252183
回答No.1

普通に表から”図積分”するだけです。 下図の Excel 表で、予め dτ と t の値を決め、A列に τ、B列に f(t-τ)、C列に g(τ) が入力済みとします。 (問題文の f(τ)h(t-τ) とは逆順に、作表を f(t-τ)g(τ) の順で書いてしまいましたが、もちろん結果は変わりません。) D列: f(t-τ)g(τ)dτ は単にこれらの積で、また、 E列: ∫ {τ=0→t} f(t-τ) g(τ) dτ は D列の部分和で 出ます。 (ちなみにこの例は、t=10、dτ=0.1 で  ∫ { τ=0 →t} exp(t-τ)・τ^2 dτ  を計算したものです。つまりこの例では、fとgを式から算出し作表しました。) 数値積分する以上、式によるよらないに関らず、積分範囲内の f(t-τ) と g(τ) の全ての数値が予め与えられなければなりません。 本例と同様のことは、他の任意のプログラムでもできます(できる筈です)。

apll
質問者

補足

ありがとうございます。 よくわかりました。 普通にf(τ)h(t-τ)またはf(t-τ)h(τ)の数値積分をすればいいということですね。 とすると、数値積分の精度でy(t)の値が変わってくると思うので、dτの大きさとか、数値積分のアルゴリズム自体を、fとhの関数形によって慎重に選ばなければいけないと思います。 fとhがこういう関数形の場合はこんなアルゴリズムを使うとか、常套手段のようなものがあったら教えてください。

その他の回答 (1)

noname#252183
noname#252183
回答No.2

#1です。 > 数値積分の精度でy(t)の値が変わってくると思うので、dτの大きさとか、数値積分のアルゴリズム自体を、fとhの関数形によって慎重に選ばなければいけないと思います。 畳み込み積分は、「時刻τで生じた(複数の)出来事の大きさ」×「過去の衝撃を時間の経過とともに忘却していく様子」いわば『いやしの過程』を、現在の時刻tまで積算していくものですので、 衝撃が1回だけなら普通は発生直後の方が忘却速度が大きいので、そこではdτを細かく取り、時間が経過したらdτを粗く取る、など工夫はできるでしょう。 これも、衝撃が次々襲いかかるような場合(失恋・失業・大病・投獄・・・?)や周期関数には当てはまらないので、関数形を見てその都度工夫すべきではないかと思います。 > fとhがこういう関数形の場合はこんなアルゴリズムを使うとか、常套手段のようなものがあったら教えてください。 さあ、そこまでの詳しい知識は私にはありません。 他の方のレスをお待ちください。 (なお私は持っていませんが、本当に優れたアルゴリズムがあれば、こんなところで無償公開はされません。)

apll
質問者

補足

回答をありがとうございます。 やはり、数値積分は慎重に行う必要があるんですね。。 畳み込み積分の正確な値を得るには、かなり工夫が必要そうですね。。 畳み込み積分の数値積分をするときに、より正確な値を得るためには、数値積分のどのアルゴリズムを選ぶべきかなど、詳しい方がおられましたら、ご教授ください。 ところで、数値計算プログラムのライブラリが無償でnetlibなどで配布されているようですが、そういうところで、畳み込み積分を行うライブラリが配布されているようなことはないのでしょうか? 探してみましたが、よくわかりませんでした。。 どなたか詳しい方がおられましたら、何卒ご教授よろしくお願いいたします。

関連するQ&A