Trapz给出了奇怪的结果

bea*_*o34 3 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都是正面的:

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

ans =

空矩阵:0乘1

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

ans =

空矩阵:0乘1

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

gev*_*ang 6

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

x_order = x(end:-1:1); %fliplr
y_order = y(end:-1:1); %fliplr
trapz(x_order, y_order)
Run Code Online (Sandbox Code Playgroud)

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))
Run Code Online (Sandbox Code Playgroud)