2012-08-15 72 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所指出的那样,图表只显示函数是正的,而不是点的顺序。