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

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



答案 =

-0.049999940237341

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



答案 =

空矩阵:0×1



答案 =

空矩阵:0×1

我知道我没有为我实际做的事情提供任何上下文,但这似乎是一个与上下文无关的问题。有谁知道发生了什么?

最佳答案

尝试按升序对 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))

关于matlab - Trapz 给出奇怪的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11973800/

10-12 20:05