3

Matlabのtrapz関数で奇妙な結果が出ています。zptestとomegaの2つの変数があり、どちらも正の3000x2x1配列です。

zptestとomegaをプロットすると(plot(zptest(:、1,1)、omega(:、1,1))、曲線は明らかに正であり、積分すると正の結果が得られるはずです。ただし、そうではありません。下に示された:

trapz(zptest(:、1,1)、omega(:、1,1))

ans =

-0.049999940237341

omegaとzptestの両方が陽性であることを証明するためだけに:

find(omega(:、1,1)<0)

ans =

空行列:0行1列

find(zptest(:、1,1)<0)

ans =

空行列:0行1列

私が実際に行っていることにコンテキストを与えていないことは知っていますが、これはコンテキストに依存しない問題のようです。誰かが何が起こっているのか分かりますか?

4

2 に答える 2

7

xを昇順(およびそれに応じてy値)に並べ替えてみてください。

x_order = x(end:-1:1); %fliplr
y_order = y(end:-1:1); %fliplr
trapz(x_order, y_order)

xの微分ではtrapz(x,y)、diff(x、1,1)を介して適用されます。つまり[x(2:n,:) - x(1:n-1,:)].、xが下降している場合、これは負のdxになります。正か負かは関係ありません。ただし、plot曲線では正定形で表示されます(実際には点の順序は表示されず、平面上の2つのベクトルからのペアのみが表示されます)。

(以下を比較してください):

x = [-1 -0.5 0]; y = 0.5-x; 
figure; plot(x,y); hold on; plot(-x, y,'r')
trapz(x, y)
trapz(-x, y)
figure; plot(x, y); hold on; plot(fliplr(-x), fliplr(y),'r')
trapz(fliplr(-x), fliplr(y))
于 2012-08-15T18:30:08.297 に答える
0

このように考えてください。制限が逆になっている場合、常に正である関数の積分は、依然として負になります。したがって、私たちはそれを知っています

int(x^2,-1,1) = 2/3

だが

int(x^2,1,-1) = -2/3

明らかにx。^2は常に正の数ですが、ここでは積分の限界は増加していませんでしたが、減少していました。

trapzの呼び出しのx_iが昇順でない場合、否定的な結果が得られます。これはtrapzに反映されています。Trapzは、提示されたポイントの順序を確認します。

x = -1:.1:1;
trapz(x,x.^2)
ans =
         0.67

xrev = fliplr(x);
trapz(xrev,xrev.^2)
ans =
        -0.67

そして、gevangが指摘しているように、プロットは関数が正であることのみを示しており、ポイントの順序は示していません。

于 2012-08-15T19:35:37.840 に答える