找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4276|回复: 4

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

[复制链接]
发表于 2008-8-25 11:14:56 | 显示全部楼层 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!6 X/ o  V7 e7 B6 m) `* \3 A
s=zeros(1,5000);; n6 U, {: P9 _
s=rand(1,5000);. e6 T  P5 p9 g0 c, T) V
n=length(s);2 J/ R/ T. F5 u( e
max=0.0;. s: \5 V% E# g
index=0;
  @: }$ P9 p2 R) Q9 Xfor i=1:n
3 O) q" G$ p" P8 Y7 X' i$ D. Z% Y if  max<s(i)
& z5 z: z8 a7 P1 y( ^2 D# E4 r( G     max=s(i);0 e) b4 N0 v* N$ _4 t* E! `9 v
     index=i; , P8 J9 \& t) a
  else
: H9 `8 W$ d. w  I6 _4 a1 C  end
7 v6 y1 r+ n3 K# V* |& L4 U9 o1 e6 cend   
+ z9 m- K: i6 s3 D9 u2 _small=100;% w( b. z: D, `3 X+ w' S2 S- c
wenergys=sum(s(index-small:index+small).^2);: I# Q1 b7 J5 p$ V3 r
middle=150;) Q5 c5 T8 w7 e
wenergym=sum(s(index-middle:index+middle).^2);
2 T$ i; O$ z6 ?% a/ q' blarge=200;
3 m' G( F" g; P. I- J) }3 F2 F# A- {wenergyl=sum(s(index-large:index+large).^2);2 t4 s% D  [) ^' Y; @
energy=sum(s.^2);
! B$ |6 H- Y* I) R1 r# W" O9 Sratios=wenergys/energy;8 z6 ?9 |8 F/ e: \
ratiom=wenergym/energy;
- `4 U8 ?  I7 U$ `3 t' X$ Fratiol=wenergyl/energy;
3 [  g' K7 H, x6 Km=max*100000;" c0 h" `' G3 ]' i. U" k, ^5 i1 _
ws=wenergys*100000;
. r2 ^) O1 |7 B* [# ?& z2 I) Bwm=wenergym*100000;
- Z0 D3 u8 C& C1 O$ }4 Y; S8 `wl=wenergyl*100000;* ?: t: Y% o. H/ ^+ r
e=energy*100000;
  e: }1 [. U' g8 Ka=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

发表于 2008-8-26 13:20:56 | 显示全部楼层
求一维数组s的最大值和索引位置 max 和index可以求出来呀  N/ L( L% L6 G* h8 b9 J- ~9 l5 f
也就是执行了for循环了9 ~* P4 Q" N" I; d
可能计算机计算速度快  我们感觉不到等待的时间   
+ i- A  h: ~# \$ G$ m如果是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还没接触过4 L( l$ g7 m; S1 u( L$ Y+ p/ s
是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?0 |' y/ X3 b3 F/ W% S3 W  I- x

3 L3 f& Q5 {' \- m6 Q提示也正好是indices must either be real positive integers or logicals$ k9 F9 }" H$ M
你再修改下随即数?
发表于 2008-8-29 17:23:09 | 显示全部楼层
Subscript indices must either be real positive integers or logicals
# ~0 c: }# a8 |/ i# V3 h8 a4 iR$ P# O9 A3 s
9 t1 g& N& O* H/ Q7 Q5 V9 ?中文解释:下标索引必须是正整数类型或者逻辑类型
# v  D; F) w* D8 ]+ q1 CW7 b# p# ]3 I' k8 m3 Z, `8 e4 n0 M8 w7 V' @
出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始% Q& _, r2 b9 m+ x" t8 B, f
* P! C: y' D8 A3 U- h8 W

8 i5 R5 C# C  V0 b这是网上搜到的资料   借鉴下
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-6-19 08:29 , Processed in 0.064732 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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