Matlabの境界x0とx1で指定されたxの範囲で関数f(x)を表すベクトルを数値積分したいと思います。積分の出力が正しく、収束していることを確認したいと思います。
必要なエラー許容度を特定するのに役立つquad関数とquadl関数がありますが、入力引数は関数である必要があり、関数の結果のベクトルではありません。2つのベクトルxとf(x)を入力できるtrapz関数もありますが、ベクトルxで使用される間隔に応じて、xに関するf(x)の積分を計算します。ただし、quadやquadlのように、trapzを使用して許容誤差を調整し、答えが収束していることを確認する方法はありません。
quadおよびquadl関数を使用できない主な問題は、f(x)が次の方程式であるということです。f(x)= sum(exp(-1/2 *(xy)))、合計はyを超えています。ここで、yは長さnのベクトルであり、xは関数f(x)に毎回与えられる要素です。したがって、ベクトルyのすべての要素が要素xから減算され、yの合計が計算されて、値f(x)が得られます。これは、mがnと等しくないxのm値に対して行われます。
Matlabのマニュアルで説明されているようにquadlを使用する場合、f(x)は別の関数.mファイルで定義され、次にメインの呼び出しファイルで定義されます。Q= quadl(@ f、x0、x1、tolerance、X、 Y); ここで、Xは長さmのベクトルであり、Yは長さLのベクトルです。Matlabはエラーを出します:「???==>マイナス行列の次元を使用したエラーは一致する必要があります。」.m関数ファイルで関数f(x)を定義する行で。f(x)= sum(exp(-1/2 *(xy)))
問題は、Matlabがxとyを互いに減算するときに同じ長さのベクトルとして扱うのに対し、必要なのはベクトルXの単一の要素から毎回ベクトルYを減算することだと思います。
この問題を解決し、許容誤差を制御する方法でf(x)とxを数値積分する方法をお勧めしますか?