24小时热门版块排行榜    

查看: 3394  |  回复: 2

liguoming01

木虫 (正式写手)

[求助] 求解MATLAB中相邻数组的绝对值之差已有1人参与

我想通过MATLAB进行数据分析,数据如附件11.262所示,具体要实现的功能如下:
       如果相邻的数(附件中的“feed”数据)的绝对值之差大于1.5,而且持续5秒(附件中的“time”数据){例如:如果将feed导入命名为F,则条件为abs(F(i)-F(i+1))>1.5 && abs(F(i+1)-F(i+2))>1.5 && abs(F(i+2)-F(i+3))>1.5 && abs(F(i+3)-F(i+4))>1.5},则用这5个数(附件中的“feed”数据)中的开始之前的10个数的均值减去开始之后的10个数的均值{mean(F(i-10: i))-mean(F(i+4: i+14))},然后返回差值,返回出现这个差值的时间(附件中的“time”),返回出现差值的个数,返回差值的总和。
        简单的代码如下:
L = length(F);
B =[];
for i = 1: L
    if abs(F1(i)-F1(i+1))>2 && abs(F1(i+1)-F1(i+2))>2 && abs(F1(i+1)-F1(i+2))>2 && abs(F1(i+2)-F1(i+3))>2 && abs(F1(i+3)-F1(i+4))>2
        M = mean(F1(i-5:i,)-mean(F1(i+4:i+14,);
        B = [B,M];
        s = sum(B);
    end
end

运行的错误如下所示:

FEED
索引超出矩阵维度。

出错 FEED (line 5)
        M = mean(F1(i-5:i,)-mean(F1(i+4:i+9,);
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : 11.262.xlsx
  • 2016-12-14 20:37:34, 3.24 M

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

512095518

专家顾问 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
liguoming01: 金币+10, ★★★很有帮助 2016-12-15 22:07:07
你把循环次数改动下,就不会报错了。我这里a数据是读取你的feed数据。你需要的平均值的差值存在c中,b中存的是时间节点。你对应再改下就能得到时间差值呢
CODE:
a = load('a.txt');
b = [];
c = [];
for n = 1:length(a)-4
    if abs(a(n)-a(n+1))>1.5 && abs(a(n+1)-a(n+2))>1.5 &&...
            abs(a(n+2)-a(n+3))>1.5 && abs(a(n+3)-a(n+4))>1.5
        b = [b;n];
        c = [c;mean(a(n-10:n))-mean(a(n+4:n+14))];
    end   
end

没有极限,只有超越!
2楼2016-12-14 22:19:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

liguoming01

木虫 (正式写手)

引用回帖:
2楼: Originally posted by 512095518 at 2016-12-14 22:19:48
你把循环次数改动下,就不会报错了。我这里a数据是读取你的feed数据。你需要的平均值的差值存在c中,b中存的是时间节点。你对应再改下就能得到时间差值呢


a = load('a.txt');
b = [];
c = [];
for n = 1:le ...

您好,我按照您的算法算出来的数据,结果有点偏大。我的程序算法是这样的:
B =[];
C = [];
for i = 1: length(feed)-4
    if abs(feed(i)-feed(i+1))>2 && abs(feed(i+1)-feed(i+2))>2 && abs(feed(i+1)-feed(i+2))>2 && abs(feed(i+2)-feed(i+3))>2 && abs(feed(i+3)-feed(i+4))>2
        B = [B;i];
        C = [C;abs(mean(feed(i-10:i))-mean(feed(i+4:i+14)))];
        S = sum(C);
    end
end
代码基本上和您描述的类似。后面我看了一下结果,我发现,比如说如附图中的红圈所示,出现当数据中的第64,65,66,67,68,69,70,71个数同时出现它们后面的5个数的绝对值之差都大于2时,对数组中的数进行求差值了。我想这样,比如说当第64,65,66,67,68,69,70,71个数同时出现它们后面的5个数的绝对值之差都大于2时,我取第64个数前面的10个数均值减去第71个数后面的10个数均值,并将这些差值输入,这样能如何实现?
求解MATLAB中相邻数组的绝对值之差
错误分析.png

3楼2016-12-15 22:25:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 liguoming01 的主题更新
信息提示
请填处理意见