keledd 2021-10-01 13:59 采纳率: 100%
浏览 1010
已结题

如何用matlab对一组数据进行定积分计算

本人有一组200800x700double的rate.mat数据(是一组速度数据),想对这组数据在时间范围为【0-700】内进行定积分计算,以便求出这段时间内的位移。

t=0:200799;    %t取到200799是因为matlab说要和rate的长度相等,即长度应为200800
v=rate;
x=trapz(t,v)

这段代码积出来的数据并不正确,所以对求定积分有了些疑惑。
希望有人可以指导下如何正确的对这组数据进行定积分计算,非常感谢!!

  • 写回答

1条回答 默认 最新

  • joel_1993 2021-10-01 14:28
    关注

    你好,trapz要搞清楚你积分的维度在哪个方向,比如对V = T^2+X^2在x方向积分(即积分消去x留下对t的函数)

    t = 0:1:10;
    x = 0:1:20;
    [T, X] = meshgrid(t,x);
    V = T.^2+X.^2;
    I = trapz(x, V);
    
    
    I =
    
            2670        2690        2750        2850        2990        3170        3390        3650        3950        4290        4670
    

    真实值是

    I = t.^2*(20^1-0^1) + 1/3*(20^3-0^3)
    
    I =
    
       1.0e+03 *
    
        2.6667    2.6867    2.7467    2.8467    2.9867    3.1667    3.3867    3.6467    3.9467    4.2867    4.6667
    

    可见trapz梯形法积分精度还是可以的

    你要对T积分留下X也很简单

    t = 0:1:10;
    x = 0:1:20;
    [T, X] = meshgrid(t,x);
    V = T.^2+X.^2;
    I = trapz(t, V')%V转置一下即可
    

    结果也不差的

    I =
    
      列 1 至 11
    
             335         345         375         425         495         585         695         825         975        1145        1335
    
      列 12 至 21
    
            1545        1775        2025        2295        2585        2895        3225        3575        3945        4335
    

    题主对时间积分,那就是对那每一行的700列作积分:

    t=0:699;    %你是对时间积分应该取时间维度真实的时间【0-700】
    v=rate;
    x=trapz(t,v')
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月9日
  • 已采纳回答 10月1日
  • 创建了问题 10月1日

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 深度学习残差模块模型
  • ¥20 两个不同Subnet的点对点连接
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计