【问题标题】:Using trapz to find the area under a curve使用 trapz 求曲线下面积
【发布时间】:2018-10-28 09:59:03
【问题描述】:

我正在尝试使用trapz 来查找曲线下的区域。

我的x 数据表示日期时间,我的y 数据表示加速度为f(x)。加速度计读数采用 SI 形式。

x (HH:mm:ss.SSS) 内的示例数据:

'01:06:48.330'
'01:06:48.352'
'01:06:48.374'

y 内的示例数据(加速度计值 * 9.81):

8.73750256159470
8.59619296907904
8.63520263017352

当我输入以下命令时(使用整个数据数组):

velocity = trapz(x,y);

我得到一个如下所示的持续时间数组:

velocity = 
    duration
    00:00:13

我不太确定我理解 00:00:13 的含义。当我计算速度时,我希望看到类似 9.81 m/s 或 5m/s 的数据。我是在滥用函数还是应该将持续时间数组转换为不同的对象类型?

【问题讨论】:

  • MATLAB 没有“意识”你的 y 轴是一个加速度,只是在 trapz 计算期间你有一些单位日期时间乘以标量......没有一些例子让我们重现,很难告诉您 13 秒与您的预期结果有何关系。
  • @Wolfie 明白了。当然,我用一个小例子更新了这个问题。那么得到实际速度可能需要 9.81 * 13 秒?
  • 请注意,一个更好的示例将具有 2 个特征:1。 它实际上给出了您也引用的结果(使用这三个值不会产生 13 秒)。 2. 我们实际上可以复制和粘贴代码来运行和调整它。 x=datetime({'00:00','00:01','00:02'},'inputformat','HH:mm'); y=[1,2,4]; 之类的结果 trapz 持续时间为 4 分 30 秒。创建像这样的简单示例也可以帮助您自己,因为它可以帮助您更好地理解您可以用手计算的简单数字发生了什么。
  • @Wolfie 我同意。当我知道问题所在时,我通常会做得更好。这对我来说只是一个曲线球。感谢您的帮助。

标签: matlab numerical-integration


【解决方案1】:

日期时间在 MATLAB 中通常很棘手。在进行任何积分之前,我会将其转换为秒。这是一个示例解决方案。

x=['01:06:48.330'; '01:06:48.352'; '01:06:48.374'];
datetime(x,'Format','HH:mm:ss.SSS');
secvec = datevec(x);
secvec = 3600*secvec(:,4)+60*secvec(:,5)+secvec(:,6); % times measured in seconds

y = [8.73750256159470; 8.59619296907904; 8.63520263017352]; % accelerations in m/s^2
trapz(secvec,y)
>> ans = 0.380216002428058 % Gained velocity, measured in m/s

【讨论】:

    【解决方案2】:

    您期望 m/s 积分加速度输出的原因仅仅是因为您正在执行涉及 (m/s^2)*s 的特定计算,即 y 轴 * x 轴。

    让我们用一个简单的例子,我们先转换成秒然后积分。

    x = datetime( {'00:00', '00:01', '00:02'}, 'inputformat', 'HH:mm' ); % Time
    y = [1 2 4]; % Acceleration (m/s^2)
    
    x_elapsed_seconds = datenum(x-min(x))*24*60*60; % Datenum returns days, convert to secs
    
    z = trapz( x_elapsed_seconds, y ); % Velocity = 270 m/s
    

    我们可以验证,对于这个例子,270m/s 是正确的,因为计算中只有 2 个梯形:

    1. 1m/s^22m/s^2 的梯形持续 1 分钟 = 60 秒:60*(1+2)/2 = 60*1.5 = 90 m/s
    2. 2m/s^24m/s^2 的梯形持续 1 分钟 = 60 秒:60*(2+4)/2 = 60*3 = 180 m/s

    我们将梯形面积相加得到结果:90 + 180 = 270,正如预期的那样。这就是为什么在使用真实数据之前最好使用一个简单的示例进行验证。

    【讨论】:

    • 对我来说,使用“速度”公式来计算给定速度(加速度的积分)从开始到结束的行进距离是有意义的。这对你有意义吗?
    • 我不知道你指的是什么速度公式......通过将加速度与时间相结合,你基本上是在做v = u + at,假设你的初始速度u是0,@987654334 @ 不是恒定的,因此您需要一个积分。使用其他SUVAT equations 表示距离等
    • 速度公式:速度=距离/时间。因此使用该公式,速度是绝对值(速度),时间是经过的时间。所以可以解决距离问题,不是吗?
    • 该公式仅在您的速度恒定时才有效,事实并非如此,或者您不需要积分(可变)加速度来近似它。您需要另一个积分。参考我之前的链接,您希望 s = ut + 0.5*at^2 积分 w.r.t t 代替乘法,因为 a 不是恒定的。或者在一个循环中估计许多地方的速度并以此方式估计距离。
    猜你喜欢
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多