找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4359|回复: 4

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

[复制链接]
发表于 2008-8-25 11:14:56 | 显示全部楼层 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!
+ y8 p1 n% O4 M: I$ g- O4 Es=zeros(1,5000);6 s( M" Q4 F) A
s=rand(1,5000);
& p% J' x  i9 p3 v! d2 Rn=length(s);
, z3 n6 q2 ^6 \5 ~/ Z8 K3 G/ S0 Umax=0.0;  {' e( q5 u% q( V
index=0;
9 M7 Y! @+ k' |6 u( \for i=1:n& }7 o  ]" c  f' R2 ^6 p( P
if  max<s(i)
- x7 A, l6 L4 _     max=s(i);# I2 q( Q+ G4 ?+ F# \
     index=i;
% d  |! M& ]: ^8 N! P# Y7 `  else
+ d2 Y* X( ^; g1 k% ]! D# j: v  end
/ y8 t; `1 R& b- n  l, Jend   
+ h3 @+ [  a  k. o% t4 m' y6 B0 hsmall=100;
( e+ F- y7 Z; w" y; z3 Ywenergys=sum(s(index-small:index+small).^2);5 R. G9 I; N8 `3 e/ ~
middle=150;
( A7 j1 M& A( _* K0 C% V4 H+ @& bwenergym=sum(s(index-middle:index+middle).^2);
2 Y2 w. j3 e0 A- u, Llarge=200;7 |' J1 G4 L& A! \
wenergyl=sum(s(index-large:index+large).^2);- c) v7 \5 \" F8 h) v
energy=sum(s.^2);7 l" \" k/ v  l: {5 k/ }9 x# r
ratios=wenergys/energy;
! _9 s/ H- S5 y0 p: Fratiom=wenergym/energy;
  h9 @& Q4 y5 [3 i$ U. N3 h$ bratiol=wenergyl/energy;
: E( w# I: Y3 Q( c9 im=max*100000;! S# c- G+ S; x1 o
ws=wenergys*100000;
- u0 `( m* j( H5 Hwm=wenergym*100000;
+ S0 E+ P9 j6 ~' [- Y- Uwl=wenergyl*100000;) [' L0 y* ^; F
e=energy*100000;
+ g/ F8 `/ R- f' \$ J( qa=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

发表于 2008-8-26 13:20:56 | 显示全部楼层
求一维数组s的最大值和索引位置 max 和index可以求出来呀! o1 P; }- M! B1 b% h! g3 p
也就是执行了for循环了+ `2 }. q/ w- |
可能计算机计算速度快  我们感觉不到等待的时间    : z" a8 T- U- V0 z, Q! f
如果是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还没接触过3 N0 Z2 Q3 A  B- H
是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?$ |) Q5 B+ o- R2 g" m

& d  U8 i$ k# }9 U) A- _提示也正好是indices must either be real positive integers or logicals) v$ H2 T1 O* k' }
你再修改下随即数?
发表于 2008-8-29 17:23:09 | 显示全部楼层
Subscript indices must either be real positive integers or logicals( \4 c5 K" S) J- P+ j( [
R$ P# O9 A3 s
* T7 f5 Q: }5 p- s  J+ J. N中文解释:下标索引必须是正整数类型或者逻辑类型
3 G, g+ B" |( V6 D8 qW7 b# p# ]3 I' k8 m
9 }$ K, E8 j7 x' O) m7 r9 m出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始
6 E( a- i6 u5 B  f* B8 k+ Z" J. X7 J
7 I) ^' V* G- q& {" X/ a, l. B3 `6 E1 e: P! b
这是网上搜到的资料   借鉴下
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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