0

2 つのデータセットを使用した数値積分の計算中に問題に直面しています。統合には、シンプソンズ 1/3 ルールを使用しています。

    function I = Simpsons(f,a,b,n)
    if numel(f)>1 % If the input provided is a vector
        n=numel(f)-1; h=(b-a)/n;
        I= h/3*(f(1)+2*sum(f(3:2:end-2))+4*sum(f(2:2:end))+f(end));
    else 
        h=(b-a)/n; xi=a:h:b;
        I= h/3*(f(xi(1))+2*sum(f(xi(3:2:end-2)))+4*sum(f(xi(2:2:end)))+f(xi(end)));
    end

このコードは、積分を正しく計算します。

乗算値の計算中に問題が発生するようになりました。

たとえば、f と g の 2 つの関数があり、どちらも同じ変数に依存しています。変数は同じ範囲にあります。SO下限と上限は同じです。

$\int_a^b \! f(x) *g(x) \, \mathrm{d} x.$

ここで x の解像度が異なります。f(x) では 1000 個のデータがあり、g(x) では 1700 個のデータ ポイントがあります。したがって、要素ごとの乗算はできません。

この統合を解決する方法..

4

1 に答える 1

1

を使用して達成可能な1D関数については、関数の1つ、fまたはを他のファンクションポイントに補間する必要があります 。ginterp1

例えば:

% x1 an x2 have the same limits but different # of elements

 x1 = linspace(-10,10,100); 
 x2 = sort(rand(1,170)*20-10); # non-unifrom points from -10 to 10

 f1 = sin(x1);
 f2 = cos(x2);

ここで、f1 * f2を乗算したいとします。要素の数が必要なので、

 f2i= interp1(x2,f2,x1,'spline');

f2がf1と同じ数の要素を持つようにするか、代わりに

 f1i= interp1(x1,f1,x2,'spline');

f1がf2と同じ数の要素を持つようにします。

于 2013-01-13T18:45:31.643 に答える