找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4448|回复: 4

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

[复制链接]
发表于 2008-8-25 11:14:56 | 显示全部楼层 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!$ q7 x0 ^; ~8 I7 Y
s=zeros(1,5000);* ?& a2 l) }- x, l0 U. @' _
s=rand(1,5000);3 }- L( v% ]  h, O: a
n=length(s);
9 `3 V$ a2 p5 }& w& I. |max=0.0;
( i1 b( ^3 G+ C& S$ vindex=0;
2 N3 s0 V' m# O# Q" M* a" T, \for i=1:n1 H+ Z4 O6 z0 b  V* G* K+ G6 a
if  max<s(i)
1 y" l1 i+ s8 c& K     max=s(i);
: G2 R1 i* P* J  R) L4 R& w     index=i;
1 k3 \' I% t6 m2 y+ H6 n. c' r  else1 u5 }5 I  z* i8 E' Q, O3 l4 c
  end
; I% _9 }3 N5 \" r; x* kend   
9 O5 J( U  P. X1 K6 w+ p1 asmall=100;
8 q0 A' x; N: Z0 }, Hwenergys=sum(s(index-small:index+small).^2);
6 v8 h* @1 o. `1 `% ]$ \middle=150;
6 Y# d! ]2 `1 {# nwenergym=sum(s(index-middle:index+middle).^2);
8 @: f$ c3 J* m, F! Zlarge=200;
3 M( @& m- U, J. s9 C) t0 bwenergyl=sum(s(index-large:index+large).^2);- I) Z5 }7 K8 F( g( l
energy=sum(s.^2);  B" j1 W& E/ i' O
ratios=wenergys/energy;
* h$ v- q( u; d- j  mratiom=wenergym/energy;
5 n/ y: O$ T  l# V, Xratiol=wenergyl/energy;  w3 n" L" Y+ s2 Y
m=max*100000;
$ S  O' ^+ h% L( z5 |- Z$ xws=wenergys*100000;, V- `1 S3 t3 n0 R4 d
wm=wenergym*100000;
: \$ b9 H) D( y. o1 ]! Jwl=wenergyl*100000;$ M) n& C) L! v3 z. ?
e=energy*100000;* z( t: C% s! p& f" W
a=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

发表于 2008-8-26 13:20:56 | 显示全部楼层
求一维数组s的最大值和索引位置 max 和index可以求出来呀
1 Q9 k# s; @. C也就是执行了for循环了
9 i9 M0 }6 p6 P- R3 R7 }可能计算机计算速度快  我们感觉不到等待的时间    * Z, I! y; E) P) S
如果是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还没接触过
: z8 ^% E/ f5 r2 g/ e是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?
# K& s/ K& x2 @9 q, K
& Y& z, c9 D3 O* X* Q' b5 |. @: [提示也正好是indices must either be real positive integers or logicals, \+ m( X# o5 f- N* B, Z6 y8 J& i
你再修改下随即数?
发表于 2008-8-29 17:23:09 | 显示全部楼层
Subscript indices must either be real positive integers or logicals
) T8 f3 R/ H% |; B! O, cR$ P# O9 A3 s3 ]4 p2 W' d9 X1 e, p
中文解释:下标索引必须是正整数类型或者逻辑类型
! D- w) u, m. E7 l6 J2 T. ^W7 b# p# ]3 I' k8 m1 i  \' j: Z0 F( f. W/ y
出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始9 Y3 l  ]/ k& [" \

+ Y) u& r  w6 s( i- m
5 u) k5 L& [! J" K这是网上搜到的资料   借鉴下
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-10-16 08:14 , Processed in 0.075863 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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