2012-08-15 77 views
3

我在與Matlab的trapz功能怪異的結果。我有兩個變量,zptest和omega,都是正數,3000x2x1數組。當我繪製zptest vs omega(plot(zptest(:1,1),omega(:,1,1))時,曲線顯然是正的,並且在積分時應該給出肯定的結果。情況並非如此然而,如下所示:Trapz給人怪異的結果

trapz(zptest(:,1,1),ω-(:,1,1))

ANS =

- 0.049999940237341

只是爲了證明兩者的ω和zptest爲正:

查找(歐米加(:,1,1)< 0)

ANS =

空矩陣:0×1

查找(zptest(:,1,1)< 0)

ANS =

空矩陣:0×1

我知道我不給任何上下文到我實際上在做什麼,但這似乎是一個獨立於上下文的問題。有誰知道發生了什麼事?

以升序(並且因此y值)

回答

5

嘗試重新排序X:

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

trapz(x,y) x的分化通過DIFF施加(X,1,1),即[x(2:n,:) - x(1:n-1,:)].如果x是降序會給負面的DX。無論是積極還是消極都無關緊要。但是,在plot中,曲線將呈現正定(您實際上看不到點的順序,只能從平面上的兩個矢量中進行配對)。

(比較下面的):它

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)) 
+0

很有意義,非常感謝! – beardo34 2012-08-15 19:03:59

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所指出的那樣,圖表只顯示函數是正的,而不是點的順序。