机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4047|回复: 4

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

[复制链接]
发表于 2008-8-25 11:14:56 | 显示全部楼层 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!
& U$ V( @) ~; n9 }/ ^0 T' W3 Zs=zeros(1,5000);
, v& A( _" h" w- G6 Ls=rand(1,5000);
- Z3 H  Z& B1 u8 @6 v, ]* En=length(s);
7 \3 T9 q. S! s$ r6 Umax=0.0;0 x- b6 |" Q9 y
index=0;
. p. t  S. D% Qfor i=1:n
5 o) j: o6 w+ J3 H3 K7 m5 ? if  max<s(i)
# [2 r/ f; G3 ~     max=s(i);  i( u) U* \( C) f4 e( l$ Q
     index=i; - n9 p, ?  k, E6 H& k/ R2 T
  else  }% p6 K; S' A1 V# o* H9 K1 L
  end; S0 {9 b7 P. s; f$ a( U6 [
end   
/ h, g3 ?1 S9 ]3 S- x5 z$ Y# `small=100;
, c# N$ O% I' l- \, R0 ~wenergys=sum(s(index-small:index+small).^2);9 V1 j+ Y7 T# A* y
middle=150;
  F1 J1 z/ r6 N: L8 }wenergym=sum(s(index-middle:index+middle).^2);
2 h1 U; k# a: h8 |. L" L; Zlarge=200;
0 I  r$ E, ^% l' e5 j" N5 fwenergyl=sum(s(index-large:index+large).^2);5 D9 _: R  K& s. y- T
energy=sum(s.^2);
: n& I1 P' a% c9 S4 _. D* Aratios=wenergys/energy;0 D# T1 X& W! C; \! N8 |1 j* d
ratiom=wenergym/energy;
" _9 v5 K9 r3 D% \ratiol=wenergyl/energy;/ p3 d0 m" c) p- r4 t! g) E: U. j
m=max*100000;! s# Y. F  v+ h: H6 u3 d
ws=wenergys*100000;+ r2 F6 C2 G1 [
wm=wenergym*100000;
( U" S; _2 _7 j( E' ~wl=wenergyl*100000;
2 T/ O' F4 K1 Z0 o5 T6 X5 A; ?' Qe=energy*100000;8 G& B& I+ W" K4 C0 u
a=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

发表于 2008-8-26 13:20:56 | 显示全部楼层
求一维数组s的最大值和索引位置 max 和index可以求出来呀
+ j6 M* o! e- O  c' w- l也就是执行了for循环了
; E! q- v, s" c0 _5 z7 B可能计算机计算速度快  我们感觉不到等待的时间   
! f0 _# t% s& h1 P. Y如果是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还没接触过
" Y% j% f& \" c( t  m# z是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?! i/ K2 e3 @5 |+ K
$ U. F; s5 C- k# |
提示也正好是indices must either be real positive integers or logicals
9 T6 g: O, z2 B# v你再修改下随即数?
回复 支持 反对

使用道具 举报

发表于 2008-8-29 17:23:09 | 显示全部楼层
Subscript indices must either be real positive integers or logicals! y6 Y, g9 c# d0 l9 z' d
R$ P# O9 A3 s5 P* G8 N, {+ A2 \6 _; Y0 Q
中文解释:下标索引必须是正整数类型或者逻辑类型
5 D* E% v2 c, G8 c; mW7 b# p# ]3 I' k8 m
. w5 ]# {+ H+ m. U; V, e+ G出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始. o! [/ F( Q  A8 |9 U
( B2 z8 J& S2 `& r: J
0 F$ K/ t& V: H: ^$ n
这是网上搜到的资料   借鉴下
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-20 22:35 , Processed in 0.059542 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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