找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4358|回复: 4

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

[复制链接]
发表于 2008-8-25 11:14:56 | 显示全部楼层 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!* E  [! o9 T' O3 E+ h- s, h. D% P
s=zeros(1,5000);
1 I* g; T9 a/ W; C! ]! R% p# `( a; as=rand(1,5000);& N+ Q; u2 k2 i0 \: l8 }0 c. X. o
n=length(s);
' r; I5 C! O9 I( Jmax=0.0;* ]4 U% O+ v4 `
index=0;8 w; o& Q" t+ v7 H
for i=1:n
4 M# j' A, n% u6 b$ I( L% B. D% c if  max<s(i)4 W0 C+ ?5 n$ F4 m5 S, R7 R9 }& F
     max=s(i);
- p6 y. O, l2 e, Y     index=i;
5 b3 x( z' h; N5 m$ \" v2 _  else/ a5 B0 C! [; a: T% [
  end
7 m$ w; W8 G/ x$ h* V5 Eend   
& l# E* l, j1 ^! M5 n( i9 wsmall=100;
( h, J  S$ K  @/ ewenergys=sum(s(index-small:index+small).^2);
: {) }5 B- i! O% k8 amiddle=150;
$ {& e: z# v. q  L. v7 Swenergym=sum(s(index-middle:index+middle).^2);
+ ^+ ~4 L& s$ x3 Xlarge=200;
- S: c' u' j& L& E+ `" w2 \8 Nwenergyl=sum(s(index-large:index+large).^2);8 @# U1 u7 u7 `. r- c
energy=sum(s.^2);- e0 O* E! Q: ?: e: h8 V0 n
ratios=wenergys/energy;
6 V0 q* f$ G3 oratiom=wenergym/energy;
- V  v8 H) N! h% kratiol=wenergyl/energy;
5 D& g9 E2 L, ^- z- jm=max*100000;
3 T* I# p) \; p" ^+ h9 |8 Jws=wenergys*100000;
7 f& H% {$ G' B5 N* N. Swm=wenergym*100000;
- s9 \+ Z. a, Nwl=wenergyl*100000;
) S" r# b2 z5 c% Oe=energy*100000;7 X" Q# m8 z; u4 J3 t
a=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

发表于 2008-8-26 13:20:56 | 显示全部楼层
求一维数组s的最大值和索引位置 max 和index可以求出来呀
, h: f6 e% Z, ^1 W也就是执行了for循环了. R# W1 ~; |/ U
可能计算机计算速度快  我们感觉不到等待的时间   
6 _( `) x0 V: T$ {0 T7 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还没接触过. v" c$ c4 X( c2 s) S+ t
是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?( H1 n( O" r" ]$ g& {1 _6 ?+ W
1 B& J/ t( i) f" Z
提示也正好是indices must either be real positive integers or logicals) U1 B9 y3 X4 k5 A
你再修改下随即数?
发表于 2008-8-29 17:23:09 | 显示全部楼层
Subscript indices must either be real positive integers or logicals' ?. n9 }8 V$ m8 P. e/ x. t
R$ P# O9 A3 s- H8 g- ?9 L6 w7 f  g* T. I
中文解释:下标索引必须是正整数类型或者逻辑类型1 c- z7 y, g8 _+ \8 a
W7 b# p# ]3 I' k8 m8 ^- y. o. k% L
出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始
9 Y; l" T1 o2 a& ~; U( G
$ s# e" V- d) j+ {- \. u0 o8 D3 O
这是网上搜到的资料   借鉴下
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-8-24 00:06 , Processed in 0.062031 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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