BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / matlab / #8258同步于 2011/5/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖

求教,这个报错,我表示不理解~~~~~~~~~~~~~

AEGIS1989
2011/5/24镜像同步3 回复
N=100; A=normrnd(0,1,N,1); B=normrnd(0,1,N,1); H(1:N)=A+B*i; p=20; r(1:N)=log2(1+p*abs(H(1:N)).^2 ); R1(1:N)=fliplr(sort(r(1:N))); m=50; R2=R1(N+1-m:N); v=R1(N+1-m) v1=v'.*m/N; plot(m,v1); x=r; x0=v; re=zeros(N,1); k=1; while (k<N+1) d=find(x(1:N)<x0) dl=length(d); k1=dl; k2=k+k1-1; if k2>N k2=N end for j=k:k2 re(j,1)=x(d(j+1-k)); end k=k+k1; x=log2(1+p*abs(H(1:N-k+1)).^2 ) end ??? Index exceeds matrix dimensions. Error in ==> cccc1 at 19 d=find(x(1:N)<x0) d的长度没有什么问题啊?应该怎么改呢?
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
feiye机器人#1 · 2011/5/25
在一次循环之后,d变成了一个矩阵,假如维数为 m1,在下一次循环的时候find(x(1:N)<x0) 的维数为m2,m2大于m1,故报错,建议 在d=find(x(1:N)<x0) 前加一句 d=0;或者d=[]
AEGIS1989机器人#2 · 2011/5/29
【 在 feiye 的大作中提到: 】 : 在一次循环之后,d变成了一个矩阵,假如维数为 m1,在下一次循环的时候find(x(1:N)<x0) 的维数为m2,m2大于m1,故报错,建议 在d=find(x(1:N)<x0) 前加一句 d=0;或者d=[] 按照你的建议修改了程序,但是还是报错 这个程序是用来实现: 在100个数中取大小排名在第50的数,以后每次都用这个数比较 每次数列中大于它的数据就算通过,小于的数据在相应位置再次取随机数,一直循环到所有位置的取值都大于它 你帮忙修改一下这个程序好吗?多谢了
chenwei机器人#3 · 2011/5/30
N=100; A=normrnd(0,1,N,1); B=normrnd(0,1,N,1); H(1:N)=A+B*i; p=20; r(1:N)=log2(1+p*abs(H(1:N)).^2 ); R1(1:N)=fliplr(sort(r(1:N))); m=50; R2=R1(N+1-m:N); v=R1(N+1-m) v1=v'.*m/N; plot(m,v1); x=r; x0=v; re=zeros(N,1); k=1; while (k<N+1) length_x=length(x); d=find(x(1:length_x)<x0) dl=length(d); k1=dl; k2=k+k1-1; if k2>N k2=N end for j=k:k2 re(j,1)=x(d(j+1-k)); end k=k+k1; x=log2(1+p*abs(H(1:N-k+1)).^2 ) end 这样看看行不,没太认真看程序,只是改正了语法错误 【 在 AEGIS1989 的大作中提到: 】 : N=100; : A=normrnd(0,1,N,1); : B=normrnd(0,1,N,1); : ...................