trapz函数给出了奇怪的结果

时间:2012-02-11 22:56:16

标签: matlab

我在两组数据上使用了trapz函数,但是出了点问题。

以下是数据视图: pressure drag coefficient and lift coefficient http://s17.postimage.org/inxk1xolr/cptheta.jpg

所以你可以理解我的问题; y轴是压力系数Cp,x轴是角度(总共49个值,0:7.5:360),绿色方阵的数据是从实验中获得的数据,红色曲线基本上是Cp sin (角度)而粉红色的是Cp cos(角度)

在红色上使用trapz可以很好地工作,它给出7.5,如果我反转trapz的输入参数,我得到这个数字的负数!问题是粉红色的图形,使用trapz给出了一个巨大的数字(这是错误的,我不应该得到这个),当切换输入参数时,我得到另一个巨大的数字,而不是第一个数字的负数,这很奇怪,我不知道出了什么问题,所以我使用quad(需要一个函数)来测试trapz的结果

for i = 1:48
    y = @(x) (Cp(i+1) - Cp(i)) / ( theta_rad(i+1) - theta_rad(i) ) * x .* sin(x);
    clll(i) = -0.5* quad(y,theta_rad(i), theta_rad(i+1));

end
clll = sum(clll);

for j = 1:48
    f = @(t) (Cp(j+1) - Cp(j)) / ( theta_rad(j+1) - theta_rad(j) ) * t .* cos(t);
    cdddp(i) = 0.5* quad(f,theta_rad(j), theta_rad(j+1));

end

cdddp = sum(cdddp);

对于第一个循环(红色曲线的四边形)我得到了一个非常接近的答案,错误可能是由于我在点之间使用的线性插值,对于第二个循环我得到了一个明智的答案,一个非常小的数字在我正在寻找的答案的范围内。我也在Excel中尝试了梯形规则,我又得到了这个庞大的数字,所以这是我做错了。


修改

我刚发现一个错误,我使用梯度使用角度而不是弧度!现在我的数字变得越来越小,但我认为还有另一个错误,因为使用四元组的积分给出了更明智的答案。

这是我用于trapz的代码

Cdp = 0.5*trapz( theta*pi/180, Cp.*cosd(theta) ); %pressure drag coefficient

Cl = -0.5*trapz(theta*pi/180, Cp.*sind(theta) ); %lift coefficient

1 个答案:

答案 0 :(得分:0)

我现在正在使用它,在trapz函数中使用弧度之后我得到了正确的答案。我试图做的插值是无稽之谈!我设法使用曲线拟合工具创建拟合,它非常高效

Cdp = 0.5*trapz( theta*pi/180, Cp.*cosd(theta) ); %pressure drag coefficient

可以通过以下工具实现:

fit1 = createFit( theta*pi/180, Cp.*cosd(theta) ); 
##createFit is generated by MatLab and I only need parts of it, all the plots commands were removed.
Cdp = 0.5*integrate(fit1,0,2*pi) ##"integrate" < this is why the tool is great, No need to export the coefficients to the workspace, create a function handle then use quad