机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3837|回复: 4

[matlab] 这段程序出错,不清楚怎么改

[复制链接]
发表于 2008-8-25 11:14:56 | 显示全部楼层 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!
5 q: o, n) |  ?. Q, ~s=zeros(1,5000);5 c4 M& m2 |! n/ g( k
s=rand(1,5000);
* D4 f% I# W/ [/ Bn=length(s);: J5 v1 T+ A: g
max=0.0;
5 f9 Y3 B: a" c6 q4 Uindex=0;
& q+ O8 E2 a/ F3 Rfor i=1:n
( H* {# a2 Y) c6 t2 i. |5 H4 e2 g3 q; ?0 L if  max<s(i)
& N3 J/ k* j  C9 l( b% C     max=s(i);
9 |/ M. h9 z4 X7 j  p& v     index=i;
. t3 k, L  o( a4 c  else" G: i6 C% ^. E7 r2 ]- a$ t8 C
  end! T3 Z) D% _% M* ~. J
end   * G4 H* c0 T2 C/ T
small=100;+ }3 Q8 t+ {1 Q0 A& I4 E1 K  N
wenergys=sum(s(index-small:index+small).^2);
. `! S' V+ q& H" rmiddle=150;9 h4 e: d* a, Z- k+ C* b" @
wenergym=sum(s(index-middle:index+middle).^2);0 {: g5 D5 R; J  Y' i( g8 y  [) h
large=200;
/ I: ?& ~# a' \6 B: x  P) |6 u/ @wenergyl=sum(s(index-large:index+large).^2);
# i# X! ?# o) c) e% a9 aenergy=sum(s.^2);
  p  g9 v2 S7 X7 k) Iratios=wenergys/energy;
) J7 T7 N$ d: F& j) X9 u: Zratiom=wenergym/energy;  M: W9 F9 B& z# J
ratiol=wenergyl/energy;" ]/ K, }) k! |: u! x
m=max*100000;7 T7 l2 r% {0 C+ ~5 g
ws=wenergys*100000;8 n1 m4 p' Y/ z! W) N4 p8 p. p$ a9 m6 j! c
wm=wenergym*100000;8 g) }- Y, g2 B" S
wl=wenergyl*100000;6 d& Y9 d( J7 U2 ?+ X
e=energy*100000;3 v5 P& ^( H& p+ o0 y
a=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

发表于 2008-8-26 13:20:56 | 显示全部楼层
求一维数组s的最大值和索引位置 max 和index可以求出来呀5 h/ K' c0 e. V4 Z* b
也就是执行了for循环了
$ @( D; X, f$ E可能计算机计算速度快  我们感觉不到等待的时间   
1 U5 `9 o7 \! B( I! L% C如果是5000个数字迭代的话肯能时间很长

评分

参与人数 1威望 +10 收起 理由
老鹰 + 10

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-28 16:09:39 | 显示全部楼层

回复 2# 小土匪 的帖子

其实我的这个程序是插在labview里的脚本。我一开始用的就是[max,index]=max(s);但是我是把程序作为脚本插入在labview程序里,labview提示出错:subscript indices must either be real positive integers or logicals. 然后就不给我执行了,改成for循环也一样。5000个数字迭代时间并不长,我在MATLAB里面试过,瞬间出结果,但是在labview里编译就是通不过。我现在怀疑是不是labview和MATLAB的兼容做的不够好。
回复 支持 反对

使用道具 举报

发表于 2008-8-29 17:20:28 | 显示全部楼层
labview还没接触过
( L) }4 W. f" g是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?$ c( N* \0 V% ~# T% j6 f
( l! i: ~& F! `) n
提示也正好是indices must either be real positive integers or logicals, o4 o2 c! O; w5 D2 q4 f8 Z
你再修改下随即数?
回复 支持 反对

使用道具 举报

发表于 2008-8-29 17:23:09 | 显示全部楼层
Subscript indices must either be real positive integers or logicals# j! e! s. P8 l" I  Y" u9 r
R$ P# O9 A3 s
  s) q$ P( u/ D中文解释:下标索引必须是正整数类型或者逻辑类型# y' f- F) c) z" Y4 V
W7 b# p# ]3 I' k8 m
& s; H+ b9 o% G3 C+ i2 t- {1 b- [出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始
+ g$ [) |( P( D6 V' g! D0 s! T8 x. f

! \$ T+ j2 c* h' e3 n这是网上搜到的资料   借鉴下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-2-17 08:25 , Processed in 0.064951 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表