matlab - 使用 trapz 求曲线下面积

标签 matlab numerical-integration

我正在尝试使用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 的值。我是否误用了该函数,或者应该将持续时间数组转换为不同的对象类型?

最佳答案

您期望积分加速度输出 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 米/秒

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

关于matlab - 使用 trapz 求曲线下面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50403203/

相关文章:

matlab - 在 Matlab 中,如何按元素比较两个 container.Map 对象?

matlab - 模拟来自联合累积分布函数的样本?

matlab - 在没有 for 循环的情况下,在 MATLAB 中查找向量中的特定事件?

r - R 中的积分函数

matlab - matlab 中的 Elementwise ifs - 它们存在吗?

regex - Matlab:使用正则表达式获取中间有空格的字符串

c - 尝试将插值函数与 C GSL 集成

c++ - odeint的runge_kutta4与Matlab的ode45的比较

c++ - 如何用矩形积分法得出这个百分比误差

r - AdaptIntegrate 与集成的性能