3

Matlab 的 trapz 函数的结果很奇怪。我有两个变量,zptest 和 omega,它们都是正的,3000x2x1 数组。

当我绘制 zptest 与 omega (plot(zptest(:,1,1),omega(:,1,1)) 时,曲线显然是正的,并且在积分时应该给出正的结果。然而,情况并非如此,因为如下图:

陷阱(zptest(:,1,1),欧米茄(:,1,1))

答案=

-0.049999940237341

只是为了证明 omega 和 zptest 都是正面的:

查找(欧米茄(:,1,1)<0)

答案=

空矩阵:0×1

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

答案=

空矩阵: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)

通过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))
于 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 回答