Matlab 标引误差

Matlab 标引误差,matlab,matrix,indexing,Matlab,Matrix,Indexing,继续获取索引错误“()-索引必须在索引表达式中最后出现” 基本上,我试图创建一个由randn(n,1000000)组成的矩阵x,其中每第j行乘以矩阵NV(i,j) %montecarlo模拟 函数[y1,y2,y3,y4]=ed1(SNRL,SNRS,SNRH,n)%ed是能量检测 g1=SNRL:SNRS:SNRH; g=10^(g1/10); β=0.8;%是概率pfa,不能大于1 pf1=零(1,长度(g)); pd1=零(1,长度(g)); pf2=零(1,长度(g)); pd2=零(1

继续获取索引错误“()-索引必须在索引表达式中最后出现” 基本上,我试图创建一个由randn(n,1000000)组成的矩阵x,其中每第j行乘以矩阵NV(i,j)

%montecarlo模拟
函数[y1,y2,y3,y4]=ed1(SNRL,SNRS,SNRH,n)%ed是能量检测
g1=SNRL:SNRS:SNRH;
g=10^(g1/10);
β=0.8;%是概率pfa,不能大于1
pf1=零(1,长度(g));
pd1=零(1,长度(g));
pf2=零(1,长度(g));
pd2=零(1,长度(g));
x=零(n,长度(g));
y=零(n,长度(g));
对于i=1:长度(g)
对于j=1:n
NV=(i,j);
x(j,:)=randn(n,1000000)*sqrt(NV(i,j));
y(j,:)=randn(n,1000000*(j),:)*sqrt(g(i))+x(j,:);
结束
%Tgam是伽马分布的阈值
Tgam=gaminv((1-β),n/2,(2/n)*(1+g(i));%flase检测概率
pf1(i)=gamcdf(Tgam,n/2,(2/n)*(1+g(i));%呵
pd1(i)=gamcdf(Tgam,n/2,2/n);%h1%检测概率

pf2(i)=长度(find(sum)(y.^2)/n有三件事会给你带来错误:

1)
NV=(i,j)
此语法将给您一条错误消息。如果您没有收到关于此行的错误消息,您在调用此代码的行中有一个错误,应该也发布该错误。请尝试
NV=零(长度(g),n);
进行临时修复,直到您知道NV应该是什么

2)
randn(n,1000000*(j),:)
也是糟糕的语法。你的意思是
randn(n,1000000*(j))?

3)
x(j,:)=randn(110000)*sqrt(NV(i,j))
x
写在代码中的大小不正确,除非
g
的长度神奇地达到10000


希望通过检查这三件事可以让你了解到底是什么给了你特定的错误信息(这与这些错误给我的任何信息都不一样)。

randn(n,1000000*(j),:)
什么是g,你说的NV=(i,j)是什么意思;?一些代码可以让我们重现你的错误,这太棒了。嘿,我已经添加了全部代码。NV(i,j)是噪声变化。但我会在后面添加矩阵计算,现在我希望它是一个矩阵IXj@AK4749我试过了,但它给了我一个错误:“未定义的函数或变量”randn“。嘿,非常感谢你的帮助,但是一旦我加入
x(j,:)=randn(110000)*sqrt(NV(i,j));
它给出了一个错误,说“randn”以前似乎用作函数或命令,与此处用作变量名称的用法相冲突。此错误的一个可能原因是您忘记初始化变量,或者您使用load或eval隐式初始化了它。”
%monte carlo simulation
function [y1,y2,y3,y4]= ed1(SNRL,SNRS,SNRH,n) %ed is the energy detection
g1= SNRL:SNRS:SNRH;
g=10.^(g1/10);
beta=0.8; % is the probability pfa, it cannot be more than 1

pf1=zeros(1,length(g));
pd1=zeros(1,length(g));
pf2=zeros(1,length(g));
pd2=zeros(1,length(g));
x=zeros(n,length(g));
y=zeros(n,length(g));

for i=1 : length(g)



for j=1:n
     NV=(i,j); 
    x(j,:) = randn(n,1000000)*sqrt(NV(i,j)); 
     y(j,:)=randn(n,1000000*(j),:)*sqrt(g(i))+x(j,:); 
end

 %Tgam is the threshold of gamma distribution 
 Tgam = gaminv((1-beta),n/2,(2/n)*(1+g(i))); %probab of flase detection
 pf1(i)= gamcdf(Tgam,n/2,(2/n)*(1+g(i))); %ho
 pd1 (i) = gamcdf(Tgam,n/2,2/n); %h1 % prob of detection

 pf2(i)= length (find(sum(y.^2)/n<Tgam))/1000000;
 pd2 (i) = length (find(sum(x.^2)/n<Tgam))/1000000; 

 y1=pf1; y2=pd1; y3=pf2; y4=pd2;
end