机械必威体育网址

找回密码
注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3498 | 回复: 4
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2008-8-25 11:14:56 | 只看该作者 回帖奖励 | 倒序浏览 | 阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!5 ?+ S- X4 D- P! o7 e2 X$ `
s=zeros(1,5000);
4 ~2 n2 Y( T, js=rand(1,5000);
3 f) y1 C" U1 y) A- m2 u7 d4 Ln=length(s);
+ T' n: @( z" smax=0.0;; {4 f) x/ a& [# Y$ u+ Z
index=0;1 U* n g/ H4 {% ^
for i=1:n
7 {$ B- j6 _4 w! @if max7 T7 M/ [) ~/ k( a. Ymax=s(i);
( R, H, V/ T/ _& J7 \0 k! ~index=i;) J/ Y, G! H& A8 Z! E& c8 M- e$ w9 T; ]
else8 F% o2 t: q4 w3 w2 A
end2 [) h0 S1 H1 B
end- e( l, e# }$ j2 O1 P3 H
small=100;
8 M; c P8 k5 D2 F+ j# F+ {wenergys=sum(s(index-small:index+small).^2);- g: k" b2 x- m6 X+ L) Y
middle=150;2 o5 z4 f( I! @: s- p0 W
wenergym=sum(s(index-middle:index+middle).^2);2 j5 F7 f( b$ h) G0 a3 K$ i7 k
large=200;" \% Q; [* m) A0 o. @" I5 p9 c
wenergyl=sum(s(index-large:index+large).^2);
, Z, j( L( D, E) ?+ \+ Oenergy=sum(s.^2);
a5 _- u' S8 Uratios=wenergys/energy;
; }* E4 ?2 W- v$ t- Nratiom=wenergym/energy;
7 o7 Z- B x* vratiol=wenergyl/energy;5 g8 k$ _) ]' l% Y$ l) W: c+ L
m=max*100000;
: p* M, q4 [" T# ^4 Aws=wenergys*100000;# F0 U# b1 J$ h/ ]
wm=wenergym*100000;( t7 K# J: K4 _0 {8 v, ~* o
wl=wenergyl*100000;* Y( {1 Z$ ]# ~' N- \
e=energy*100000;( b" N" Y! v) r8 h+ i" u
a=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
2#
发表于 2008-8-26 13:20:56 | 只看该作者
求一维数组s的最大值和索引位置 max 和index可以求出来呀e8 x# O1 }% }6 {- j
也就是执行了for循环了
: h: W/ C, W a; G可能计算机计算速度快 我们感觉不到等待的时间6 R: D, o4 H/ Q
如果是5000个数字迭代的话肯能时间很长

评分

参与人数1 威望+10 收起理由
老鹰 + 10

查看全部评分

3#
楼主 | 发表于 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的兼容做的不够好。
4#
发表于 2008-8-29 17:20:28 | 只看该作者
labview还没接触过
; k) R: n4 s( L$ c' B3 K是不是取随机数的时候 最大值的标号正好小于200了 这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?. [! h2 a0 l, G/ F) a' g
, Y$ w" i5 r$ ^$ K# q- b
提示也正好是indices must either be real positive integers or logicals' H1 ^; l: ^5 Z1 m; p6 X. H# x( a
你再修改下随即数?
5#
发表于 2008-8-29 17:23:09 | 只看该作者
Subscript indices must either be real positive integers or logicals' i; ?( }2 T$ R# |# X
R$ P# O9 A3 s
: c9 h& c5 Y. o3 W* ?7 s) T* K中文解释:下标索引必须是正整数类型或者逻辑类型/ h4 m- {- z' A2 v3 y# `
W7 b# p# ]3 I' k8 m
/ d& U; W+ d B3 Z$ y# @出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始9 I, [: {+ N. F! H# a6 J

& D, _% ]5 [: }& |) y) W( C/ p! y/ m- [6 G7 j2 B
这是网上搜到的资料 借鉴下
您需要登录后才可以回帖 登录| 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址(京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号)

GMT+8, 2024-6-15 00:50, Processed in 0.052131 second(s), 18 queries , Gzip On.

Powered byDiscuz!X3.4Licensed

? 2001-2017Comsenz Inc.

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