返回信息流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的长度没有什么问题啊?应该怎么改呢?
这是一条镜像帖。来源:北邮人论坛 / matlab / #8258同步于 2011/5/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
求教,这个报错,我表示不理解~~~~~~~~~~~~~
AEGIS1989
2011/5/24镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
在一次循环之后,d变成了一个矩阵,假如维数为 m1,在下一次循环的时候find(x(1:N)<x0) 的维数为m2,m2大于m1,故报错,建议 在d=find(x(1:N)<x0) 前加一句 d=0;或者d=[]
【 在 feiye 的大作中提到: 】
: 在一次循环之后,d变成了一个矩阵,假如维数为 m1,在下一次循环的时候find(x(1:N)<x0) 的维数为m2,m2大于m1,故报错,建议 在d=find(x(1:N)<x0) 前加一句 d=0;或者d=[]
按照你的建议修改了程序,但是还是报错
这个程序是用来实现:
在100个数中取大小排名在第50的数,以后每次都用这个数比较
每次数列中大于它的数据就算通过,小于的数据在相应位置再次取随机数,一直循环到所有位置的取值都大于它
你帮忙修改一下这个程序好吗?多谢了
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);
: ...................