Trapz给出了奇怪的结果

时间:2012-08-15 17:07:49

标签: matlab

我在Matlab的trapz函数中得到了一个奇怪的结果。我有两个变量,zptest和omega,两者都是正数,3000x2x1数组。

当我绘制zptest vs omega(plot(zptest(:,1,1),omega(:,1,1))时,曲线显然是正的,并且在积分时应该给出正结果。事实并非如此,但是,如下图所示:

  
    

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

  

ans =

-0.049999940237341

只是为了证明欧米茄和zptest都是正面的:

  
    

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

  

ans =

空矩阵:0乘1

  
    

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

  

ans =

空矩阵:0乘1

我知道我没有给出我正在做的事情的任何背景,但这似乎是一个与上下文无关的问题。有谁知道发生了什么事?

2 个答案:

答案 0 :(得分:6)

尝试按升序重新排序x(以及相应的y值):

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

trapz(x,y)中,通过diff(x,1,1)应用x的微分,即[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))

答案 1 :(得分: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指​​出的那样,情节只显示函数为正,而不是点的顺序。